-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathVersionHealthChecker.cs
More file actions
60 lines (53 loc) · 3.06 KB
/
VersionHealthChecker.cs
File metadata and controls
60 lines (53 loc) · 3.06 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
using System.Diagnostics;
using System.Reflection;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Diagnostics.HealthChecks;
namespace Netcorext.Diagnostics.HealthChecks.Version;
public class VersionHealthChecker : IHealthCheck
{
private readonly IConfiguration _configuration;
public VersionHealthChecker(IConfiguration configuration)
{
_configuration = configuration;
}
public Task<HealthCheckResult> CheckHealthAsync(HealthCheckContext context, CancellationToken cancellationToken = default)
{
try
{
var environment = IifStringEmpty(Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"), Environment.GetEnvironmentVariable("DOTNET_ENVIRONMENT"));
var hostName = IifStringEmpty(Environment.GetEnvironmentVariable("HOSTNAME"), Environment.MachineName);
var assemblies = AppDomain.CurrentDomain.GetAssemblies();
var assembly = assemblies.First(t => t.GetName().Name == AppDomain.CurrentDomain.FriendlyName);
var assemblyName = assembly.GetName().Name;
var attributes = assembly.GetCustomAttributes().ToArray();
var attrVersion = attributes.OfType<AssemblyInformationalVersionAttribute>().FirstOrDefault();
var attrFileVersion = attributes.OfType<AssemblyFileVersionAttribute>().FirstOrDefault();
var attrConfiguration = attributes.OfType<AssemblyConfigurationAttribute>().FirstOrDefault();
var attrDescription = attributes.OfType<AssemblyDescriptionAttribute>().FirstOrDefault();
var d = new Dictionary<string, object>(StringComparer.OrdinalIgnoreCase)
{
{ nameof(environment), environment },
{ nameof(hostName), hostName },
{ nameof(AssemblyName.Name), assemblyName },
{ nameof(Assembly.Location), assembly.Location },
{ nameof(Assembly.ImageRuntimeVersion), assembly.ImageRuntimeVersion },
{ nameof(AssemblyName.Version), attrVersion?.InformationalVersion },
{ nameof(FileVersionInfo.FileVersion), attrFileVersion?.Version },
{ "ConfigVersion", _configuration["ConfigVersion"] },
{ nameof(AssemblyDescriptionAttribute.Description), attrDescription?.Description },
{ nameof(AssemblyConfigurationAttribute.Configuration), attrConfiguration?.Configuration },
{ nameof(System.Runtime.GCSettings.IsServerGC), System.Runtime.GCSettings.IsServerGC},
{ nameof(System.Runtime.GCSettings.LatencyMode), System.Runtime.GCSettings.LatencyMode}
};
return Task.FromResult(HealthCheckResult.Healthy(data: d));
}
catch (Exception e)
{
return Task.FromResult(HealthCheckResult.Unhealthy(e.Message, e));
}
}
private string IifStringEmpty(string str1, string str2)
{
return string.IsNullOrWhiteSpace(str1) ? str2 : str1;
}
}