From 8cae455a50a3c919ec8f9a007ddc1cce906a3dc2 Mon Sep 17 00:00:00 2001 From: Mike Phares Date: Wed, 30 Apr 2025 12:01:41 -0700 Subject: [PATCH] gatus external-endpoints push --- Helpers/HelperGatusToMona.cs | 12 ++++++- Models/GatusConfiguration.cs | 6 ++-- README.md | 64 +++++++++++++++++++++++++++++------- 3 files changed, 68 insertions(+), 14 deletions(-) diff --git a/Helpers/HelperGatusToMona.cs b/Helpers/HelperGatusToMona.cs index 4840af0..55b43ff 100644 --- a/Helpers/HelperGatusToMona.cs +++ b/Helpers/HelperGatusToMona.cs @@ -1,4 +1,5 @@ using System.Collections.ObjectModel; +using System.Net.Http.Headers; using Gatus.To.MonA.Infineon.Monitoring.MonA; using Gatus.To.MonA.Models; @@ -8,6 +9,7 @@ namespace Gatus.To.MonA.Helpers; internal static partial class HelperGatusToMona { private static IMonIn? _MonIn; + private static HttpClient? _HttpClient; private static string GetFile(AppSettings appSettings) => Path.Combine(appSettings.GatusToMonaConfiguration.Directory, appSettings.GatusConfiguration.FileName); @@ -44,6 +46,14 @@ 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); Heartbeat(appSettings, httpClientFactory, logger, State.Up, cancellationToken); ReadOnlyCollection successMatches = GetSuccessMatches(appSettings, logger, cancellationToken); SendPerformanceMessage(appSettings, logger, successMatches, cancellationToken); @@ -83,7 +93,7 @@ internal static partial class HelperGatusToMona { string[] results; FileStream fileStream = new(file, FileMode.Truncate); HttpClient httpClient = new(); - Task streamTask = httpClient.GetStreamAsync(appSettings.GatusConfiguration.URL, cancellationToken); + Task streamTask = httpClient.GetStreamAsync($"{appSettings.GatusConfiguration.BaseUniformResourceLocator}/metrics", cancellationToken); streamTask.Wait(cancellationToken); Task task = streamTask.Result.CopyToAsync(fileStream, cancellationToken); task.Wait(cancellationToken); diff --git a/Models/GatusConfiguration.cs b/Models/GatusConfiguration.cs index 37fdcc4..15cb7e8 100644 --- a/Models/GatusConfiguration.cs +++ b/Models/GatusConfiguration.cs @@ -3,9 +3,11 @@ using System.Text.Json.Serialization; namespace Gatus.To.MonA.Models; -public record GatusConfiguration(string FileName, +public record GatusConfiguration(string BaseUniformResourceLocator, + string FileName, + string Key, string Metric, - string URL) { + string Token) { public override string ToString() { string result = JsonSerializer.Serialize(this, GatusConfigurationSourceGenerationContext.Default.GatusConfiguration); diff --git a/README.md b/README.md index 8a11f4c..771c2a2 100644 --- a/README.md +++ b/README.md @@ -113,21 +113,21 @@ sc.exe create "Gatus-to-MonA" binpath="C:\Windows\System32\config\systemprofile\ ## MonA Instances - [MES_APC_GATUS](https://mona.auc.infineon.com/auc/systems/563556/dependencies?config=true) - - messa013ec.infineon.com + - [messa013ec.infineon.com](http://messa013ec.infineon.com:8082) - [MES_EAF_GATUS](https://mona.auc.infineon.com/auc/systems/563493/dependencies?config=true) - - messa08ec.infineon.com + - [messa08ec.infineon.com](http://messa08ec.infineon.com:8082) - [MES_EAF_STAGE_GATUS](https://mona.auc.infineon.com/auc/systems/563516/dependencies?config=true) - - mestsa07ec.infineon.com + - [mestsa07ec.infineon.com](http://mestsa07ec.infineon.com:8082) - [MES_FAB_APPROVAL_SYSTEM_GATUS](https://mona.auc.infineon.com/auc/systems/563517/dependencies?config=true) - - messa016ec.infineon.com + - [messa016ec.infineon.com](http://messa016ec.infineon.com:8082) - https://messa016ec.infineon.com - [MES_FAB_TIME_GATUS](https://mona.auc.infineon.com/auc/systems/563518/dependencies?config=true) - - messa004.infineon.com + - [messa004.infineon.com](http://messa004.infineon.com:8082) - [MES_INFINITY_QS_SI_GATUS](https://mona.auc.infineon.com/auc/systems/563519/dependencies?config=true) - - messa04ec.infineon.com + - [messa04ec.infineon.com](http://messa04ec.infineon.com:8082) - [MES_OPEN_INSIGHT_GATUS](https://mona.auc.infineon.com/auc/systems/563520/dependencies?config=true) - GATUS_CONFIG_PATH=./oi.yaml - - messa01ec.infineon.com + - [messa01ec.infineon.com](http://messa01ec.infineon.com:8082) - http://messa014.infineon.com/api/heartbeat - http://messa014.infineon.com/API/RemoteHealthCheck/Mona/MonaEngines/DB-EN1 - http://messa014.infineon.com/api/RemoteHealthCheck/Mona/MonaEngines/DB-EN10 @@ -141,14 +141,56 @@ sc.exe create "Gatus-to-MonA" binpath="C:\Windows\System32\config\systemprofile\ - http://messa014.infineon.com/api/RemoteHealthCheck/Mona/MonaEngines/DB-EN7 - http://messa014.infineon.com/api/RemoteHealthCheck/Mona/MonaEngines/DB-EN9 - [MES_OPEN_INSIGHT_DEV_GATUS](https://mona.auc.infineon.com/auc/systems/563521/dependencies?config=true) - - mestsa01ec.infineon.com + - [mestsa01ec.infineon.com](http://mestsa01ec.infineon.com:8082) - [MES_OI_METROLOGY_VIEWER_GATUS](https://mona.auc.infineon.com/auc/systems/557090/dependencies?config=true) - - messa010ec.infineon.com + - [messa010ec.infineon.com](http://messa010ec.infineon.com:8082) - [MES_OI_WEB_SERVICES_GATUS](https://mona.auc.infineon.com/auc/systems/563522/dependencies?config=true) - - messa020ec.infineon.com + - [messa020ec.infineon.com](http://messa020ec.infineon.com:8082) - ~~messa014.infineon.com~~ - https://messa014.infineon.com/scan - https://messa014.infineon.com:50184 - https://messa014.infineon.com:5022 - [LEO_EAF_GATUS](https://mona.auc.infineon.com/auc/systems/563522/dependencies?config=true) - - leosaec17.infineon.com + - [leosaec17.infineon.com](http://leosaec17.infineon.com:8082) + +## Prometheus config to consume Gatus metrics + +- [prometheus](https://github.com/TwiN/gatus/blob/master/.examples/docker-compose-grafana-prometheus/README.md) + + +## Outline + +### Goal + +- Monitor TLS Cert + +### Options + +- Uptime Kuma + - Configuration is GUI driven +- Prometheus + - Not as easy to get started +- Grafana + - Too many features + - Open source but still have to login to use + +### Benefits + +- [x] Open Source +- [x] Written in GoLang +- [x] Doesn't need WAN connectivity +- [x] Keeps history with simple graph +- [x] Metrics output built for Prometheus +- [x] Sends e-mail alerts and has other alerting +- [x] Check status more often than five minute intervals +- [x] Single Config file that can be put in source control +- [x] Can wait for pushed data as well as default pull data +- [x] Simple GUI (website) that can be accessed outside server +- [x] Badge api that can be embedded in website (see oi server?) +- [x] Easy deployment [one binary, one config, runs via Non-Sucking Service Manager (nssm) and outputs sqlite files] + +### Drawbacks + +- [x] Another item to manage +- [x] Not part of the target solution +- [x] Haven't figured out how to push to MonIn directly with both heartbeat and performance \ No newline at end of file