pschelpdesk/HetznerServer/Service/CheckMKService.cs
2024-12-25 11:15:24 +01:00

102 lines
3.3 KiB
C#

using System.Collections.ObjectModel;
using System.Net.Http.Headers;
using Avalonia.Media;
using Avalonia.Threading;
using CommunityToolkit.Mvvm.DependencyInjection;
using DynamicData;
using DynamicData.Binding;
using HetznerCloudApi;
using Material.Icons;
using Newtonsoft.Json.Linq;
using PSCHelpdesk.Plugins.HetznerServer.Models;
using PSCHelpdesk.Shared.Service;
using PSCHelpdesk.Shared.Setting;
using PSCHelpdesk.Shared.Tasks;
using ReactiveUI;
using Renci.SshNet;
namespace PSCHelpdesk.Plugins.HetznerServer.Service;
public class CheckMKService: IServerService
{
private SettingsManager _settingsManager;
private readonly DispatcherTimer _reloadTimer = new DispatcherTimer();
private ServerService _server;
public CheckMKService(ServerService serverService)
{
_server = serverService;
_settingsManager = (SettingsManager)Ioc.Default.GetService<ISettingsManager>();
this._reloadTimer.Tick += (sender, args) =>
{
this.reloadServerStatus();
};
_reloadTimer.Interval = TimeSpan.FromMinutes(2);
_reloadTimer.Start();
}
private async Task reloadServerStatus()
{
var settings = new CheckMKSettings();
_settingsManager.LoadPluginSettings("CheckMKSettings", settings);
var httpClient = new HttpClient();
httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(
new MediaTypeWithQualityHeaderValue("application/ld+json"));
httpClient.DefaultRequestHeaders.Add("User-Agent", "PSC Client");
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes($"{settings.Username}:{settings.Password}")));
try
{
foreach (var serv in _server.SourceCache.Items)
{
serv.Services.Clear();
}
var stringPlugins =
httpClient.GetStringAsync("https://check.thomas-peterson.de/cmk/check_mk/view.py?view_name=svcproblems&output_format=json");
var msg = await stringPlugins;
JArray pluginMsg = JArray.Parse(msg);
foreach (var token in pluginMsg)
{
if (token[0].ToString() != "service_state")
{
var serv = _server.SourceCache.Items.FirstOrDefault(e => e.Name.ToLower().Contains(token[1].ToString().ToLower()));
if (serv != null)
{
serv.Services.Add(new Models.Service(token[0].ToString(), token[4].ToString()));
}
}
}
foreach (var serv in _server.SourceCache.Items)
{
if (serv.Services.Count == 0 && serv.BackupLastModified > DateTime.Today.AddDays(-3) && serv.Status == "running")
{
serv.ServerStatus = Brushes.Transparent;
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
public void DoReScan(Server serv)
{
doScan(serv);
}
async private void doScan(Server serv)
{
}
}