using MoonCore.Attributes; using MoonCore.Helpers; using MoonlightServers.ApiServer.Database.Entities; using MoonlightServers.DaemonShared.Http.Responses.Statistics; using MoonlightServers.DaemonShared.Http.Responses.Sys; namespace MoonlightServers.ApiServer.Services; [Singleton] public class NodeService { public async Task CreateApiClient(Node node) { string url = ""; if (node.UseSsl) url += "https://"; else url += "http://"; url += $"{node.Fqdn}:{node.HttpPort}/"; var httpClient = new HttpClient() { BaseAddress = new Uri(url) }; httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {node.Token}"); return new HttpApiClient(httpClient); } public async Task GetSystemStatus(Node node) { using var apiClient = await CreateApiClient(node); return await apiClient.GetJson("api/system/status"); } #region Statistics public async Task GetApplicationStatistics(Node node) { using var apiClient = await CreateApiClient(node); return await apiClient.GetJson("api/statistics/application"); } public async Task GetHostStatistics(Node node) { using var apiClient = await CreateApiClient(node); return await apiClient.GetJson("api/statistics/host"); } public async Task GetDockerStatistics(Node node) { using var apiClient = await CreateApiClient(node); return await apiClient.GetJson("api/statistics/docker"); } #endregion }