项目作者: H4ck3rBatera

项目描述 :
Azure Functions Health Check
高级语言: C#
项目地址: git://github.com/H4ck3rBatera/AzureFunctions.HealthCheck.git
创建时间: 2021-05-19T02:01:49Z
项目社区:https://github.com/H4ck3rBatera/AzureFunctions.HealthCheck

开源协议:

下载


AzureFunctions.HealthCheck

  • Azure Functions
  • .NET Core 3.1
  • Microsoft.Extensions.Diagnostics.HealthChecks
  • AspNetCore.HealthChecks.SqlServer
  • Docker

csproj

  1. <Project Sdk="Microsoft.NET.Sdk">
  2. <PropertyGroup>
  3. <TargetFramework>netcoreapp3.1</TargetFramework>
  4. <AzureFunctionsVersion>v3</AzureFunctionsVersion>
  5. <DockerFastModeProjectMountDirectory>/home/site/wwwroot</DockerFastModeProjectMountDirectory>
  6. <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
  7. </PropertyGroup>
  8. <ItemGroup>
  9. <PackageReference Include="AspNetCore.HealthChecks.SqlServer" Version="3.2.0" ></PackageReference>
  10. <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="3.0.11" ></PackageReference>
  11. <PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.10.13" ></PackageReference>
  12. </ItemGroup>
  13. <ItemGroup>
  14. <None Update="host.json">
  15. <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  16. </None>
  17. <None Update="local.settings.json">
  18. <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  19. <CopyToPublishDirectory>Never</CopyToPublishDirectory>
  20. </None>
  21. </ItemGroup>
  22. </Project>

Controller

  1. public class HealthCheckFunction
  2. {
  3. private readonly HealthCheckService _healthCheck;
  4. public HealthCheckFunction(HealthCheckService healthCheck)
  5. {
  6. _healthCheck = healthCheck;
  7. }
  8. [FunctionName("Heartbeat")]
  9. public async Task<IActionResult> Heartbeat(
  10. [HttpTrigger(AuthorizationLevel.Anonymous, "get", Route = "heartbeat")] HttpRequest req,
  11. ILogger log, CancellationToken cancellationToken)
  12. {
  13. log.Log(LogLevel.Information, "Received heartbeat request");
  14. var healthReport = await _healthCheck.CheckHealthAsync(cancellationToken);
  15. string json = JsonConvert.SerializeObject(healthReport, new JsonSerializerSettings
  16. {
  17. ContractResolver = new DefaultContractResolver
  18. {
  19. NamingStrategy = new CamelCaseNamingStrategy()
  20. },
  21. Formatting = Formatting.Indented,
  22. Converters = new Collection<JsonConverter>
  23. {
  24. new StringEnumConverter()
  25. }
  26. });
  27. return new OkObjectResult(json);
  28. }
  29. }

local.settings.json

  1. {
  2. "IsEncrypted": false,
  3. "Values": {
  4. "AzureWebJobsStorage": "UseDevelopmentStorage=true",
  5. "ConnectionStringSqlServer": "Server=localhost,1433;Database=master;User ID=sa;Password=P@ssword",
  6. "FUNCTIONS_WORKER_RUNTIME": "dotnet"
  7. }
  8. }

Startup

  1. [assembly: WebJobsStartup(typeof(Startup))]
  2. namespace AzureFunctions.HealthCheck.Presentation
  3. {
  4. public class Startup : IWebJobsStartup
  5. {
  6. public void Configure(IWebJobsBuilder builder)
  7. {
  8. ConfigureServices(builder.Services);
  9. }
  10. public void ConfigureServices(IServiceCollection services)
  11. {
  12. services.AddLogging();
  13. services.AddHealthChecks()
  14. .AddSqlServer(
  15. name: "ConnectionStringSqlServer",
  16. connectionString: Environment.GetEnvironmentVariable("ConnectionStringSqlServer"),
  17. tags: new string[] { "sqlserver" });
  18. }
  19. }
  20. }

docker-compose

  1. version: '3.4'
  2. services:
  3. sql_server:
  4. image: mcr.microsoft.com/mssql/server:latest
  5. ports:
  6. - "1433:1433"
  7. environment:
  8. SA_PASSWORD: 'P@ssword'
  9. ACCEPT_EULA: 'Y'

/api/heartbeat

  1. {
  2. "entries": {
  3. "ConnectionStringSqlServer": {
  4. "data": {},
  5. "description": null,
  6. "duration": "00:00:00.5315855",
  7. "exception": null,
  8. "status": "Healthy",
  9. "tags": [
  10. "sqlserver"
  11. ]
  12. }
  13. },
  14. "status": "Healthy",
  15. "totalDuration": "00:00:00.5466440"
  16. }