From 2d256f18a30ad00e2eb6d759ee2c6b0b15c5b8ab Mon Sep 17 00:00:00 2001 From: Phillip Hoff Date: Wed, 5 May 2021 14:42:16 -0700 Subject: [PATCH] PoC Add "control plane" method to shutdown Tye application (#899) --- src/Microsoft.Tye.Hosting/TyeDashboardApi.cs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/Microsoft.Tye.Hosting/TyeDashboardApi.cs b/src/Microsoft.Tye.Hosting/TyeDashboardApi.cs index 62c18329..64a06f28 100644 --- a/src/Microsoft.Tye.Hosting/TyeDashboardApi.cs +++ b/src/Microsoft.Tye.Hosting/TyeDashboardApi.cs @@ -12,6 +12,7 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Hosting; using Microsoft.Tye.Hosting.Model; using Microsoft.Tye.Hosting.Model.V1; @@ -36,6 +37,7 @@ namespace Microsoft.Tye.Hosting public void MapRoutes(IEndpointRouteBuilder endpoints) { endpoints.MapGet("/api/v1", ServiceIndex); + endpoints.MapDelete("/api/v1/control", ControlPlaneShutdown); endpoints.MapGet("/api/v1/services", Services); endpoints.MapGet("/api/v1/services/{name}", Service); endpoints.MapGet("/api/v1/logs/{name}", Logs); @@ -48,6 +50,7 @@ namespace Microsoft.Tye.Hosting context.Response.ContentType = "application/json"; return JsonSerializer.SerializeAsync(context.Response.Body, new[] { + $"{context.Request.Scheme}://{context.Request.Host}/api/v1/control", $"{context.Request.Scheme}://{context.Request.Host}/api/v1/services", $"{context.Request.Scheme}://{context.Request.Host}/api/v1/logs/{{service}}", $"{context.Request.Scheme}://{context.Request.Host}/api/v1/metrics", @@ -56,6 +59,15 @@ namespace Microsoft.Tye.Hosting _options); } + private Task ControlPlaneShutdown(HttpContext context) + { + var lifetime = context.RequestServices.GetRequiredService(); + + lifetime.StopApplication(); + + return context.Response.CompleteAsync(); + } + private Task Services(HttpContext context) { var app = context.RequestServices.GetRequiredService();