using System.Diagnostics.Metrics; using Microsoft.Extensions.DependencyInjection; using Moonlight.ApiServer.Interfaces; using Moonlight.ApiServer.Services; namespace Moonlight.ApiServer.Implementations.Metrics; public class ApplicationMetric : IMetric { private Gauge MemoryUsage; private Gauge CpuUsage; private Gauge Uptime; public Task InitializeAsync(Meter meter) { MemoryUsage = meter.CreateGauge("moonlight_memory_usage"); CpuUsage = meter.CreateGauge("moonlight_cpu_usage"); Uptime = meter.CreateGauge("moonlight_uptime"); return Task.CompletedTask; } public async Task RunAsync(IServiceProvider provider, CancellationToken cancellationToken) { var applicationService = provider.GetRequiredService(); var memory = await applicationService.GetMemoryUsageAsync(); MemoryUsage.Record(memory); var uptime = await applicationService.GetUptimeAsync(); Uptime.Record(uptime.TotalSeconds); var cpu = await applicationService.GetCpuUsageAsync(); CpuUsage.Record(cpu); } }