From 3bd5c3e1b5c2f302b28c6e3d71def6780d9b2bcb Mon Sep 17 00:00:00 2001 From: Dennis Reimann Date: Thu, 16 Apr 2020 15:39:08 +0200 Subject: [PATCH] API: Add health check endpoint --- .../BTCPayServerClient.Health.cs | 15 +++++++++++ BTCPayServer.Tests/GreenfieldAPITests.cs | 14 ++++++++++ .../GreenField/HealthController.cs | 16 ++++++++++++ .../swagger/v1/swagger.template.health.json | 26 +++++++++++++++++++ 4 files changed, 71 insertions(+) create mode 100644 BTCPayServer.Client/BTCPayServerClient.Health.cs create mode 100644 BTCPayServer/Controllers/GreenField/HealthController.cs create mode 100644 BTCPayServer/wwwroot/swagger/v1/swagger.template.health.json diff --git a/BTCPayServer.Client/BTCPayServerClient.Health.cs b/BTCPayServer.Client/BTCPayServerClient.Health.cs new file mode 100644 index 000000000..5a551142b --- /dev/null +++ b/BTCPayServer.Client/BTCPayServerClient.Health.cs @@ -0,0 +1,15 @@ +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; + +namespace BTCPayServer.Client +{ + public partial class BTCPayServerClient + { + public virtual async Task IsHealthy(CancellationToken token = default) + { + var response = await _httpClient.SendAsync(CreateHttpRequest("api/v1/health"), token); + return response.IsSuccessStatusCode; + } + } +} diff --git a/BTCPayServer.Tests/GreenfieldAPITests.cs b/BTCPayServer.Tests/GreenfieldAPITests.cs index d0b9dbeb7..49c3960c4 100644 --- a/BTCPayServer.Tests/GreenfieldAPITests.cs +++ b/BTCPayServer.Tests/GreenfieldAPITests.cs @@ -228,5 +228,19 @@ namespace BTCPayServer.Tests } } + + [Fact(Timeout = TestTimeout)] + [Trait("Integration", "Integration")] + public async Task HealthControllerTests() + { + using (var tester = ServerTester.Create()) + { + await tester.StartAsync(); + var unauthClient = new BTCPayServerClient(tester.PayTester.ServerUri); + + var isHealthy = await unauthClient.IsHealthy(); + Assert.True(isHealthy); + } + } } } diff --git a/BTCPayServer/Controllers/GreenField/HealthController.cs b/BTCPayServer/Controllers/GreenField/HealthController.cs new file mode 100644 index 000000000..bdc624dc7 --- /dev/null +++ b/BTCPayServer/Controllers/GreenField/HealthController.cs @@ -0,0 +1,16 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; + +namespace BTCPayServer.Controllers.GreenField +{ + [ApiController] + public class HealthController : ControllerBase + { + [AllowAnonymous] + [HttpGet("~/api/v1/health")] + public ActionResult GetHealth() + { + return Ok(); + } + } +} diff --git a/BTCPayServer/wwwroot/swagger/v1/swagger.template.health.json b/BTCPayServer/wwwroot/swagger/v1/swagger.template.health.json new file mode 100644 index 000000000..93fd4f55b --- /dev/null +++ b/BTCPayServer/wwwroot/swagger/v1/swagger.template.health.json @@ -0,0 +1,26 @@ +{ + "paths": { + "/api/v1/health": { + "get": { + "tags": [ + "Health" + ], + "summary": "Get health status", + "description": "Check whether of not the instance is up", + "operationId": "Health_GetHealth", + "responses": { + "200": { + "description": "Instance is up", + "content": {} + } + }, + "security": [] + } + } + }, + "tags": [ + { + "name": "Health" + } + ] +}