TasksTracker.Processor.Backend.Svc/Controllers/HealthController.cs (39 lines of code) (raw):
using Dapr.Client;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace TasksTracker.Processor.Backend.Svc.Controllers
{
[Route("api/health")]
[ApiController]
public class HealthController : ControllerBase
{
private readonly ILogger<HealthController> _logger;
private readonly DaprClient _daprClient;
private static string BLOB_STORE_NAME = "periodicjobstatestore";
private static string BLOB_KEY_NAME = "ReadinessTestBlob";
public HealthController(ILogger<HealthController> logger, DaprClient daprClient)
{
_logger = logger;
_daprClient = daprClient;
}
[HttpGet("Readiness")]
public async Task<IActionResult> Readiness()
{
try
{
string? _instanceId = Environment.GetEnvironmentVariable("HOSTNAME");
_logger.LogInformation("Readiness::Invoked readiness endpoint by instance {0}", _instanceId);
_logger.LogInformation("Readiness::Testing state store (blob) availability by creating new dummy file by instance {0}", _instanceId);
await _daprClient.SaveStateAsync(BLOB_STORE_NAME, BLOB_KEY_NAME, DateTime.UtcNow);
_logger.LogInformation("Readiness::Deleting dummy file from state store (blob) by instance {0}", _instanceId);
await _daprClient.DeleteStateAsync(BLOB_STORE_NAME, BLOB_KEY_NAME);
}
catch (Exception e)
{
_logger.LogCritical(e, "Exception while invoking Readiness prob");
return new StatusCodeResult(StatusCodes.Status503ServiceUnavailable);
}
return Ok();
}
}
}