102 lines
3.3 KiB
C#
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)
|
|
{
|
|
|
|
}
|
|
} |