KumaToGatus
This commit is contained in:
parent
23c0ff9683
commit
cc9c5013a9
77
.vscode/launch.json
vendored
77
.vscode/launch.json
vendored
@ -13,73 +13,16 @@
|
||||
"args": [
|
||||
"s",
|
||||
"X",
|
||||
"\\\\mesfs.infineon.com\\EC_EDA\\Production\\Traces",
|
||||
"Day-Helper-2025-02-18",
|
||||
"Source",
|
||||
"*.pdsf",
|
||||
"A_MES_ENTITY=",
|
||||
"B_SEQUENCE=",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive",
|
||||
"s",
|
||||
"X",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\HGCV1\\2025_Week_14\\2025-03-31\\35-664269-4830_2025-03-31_05;27_PM_473734776",
|
||||
"Day-Helper-2025-02-19",
|
||||
"csv-HGCV1_250331172757000.pdsf",
|
||||
"*.pdsf",
|
||||
"Time,Test,Count,MesEntity,HeaderUniqueId,UniqueId,Id,Recipe,Date,AreaDeltaFromLastRun,GLimit,HGCV1",
|
||||
"Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,HGCV1",
|
||||
"RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09,HGCV1",
|
||||
"FlatZMean|MeanFlatZ,GradeMean|MeanGrade,NAvgMean|MeanNAvg,NslMean|MeanNsl,PhaseMean|MeanPhase,RhoAvgMean|MeanRhoAvg,RhoslMean|MeanRhosl,RsMean|MeanRs,VdMean|MeanVd,FlatZRadialGradient|RadialGradientFlatZ,GradeRadialGradient|RadialGradientGrade,NAvgRadialGradient|RadialGradientNAvg,NslRadialGradient|RadialGradientNsl,PhaseRadialGradient|RadialGradientPhase,RhoAvgRadialGradient|RadialGradientRhoAvg,RhoslRadialGradient|RadialGradientRhosl,RsRadialGradient|RadialGradientRs,VdRadialGradient|RadialGradientVd,FlatZStdDev|StandardDeviationPercentageFlatZ,GradeStdDev|StandardDeviationPercentageGrade,NAvgStdDev|StandardDeviationPercentageNAvg,NslStdDev|StandardDeviationPercentageNsl,PhaseStdDev|StandardDeviationPercentagePhase,RhoAvgStdDev|StandardDeviationPercentageRhoAvg,RhoslStdDev|StandardDeviationPercentageRhosl,RsStdDev|StandardDeviationPercentageRs,VdStdDev|StandardDeviationPercentageVd,|HGCV1",
|
||||
"Time,A_LOGISTICS,B_LOGISTICS,Test,Count,Index,MesEntity,Date,Employee,Lot,PSN,Reactor,Recipe,Area,Folder,HeaderUniqueId,Id,Layer,Model,Pattern,Phase,Plan,RampRate,RDS,SetupFile,StartVoltage,StopVoltage,UniqueId,Wafer,WaferSize,Zone,Ccomp,CondType,FlatZ,FlatZMean,FlatZRadialGradient,FlatZStdDev,GLimit,Grade,GradeMean,GradeRadialGradient,GradeStdDev,NAvg,NAvgMean,NAvgRadialGradient,NAvgStdDev,Nsl,NslMean,NslRadialGradient,NslStdDev,PhaseMean,PhaseRadialGradient,PhaseStdDev,RhoAvg,RhoAvgMean,RhoAvgRadialGradient,RhoAvgStdDev,RhoMethod,Rhosl,RhoslMean,RhoslRadialGradient,RhoslStdDev,RsMean,RsRadialGradient,RsStdDev,Vd,VdMean,VdRadialGradient,VdStdDev,Variation,AreaDeltaFromLastRun,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09",
|
||||
"Time,A_LOGISTICS,B_LOGISTICS,Count,Sequence,MesEntity,Index,Operator,StartVoltage,Wafer,StopVoltage,Lot,RampRate,Plan,GLimit,Date,Time,SetupFile,WaferSize,Folder,Ccomp,Pattern,Area,CondType,RhoMethod,Model,MeanNAvg,MeanNsl,MeanVd,MeanFlatZ,MeanRhoAvg,MeanRhosl,MeanPhase,MeanGrade,MeanRs,StandardDeviationPercentageNAvg,StandardDeviationPercentageNsl,StandardDeviationPercentageVd,StandardDeviationPercentageFlatZ,StandardDeviationPercentageRhoAvg,StandardDeviationPercentageRhosl,StandardDeviationPercentagePhase,StandardDeviationPercentageGrade,StandardDeviationPercentageRs,RadialGradientNAvg,RadialGradientNsl,RadialGradientVd,RadialGradientFlatZ,RadialGradientRhoAvg,RadialGradientRhosl,RadialGradientPhase,RadialGradientGrade,RadialGradientRs,Site,X,Y,NAvg,RhoAvg,Nsl,Rhosl,Vd,Phase,FlatZ,Grade,XLeft,XRight,BottomY,TopY,RDS,PSN,Reactor,Layer,Zone,Employee,InferredLot,Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09",
|
||||
"0,1,2,-1,3,6,5,15,73,11,69,70,-1,22,19,-1,-1,71,25,21,61,13,12,68,17,8,10,-1,9,18,72,20,23,62,29,47,38,14,63,33,51,42,56,26,44,35,58,27,45,36,32,50,41,57,30,48,39,24,59,31,49,40,34,52,43,60,28,46,37,84,83,75,76,77,78,79,80,81,82,86,87,88,89,90,91,92,93,94",
|
||||
"s",
|
||||
"X",
|
||||
"Day-Helper-2025-02-19",
|
||||
"csv-*.pdsf",
|
||||
"*.pdsf",
|
||||
"",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\HGCV1\\2025_Week_14\\2025-03-31",
|
||||
"",
|
||||
"Time,Test,Count,MesEntity,HeaderUniqueId,UniqueId,Id,Recipe,Date,AreaDeltaFromLastRun,GLimit,HGCV1",
|
||||
"Nine10mmEdgeMean,Nine4mmEdgeMean,NineCriticalPointsAverage,NineCriticalPointsPhaseAngleAverage,NineCriticalPointsStdDev,NineEdgeMeanDelta,NineMean,NineResRangePercent,AreaDeltaFromLastRun,Variation,Percentage HgCV 4PP Delta,HGCV1",
|
||||
"RhoAvg01,RhoAvg02,RhoAvg03,RhoAvg04,RhoAvg05,RhoAvg06,RhoAvg07,RhoAvg08,RhoAvg09,HGCV1",
|
||||
"FlatZMean|MeanFlatZ,GradeMean|MeanGrade,NAvgMean|MeanNAvg,NslMean|MeanNsl,PhaseMean|MeanPhase,RhoAvgMean|MeanRhoAvg,RhoslMean|MeanRhosl,RsMean|MeanRs,VdMean|MeanVd,FlatZRadialGradient|RadialGradientFlatZ,GradeRadialGradient|RadialGradientGrade,NAvgRadialGradient|RadialGradientNAvg,NslRadialGradient|RadialGradientNsl,PhaseRadialGradient|RadialGradientPhase,RhoAvgRadialGradient|RadialGradientRhoAvg,RhoslRadialGradient|RadialGradientRhosl,RsRadialGradient|RadialGradientRs,VdRadialGradient|RadialGradientVd,FlatZStdDev|StandardDeviationPercentageFlatZ,GradeStdDev|StandardDeviationPercentageGrade,NAvgStdDev|StandardDeviationPercentageNAvg,NslStdDev|StandardDeviationPercentageNsl,PhaseStdDev|StandardDeviationPercentagePhase,RhoAvgStdDev|StandardDeviationPercentageRhoAvg,RhoslStdDev|StandardDeviationPercentageRhosl,RsStdDev|StandardDeviationPercentageRs,VdStdDev|StandardDeviationPercentageVd,|HGCV1",
|
||||
"",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\TENCOR1\\2025_Week_14\\2025-03-31",
|
||||
"",
|
||||
"Time,Test,Count,MesEntity,HeaderUniqueId,UniqueId,Date,TENCOR1",
|
||||
",TENCOR1",
|
||||
"TENCOR1",
|
||||
"Lot|Id,Slot|WaferId,AreaTotal|WaferAreaTotal,HazeAverage|WaferHazeAverage,HazeRegion|WaferHazeRegion,ScratchTotal|WaferScratchTotal,|TENCOR1",
|
||||
"",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\CDE5\\2025_Week_14\\2025-03-31",
|
||||
"",
|
||||
"Time,Test,Count,MesEntity,HeaderUniqueId,UniqueId,Date,Id,Lot,CDE5",
|
||||
",CDE5",
|
||||
"StandardDeviationPercentage,SheetRhoVariation,CDE5",
|
||||
"Run|Title,Employee|Operator,EquipId|Equipment,Recipe|RecipeName,FileName|TheFileName,DataReject|DataRejectSigma,Merit|MeritGOF,T|Th,StdDev|StandardDeviationPercentage,|CDE5",
|
||||
"",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\SP101\\2025_Week_14\\2025-03-31",
|
||||
"",
|
||||
"Time,Test,Count,MesEntity,HeaderUniqueId,UniqueId,Date,SP101",
|
||||
",SP101",
|
||||
",SP101",
|
||||
"Recipe|Session,|SP101",
|
||||
"",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\BIORAD2\\2025_Week_14\\2025-03-31",
|
||||
"",
|
||||
"Time,Test,Count,MesEntity,HeaderUniqueId,UniqueId,Date,BIORAD2",
|
||||
"Thickness 14 3mm Edge Mean,Thickness 14 3mm Edge % from R/2,Thickness 14 5mm Edge Mean,Thickness 14 5mm Edge % from R/2,Thickness 14 Center Mean,Thickness 14 Average,Thickness 14 Std Dev,Thickness 14 R/2 Mean,BIORAD2",
|
||||
"Thickness01,Thickness02,Thickness03,Thickness04,Thickness05,Thickness06,Thickness07,Thickness08,Thickness09,Thickness10,Thickness11,Thickness12,Thickness13,Thickness14,BIORAD2",
|
||||
"Employee|Operator,Lot|Wafer,MeanThickness|WaferMeanThickness,RVThickness|RadialVariationThickness,ThicknessFourteen3mmEdgeMean|Thickness 14 3mm Edge Mean,ThicknessFourteen3mmEdgePercent|Thickness 14 3mm Edge % from R/2,ThicknessFourteen5mmEdgeMean|Thickness 14 5mm Edge Mean,ThicknessFourteen5mmEdgePercent|Thickness 14 5mm Edge % from R/2,ThicknessFourteenCenterMean|Thickness 14 Center Mean,ThicknessFourteenCriticalPointsAverage|Thickness 14 Average,ThicknessFourteenCriticalPointsStdDev|Thickness 14 Std Dev,ThicknessFourteenMeanFrom|Thickness 14 R/2 Mean,|BIORAD2",
|
||||
"",
|
||||
"\\\\mesfs.infineon.com\\EC_Characterization_Si\\Archive\\BIORAD4\\2025_Week_14\\2025-03-31",
|
||||
"",
|
||||
"Time,Test,Count,MesEntity,HeaderUniqueId,UniqueId,Date,Wafer,Position,BIORAD4",
|
||||
",BIORAD4",
|
||||
",BIORAD4",
|
||||
"MID|Cassette,Lot|Batch,Title|Batch,Wafer|Text,Thickness|Site,MeanThickness|GradeMean,|BIORAD4",
|
||||
"C:/Users/PHARES/AppData/Local/IFXApps/gatus",
|
||||
"Day-Helper-2025-04-04",
|
||||
"*.json",
|
||||
".metrics",
|
||||
"https://messa010ec.infineon.com/metrics",
|
||||
"gatus_results_endpoint_success",
|
||||
"666",
|
||||
"777",
|
||||
"888",
|
||||
"999",
|
||||
""
|
||||
],
|
||||
"cwd": "${workspaceFolder}",
|
||||
|
1
.vscode/settings.json
vendored
1
.vscode/settings.json
vendored
@ -19,6 +19,7 @@
|
||||
"Exif",
|
||||
"FAMC",
|
||||
"FAMS",
|
||||
"Gatus",
|
||||
"GIVN",
|
||||
"HUSB",
|
||||
"Immich",
|
||||
|
237
ADO2025/PI5/Helper-2025-04-04.cs
Normal file
237
ADO2025/PI5/Helper-2025-04-04.cs
Normal file
@ -0,0 +1,237 @@
|
||||
using System.Text.Json;
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
using Microsoft.Extensions.Logging;
|
||||
|
||||
namespace File_Folder_Helper.ADO2025.PI5;
|
||||
|
||||
internal static partial class Helper20250404 {
|
||||
|
||||
internal record KafkaProducerSaslOptions(
|
||||
[property: JsonPropertyName("mechanism")] string Mechanism
|
||||
);
|
||||
|
||||
internal record MonitorList(
|
||||
[property: JsonPropertyName("id")] int Id,
|
||||
[property: JsonPropertyName("name")] string Name,
|
||||
[property: JsonPropertyName("description")] string Description,
|
||||
[property: JsonPropertyName("pathName")] string PathName,
|
||||
[property: JsonPropertyName("parent")] int? Parent,
|
||||
[property: JsonPropertyName("childrenIDs")] IReadOnlyList<int> ChildrenIDs,
|
||||
[property: JsonPropertyName("url")] string Url,
|
||||
[property: JsonPropertyName("method")] string Method,
|
||||
[property: JsonPropertyName("hostname")] object Hostname,
|
||||
[property: JsonPropertyName("port")] object Port,
|
||||
[property: JsonPropertyName("maxretries")] int MaxRetries,
|
||||
[property: JsonPropertyName("weight")] int Weight,
|
||||
[property: JsonPropertyName("active")] bool Active,
|
||||
[property: JsonPropertyName("forceInactive")] bool ForceInactive,
|
||||
[property: JsonPropertyName("type")] string Type,
|
||||
[property: JsonPropertyName("timeout")] int Timeout,
|
||||
[property: JsonPropertyName("interval")] int Interval,
|
||||
[property: JsonPropertyName("retryInterval")] int RetryInterval,
|
||||
[property: JsonPropertyName("resendInterval")] int ResendInterval,
|
||||
[property: JsonPropertyName("keyword")] object Keyword,
|
||||
[property: JsonPropertyName("invertKeyword")] bool InvertKeyword,
|
||||
[property: JsonPropertyName("expiryNotification")] bool ExpiryNotification,
|
||||
[property: JsonPropertyName("ignoreTls")] bool IgnoreTls,
|
||||
[property: JsonPropertyName("upsideDown")] bool UpsideDown,
|
||||
[property: JsonPropertyName("packetSize")] int PacketSize,
|
||||
[property: JsonPropertyName("maxredirects")] int MaxRedirects,
|
||||
[property: JsonPropertyName("accepted_statuscodes")] IReadOnlyList<string> AcceptedStatusCodes,
|
||||
[property: JsonPropertyName("dns_resolve_type")] string DnsResolveType,
|
||||
[property: JsonPropertyName("dns_resolve_server")] string DnsResolveServer,
|
||||
[property: JsonPropertyName("dns_last_result")] object DnsLastResult,
|
||||
[property: JsonPropertyName("docker_container")] string DockerContainer,
|
||||
[property: JsonPropertyName("docker_host")] object DockerHost,
|
||||
[property: JsonPropertyName("proxyId")] object ProxyId,
|
||||
[property: JsonPropertyName("notificationIDList")] NotificationIDList NotificationIDList,
|
||||
[property: JsonPropertyName("tags")] IReadOnlyList<object> Tags,
|
||||
[property: JsonPropertyName("maintenance")] bool Maintenance,
|
||||
[property: JsonPropertyName("mqttTopic")] string MqttTopic,
|
||||
[property: JsonPropertyName("mqttSuccessMessage")] string MqttSuccessMessage,
|
||||
[property: JsonPropertyName("databaseQuery")] object DatabaseQuery,
|
||||
[property: JsonPropertyName("authMethod")] string AuthMethod,
|
||||
[property: JsonPropertyName("grpcUrl")] object GrpcUrl,
|
||||
[property: JsonPropertyName("grpcProtobuf")] object GrpcProtobuf,
|
||||
[property: JsonPropertyName("grpcMethod")] object GrpcMethod,
|
||||
[property: JsonPropertyName("grpcServiceName")] object GrpcServiceName,
|
||||
[property: JsonPropertyName("grpcEnableTls")] bool GrpcEnableTls,
|
||||
[property: JsonPropertyName("radiusCalledStationId")] object RadiusCalledStationId,
|
||||
[property: JsonPropertyName("radiusCallingStationId")] object RadiusCallingStationId,
|
||||
[property: JsonPropertyName("game")] object Game,
|
||||
[property: JsonPropertyName("gamedigGivenPortOnly")] bool GameDigGivenPortOnly,
|
||||
[property: JsonPropertyName("httpBodyEncoding")] string HttpBodyEncoding,
|
||||
[property: JsonPropertyName("jsonPath")] object JsonPath,
|
||||
[property: JsonPropertyName("expectedValue")] object ExpectedValue,
|
||||
[property: JsonPropertyName("kafkaProducerTopic")] object KafkaProducerTopic,
|
||||
[property: JsonPropertyName("kafkaProducerBrokers")] IReadOnlyList<object> KafkaProducerBrokers,
|
||||
[property: JsonPropertyName("kafkaProducerSsl")] bool KafkaProducerSsl,
|
||||
[property: JsonPropertyName("kafkaProducerAllowAutoTopicCreation")] bool KafkaProducerAllowAutoTopicCreation,
|
||||
[property: JsonPropertyName("kafkaProducerMessage")] object KafkaProducerMessage,
|
||||
[property: JsonPropertyName("screenshot")] object Screenshot,
|
||||
[property: JsonPropertyName("headers")] object Headers,
|
||||
[property: JsonPropertyName("body")] object Body,
|
||||
[property: JsonPropertyName("grpcBody")] object GrpcBody,
|
||||
[property: JsonPropertyName("grpcMetadata")] object GrpcMetadata,
|
||||
[property: JsonPropertyName("basic_auth_user")] string BasicAuthUser,
|
||||
[property: JsonPropertyName("basic_auth_pass")] string BasicAuthPass,
|
||||
[property: JsonPropertyName("oauth_client_id")] object OauthClientId,
|
||||
[property: JsonPropertyName("oauth_client_secret")] object OauthClientSecret,
|
||||
[property: JsonPropertyName("oauth_token_url")] object OauthTokenUrl,
|
||||
[property: JsonPropertyName("oauth_scopes")] object OauthScopes,
|
||||
[property: JsonPropertyName("oauth_auth_method")] string OauthAuthMethod,
|
||||
[property: JsonPropertyName("pushToken")] string PushToken,
|
||||
[property: JsonPropertyName("databaseConnectionString")] string DatabaseConnectionString,
|
||||
[property: JsonPropertyName("radiusUsername")] object RadiusUsername,
|
||||
[property: JsonPropertyName("radiusPassword")] object RadiusPassword,
|
||||
[property: JsonPropertyName("radiusSecret")] object RadiusSecret,
|
||||
[property: JsonPropertyName("mqttUsername")] string MqttUsername,
|
||||
[property: JsonPropertyName("mqttPassword")] string MqttPassword,
|
||||
[property: JsonPropertyName("authWorkstation")] object AuthWorkstation,
|
||||
[property: JsonPropertyName("authDomain")] object AuthDomain,
|
||||
[property: JsonPropertyName("tlsCa")] object TlsCa,
|
||||
[property: JsonPropertyName("tlsCert")] object TlsCert,
|
||||
[property: JsonPropertyName("tlsKey")] object TlsKey,
|
||||
[property: JsonPropertyName("kafkaProducerSaslOptions")] KafkaProducerSaslOptions KafkaProducerSaslOptions,
|
||||
[property: JsonPropertyName("includeSensitiveData")] bool IncludeSensitiveData
|
||||
);
|
||||
|
||||
internal record NotificationIDList(
|
||||
[property: JsonPropertyName("4")] bool _4
|
||||
);
|
||||
|
||||
internal record NotificationList(
|
||||
[property: JsonPropertyName("id")] int Id,
|
||||
[property: JsonPropertyName("name")] string Name,
|
||||
[property: JsonPropertyName("active")] bool Active,
|
||||
[property: JsonPropertyName("userId")] int UserId,
|
||||
[property: JsonPropertyName("isDefault")] bool IsDefault,
|
||||
[property: JsonPropertyName("config")] string Config
|
||||
);
|
||||
|
||||
internal record Kuma(
|
||||
[property: JsonPropertyName("version")] string Version,
|
||||
[property: JsonPropertyName("notificationList")] IReadOnlyList<NotificationList> NotificationList,
|
||||
[property: JsonPropertyName("monitorList")] IReadOnlyList<MonitorList> MonitorList
|
||||
);
|
||||
|
||||
[JsonSourceGenerationOptions(WriteIndented = true)]
|
||||
[JsonSerializable(typeof(Kuma))]
|
||||
private partial class KumaCommonSourceGenerationContext : JsonSerializerContext {
|
||||
}
|
||||
|
||||
internal static void KumaToGatus(ILogger<Worker> logger, List<string> args) {
|
||||
string url = args[4];
|
||||
string check = args[5];
|
||||
string fileName = args[3];
|
||||
string searchPattern = args[2];
|
||||
ParseMetrics(logger, fileName, url, check);
|
||||
string sourceDirectory = Path.GetFullPath(args[0]);
|
||||
string[] files = Directory.GetFiles(sourceDirectory, searchPattern, SearchOption.AllDirectories);
|
||||
if (files.Length == 0)
|
||||
logger.LogWarning("<{files}>(s)", files.Length);
|
||||
else
|
||||
KumaToGatus(files);
|
||||
}
|
||||
|
||||
private static void ParseMetrics(ILogger<Worker> logger, string fileName, string url, string check) {
|
||||
FileStream fileStream = new(fileName, FileMode.Truncate);
|
||||
HttpClient httpClient = new();
|
||||
Task<Stream> streamTask = httpClient.GetStreamAsync(url);
|
||||
streamTask.Wait();
|
||||
Task task = streamTask.Result.CopyToAsync(fileStream);
|
||||
task.Wait();
|
||||
ParseMetrics(logger, fileStream);
|
||||
fileStream.Dispose();
|
||||
streamTask.Dispose();
|
||||
httpClient.Dispose();
|
||||
}
|
||||
|
||||
private static void ParseMetrics(ILogger<Worker> _, FileStream __) {
|
||||
// Task<List<IMetric>> metrics = PrometheusMetricsParser.ParseAsync(fileStream);
|
||||
// metrics.Wait();
|
||||
// foreach (IMetric metric in metrics.Result) {
|
||||
// if (metric is not Gauge gauge)
|
||||
// continue;
|
||||
// foreach (GaugeMeasurement gaugeMeasurement in gauge.Measurements) {
|
||||
// if (string.IsNullOrEmpty(metric.Name))
|
||||
// continue;
|
||||
// foreach (KeyValuePair<string, string> keyValuePair in gaugeMeasurement.Labels) {
|
||||
// logger.LogInformation("name:{name}; timestamp:{timestamp}; value:{value}; key-name:{key-name}; key-value:{key-value}",
|
||||
// metric.Name,
|
||||
// gaugeMeasurement.Timestamp,
|
||||
// gaugeMeasurement.Value,
|
||||
// keyValuePair.Key,
|
||||
// keyValuePair.Value);
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
}
|
||||
|
||||
private static void KumaToGatus(string[] files) {
|
||||
Kuma kuma;
|
||||
string json;
|
||||
string checkFile;
|
||||
foreach (string file in files) {
|
||||
checkFile = file.ToLower().Replace('_', '-');
|
||||
if (checkFile != file)
|
||||
File.Move(file, checkFile);
|
||||
json = File.ReadAllText(checkFile);
|
||||
kuma = JsonSerializer.Deserialize(json, KumaCommonSourceGenerationContext.Default.Kuma);
|
||||
if (kuma is null)
|
||||
continue;
|
||||
WriteGatus(checkFile, kuma);
|
||||
}
|
||||
}
|
||||
|
||||
private static void WriteGatus(string file, Kuma kuma) {
|
||||
List<string> results = [
|
||||
string.Empty,
|
||||
$"# set GATUS_CONFIG_PATH=./{Path.GetFileName(file)}.yaml",
|
||||
string.Empty,
|
||||
"endpoints:"
|
||||
];
|
||||
string[] segments;
|
||||
foreach (MonitorList monitorList in kuma.MonitorList) {
|
||||
if (monitorList.Type is not "http" and not "postgres")
|
||||
continue;
|
||||
results.Add($" - name: {monitorList.Name}");
|
||||
results.Add($" group: {monitorList.PathName.Split(' ')[0]}");
|
||||
results.Add($" enabled: {monitorList.Active.ToString().ToLower()}");
|
||||
results.Add($" interval: {monitorList.Interval}s");
|
||||
if (monitorList.Type == "http") {
|
||||
results.Add($" method: {monitorList.Method}");
|
||||
results.Add($" url: \"{monitorList.Url}\"");
|
||||
if (monitorList.AuthMethod == "basic") {
|
||||
results.Add($" # user: \"{monitorList.BasicAuthUser}\"");
|
||||
results.Add($" # password: \"{monitorList.BasicAuthPass}\"");
|
||||
}
|
||||
results.Add(" conditions:");
|
||||
results.Add(" - \"[STATUS] < 300\"");
|
||||
if (monitorList.Url.Contains("https"))
|
||||
results.Add(" - \"[CERTIFICATE_EXPIRATION] > 48h\"");
|
||||
results.Add($" - \"[RESPONSE_TIME] < {monitorList.Timeout}\"");
|
||||
} else if (monitorList.Type == "postgres") {
|
||||
segments = monitorList.DatabaseConnectionString.Split('@');
|
||||
if (segments.Length != 2)
|
||||
continue;
|
||||
results.Add($" # connectionString: \"{monitorList.DatabaseConnectionString}\"");
|
||||
results.Add($" url: \"tcp://{segments[1].Split('/')[0]}\"");
|
||||
results.Add(" conditions:");
|
||||
results.Add(" - \"[CONNECTED] == true\"");
|
||||
} else
|
||||
throw new NotImplementedException();
|
||||
results.Add(" alerts:");
|
||||
results.Add(" - type: email");
|
||||
results.Add(" description: \"healthcheck failed\"");
|
||||
results.Add(" send-on-resolved: true");
|
||||
results.Add(" - type: gotify");
|
||||
results.Add(" description: \"healthcheck failed\"");
|
||||
results.Add(" send-on-resolved: true");
|
||||
results.Add(string.Empty);
|
||||
}
|
||||
File.WriteAllText($"{file}.yaml", string.Join(Environment.NewLine, results));
|
||||
}
|
||||
|
||||
}
|
@ -151,6 +151,8 @@ internal static class HelperDay
|
||||
ADO2025.PI5.Helper20250320.SortCodeMethods(logger, args, cancellationToken);
|
||||
else if (args[1] == "Day-Helper-2025-03-21")
|
||||
ADO2025.PI5.Helper20250321.MoveToLast(logger, args);
|
||||
else if (args[1] == "Day-Helper-2025-04-04")
|
||||
ADO2025.PI5.Helper20250404.KumaToGatus(logger, args);
|
||||
else
|
||||
throw new Exception(appSettings.Company);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user