Files
Moonlight/Moonlight/App/Services/Background/TelemetryService.cs
2023-07-07 03:06:16 +02:00

62 lines
2.2 KiB
C#

using Moonlight.App.ApiClients.Telemetry;
using Moonlight.App.ApiClients.Telemetry.Requests;
using Moonlight.App.Database.Entities;
using Moonlight.App.Helpers;
using Moonlight.App.Repositories;
namespace Moonlight.App.Services.Background;
public class TelemetryService
{
private readonly IServiceScopeFactory ServiceScopeFactory;
private readonly ConfigService ConfigService;
public TelemetryService(
ConfigService configService,
IServiceScopeFactory serviceScopeFactory)
{
ServiceScopeFactory = serviceScopeFactory;
ConfigService = configService;
if(!ConfigService.DebugMode)
Task.Run(Run);
}
private async Task Run()
{
var timer = new PeriodicTimer(TimeSpan.FromMinutes(15));
while (true)
{
using var scope = ServiceScopeFactory.CreateScope();
var serversRepo = scope.ServiceProvider.GetRequiredService<Repository<Server>>();
var nodesRepo = scope.ServiceProvider.GetRequiredService<Repository<Node>>();
var usersRepo = scope.ServiceProvider.GetRequiredService<Repository<User>>();
var webspacesRepo = scope.ServiceProvider.GetRequiredService<Repository<WebSpace>>();
var databaseRepo = scope.ServiceProvider.GetRequiredService<Repository<MySqlDatabase>>();
var apiHelper = scope.ServiceProvider.GetRequiredService<TelemetryApiHelper>();
try
{
await apiHelper.Post("telemetry", new TelemetryData()
{
Servers = serversRepo.Get().Count(),
Databases = databaseRepo.Get().Count(),
Nodes = nodesRepo.Get().Count(),
Users = usersRepo.Get().Count(),
Webspaces = webspacesRepo.Get().Count(),
AppUrl = ConfigService.Get().Moonlight.AppUrl
});
}
catch (Exception e)
{
Logger.Warn("Error sending telemetry");
Logger.Warn(e);
}
await timer.WaitForNextTickAsync();
}
}
}