From 39bc20bc25e50d3e3ec6ac6c6deb6bcc2b296514 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Fri, 2 May 2025 14:23:48 -0700 Subject: [PATCH] gatus external-endpoints push main server --- Helpers/HelperGatusToMona.cs | 68 +++++++++++++++++++++-------- Models/AppSettings.cs | 4 ++ Models/GatusToGatusConfiguration.cs | 20 +++++++++ 3 files changed, 74 insertions(+), 18 deletions(-) create mode 100644 Models/GatusToGatusConfiguration.cs diff --git a/Helpers/HelperGatusToMona.cs b/Helpers/HelperGatusToMona.cs index 55b43ff..39ba398 100644 --- a/Helpers/HelperGatusToMona.cs +++ b/Helpers/HelperGatusToMona.cs @@ -23,7 +23,7 @@ internal static partial class HelperGatusToMona { state); httpResponseMessage.Wait(cancellationToken); logger.LogInformation("Line {line}: {OriginalString} => {Resource} : {StateName} ; {state}", - 99, + 26, httpResponseMessage.Result.RequestMessage.RequestUri.OriginalString, appSettings.MonAConfiguration.Resource, appSettings.MonAConfiguration.StateName, @@ -33,7 +33,7 @@ internal static partial class HelperGatusToMona { Task body = httpResponseMessage.Result.Content.ReadAsStringAsync(cancellationToken); body.Wait(cancellationToken); logger.LogInformation("Line {line}: {Result}", - 10, + 36, body.Result); } @@ -46,17 +46,12 @@ internal static partial class HelperGatusToMona { internal static bool UpdateCount(AppSettings appSettings, IHttpClientFactory httpClientFactory, ILogger logger, CancellationToken cancellationToken) { _MonIn ??= MonIn.GetInstance(httpClientFactory); - if (_HttpClient is null) { - _HttpClient = httpClientFactory.CreateClient(); - _HttpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", appSettings.GatusConfiguration.Token); - } - Task httpResponseMessage = _HttpClient.PostAsync($"{appSettings.GatusConfiguration.BaseUniformResourceLocator}/api/v1/endpoints/{appSettings.GatusConfiguration.Key}/external?success=true&error=", null, cancellationToken); - httpResponseMessage.Wait(cancellationToken); - if (httpResponseMessage.Result.StatusCode != System.Net.HttpStatusCode.OK) - logger.LogWarning("Result is {statusCode}", httpResponseMessage.Result.StatusCode); + _HttpClient ??= httpClientFactory.CreateClient(); Heartbeat(appSettings, httpClientFactory, logger, State.Up, cancellationToken); ReadOnlyCollection successMatches = GetSuccessMatches(appSettings, logger, cancellationToken); - SendPerformanceMessage(appSettings, logger, successMatches, cancellationToken); + double value = GetValue(appSettings, successMatches); + SendPerformanceMessage(appSettings, logger, value, cancellationToken); + SendPerformanceMessage(appSettings, logger, _HttpClient, value, cancellationToken); return true; } @@ -78,13 +73,13 @@ internal static partial class HelperGatusToMona { if (value[^1] is not '0' and not '1') continue; logger.LogInformation("Line {line}: {value}", - 39, + 76, value); if (line.EndsWith('1')) results.Add(string.Concat('{', value)); } logger.LogInformation("Line {line}: {results}", - 45, + 82, string.Join(Environment.NewLine, results)); return results.AsReadOnly(); } @@ -104,10 +99,15 @@ internal static partial class HelperGatusToMona { return results.AsReadOnly(); } - private static void SendPerformanceMessage(AppSettings appSettings, ILogger logger, ReadOnlyCollection successMatches, CancellationToken cancellationToken) { - string performanceName = string.Concat(appSettings.MonAConfiguration.Resource, appSettings.MonAConfiguration.Suffix); + private static double GetValue(AppSettings appSettings, ReadOnlyCollection successMatches) { + double result; double v = successMatches.Count / appSettings.MonAConfiguration.Expected; - double value = Math.Round(v, 3) * 100; + result = Math.Round(v, 3) * 100; + return result; + } + + private static void SendPerformanceMessage(AppSettings appSettings, ILogger logger, double value, CancellationToken cancellationToken) { + string performanceName = string.Concat(appSettings.MonAConfiguration.Resource, appSettings.MonAConfiguration.Suffix); Task httpResponseMessage = _MonIn.SendPerformanceMessage(appSettings.MonAConfiguration.Site, appSettings.MonAConfiguration.Resource, performanceName, @@ -115,7 +115,7 @@ internal static partial class HelperGatusToMona { description: string.Empty); httpResponseMessage.Wait(cancellationToken); logger.LogInformation("Line {line}: {OriginalString} => {Resource} : {performanceName} ; {value}", - 76, + 118, httpResponseMessage.Result.RequestMessage.RequestUri.OriginalString, appSettings.MonAConfiguration.Resource, performanceName, @@ -125,8 +125,40 @@ internal static partial class HelperGatusToMona { Task body = httpResponseMessage.Result.Content.ReadAsStringAsync(cancellationToken); body.Wait(cancellationToken); logger.LogInformation("Line {line}: {Result}", - 86, + 128, body.Result); } + private static void SendPerformanceMessage(AppSettings appSettings, ILogger logger, HttpClient httpClient, double value, CancellationToken cancellationToken) { + Task httpResponseMessage; + string success = value == 100 ? "true" : "false"; + string error = value == 100 ? string.Empty : $"value: {value}%;"; + httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", appSettings.GatusConfiguration.Token); + httpResponseMessage = httpClient.PostAsync($"{appSettings.GatusConfiguration.BaseUniformResourceLocator}/api/v1/endpoints/{appSettings.GatusConfiguration.Key}/external?success={success}&error={error}", null, cancellationToken); + httpResponseMessage.Wait(cancellationToken); + logger.LogInformation("Line {line}: {OriginalString} => {Resource} : {Key} ; {value}", + 140, + httpResponseMessage.Result.RequestMessage.RequestUri.OriginalString, + appSettings.MonAConfiguration.Resource, + appSettings.GatusConfiguration.Key, + value); + if (httpResponseMessage.Result.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception(httpResponseMessage.Result.StatusCode.ToString()); + if (!string.IsNullOrEmpty(appSettings.GatusToGatusConfiguration.BaseUniformResourceLocator) + && !string.IsNullOrEmpty(appSettings.GatusToGatusConfiguration.Key) + && !string.IsNullOrEmpty(appSettings.GatusToGatusConfiguration.Token)) { + httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", appSettings.GatusToGatusConfiguration.Token); + httpResponseMessage = httpClient.PostAsync($"{appSettings.GatusToGatusConfiguration.BaseUniformResourceLocator}/api/v1/endpoints/{appSettings.GatusToGatusConfiguration.Key}/external?success={success}&error={error}", null, cancellationToken); + httpResponseMessage.Wait(cancellationToken); + logger.LogInformation("Line {line}: {OriginalString} => {Resource} : {Key} ; {value}", + 154, + httpResponseMessage.Result.RequestMessage.RequestUri.OriginalString, + appSettings.MonAConfiguration.Resource, + appSettings.GatusConfiguration.Key, + value); + if (httpResponseMessage.Result.StatusCode != System.Net.HttpStatusCode.OK) + throw new Exception(httpResponseMessage.Result.StatusCode.ToString()); + } + } + } \ No newline at end of file diff --git a/Models/AppSettings.cs b/Models/AppSettings.cs index 50c1ddb..5f10d55 100644 --- a/Models/AppSettings.cs +++ b/Models/AppSettings.cs @@ -4,6 +4,7 @@ using System.Text.Json.Serialization; namespace Gatus.To.MonA.Models; public record AppSettings(GatusConfiguration GatusConfiguration, + GatusToGatusConfiguration GatusToGatusConfiguration, GatusToMonaConfiguration GatusToMonaConfiguration, MonAConfiguration MonAConfiguration) { @@ -11,10 +12,12 @@ public record AppSettings(GatusConfiguration GatusConfiguration, AppSettings result; #pragma warning disable IL3050, IL2026 GatusConfiguration? gatusConfiguration = configurationRoot.GetSection(nameof(GatusConfiguration)).Get(); + GatusToGatusConfiguration? gatusToGatusConfiguration = configurationRoot.GetSection(nameof(GatusToGatusConfiguration)).Get(); GatusToMonaConfiguration? gatusToMonaConfiguration = configurationRoot.GetSection(nameof(GatusToMonaConfiguration)).Get(); MonAConfiguration? monAConfiguration = configurationRoot.GetSection(nameof(MonAConfiguration)).Get(); #pragma warning restore IL3050, IL2026 if (gatusConfiguration is null + || gatusToGatusConfiguration is null || gatusToMonaConfiguration is null || monAConfiguration is null || gatusToMonaConfiguration?.Company is null) { @@ -29,6 +32,7 @@ public record AppSettings(GatusConfiguration GatusConfiguration, throw new NotSupportedException($"Not found!{Environment.NewLine}{string.Join(Environment.NewLine, paths.Distinct())}"); } result = new(gatusConfiguration, + gatusToGatusConfiguration, gatusToMonaConfiguration, monAConfiguration); Verify(result); diff --git a/Models/GatusToGatusConfiguration.cs b/Models/GatusToGatusConfiguration.cs new file mode 100644 index 0000000..ac31b56 --- /dev/null +++ b/Models/GatusToGatusConfiguration.cs @@ -0,0 +1,20 @@ +using System.Text.Json; +using System.Text.Json.Serialization; + +namespace Gatus.To.MonA.Models; + +public record GatusToGatusConfiguration(string? BaseUniformResourceLocator, + string? Key, + string? Token) { + + public override string ToString() { + string result = JsonSerializer.Serialize(this, GatusToGatusConfigurationSourceGenerationContext.Default.GatusToGatusConfiguration); + return result; + } + +} + +[JsonSourceGenerationOptions(WriteIndented = true)] +[JsonSerializable(typeof(GatusToGatusConfiguration))] +internal partial class GatusToGatusConfigurationSourceGenerationContext : JsonSerializerContext { +} \ No newline at end of file