Browse Source

remove redundant state machines (#236)

davidfowl/build-earlier
Simon Cropp 7 years ago
committed by GitHub
parent
commit
dd726229f7
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 10
      src/Microsoft.Tye.Core/GenerateDockerfileStep.cs
  2. 10
      src/Microsoft.Tye.Core/GenerateHelmChartStep.cs
  3. 6
      src/Microsoft.Tye.Hosting/DockerRunner.cs
  4. 5
      src/Microsoft.Tye.Hosting/ProcessRunner.cs
  5. 4
      src/Microsoft.Tye.Hosting/ProxyService.cs
  6. 32
      src/Microsoft.Tye.Hosting/TyeDashboardApi.cs
  7. 4
      src/tye/Program.cs
  8. 6
      test/E2ETest/testassets/projects/multi-phase-dockerfile/Startup.cs
  9. 6
      test/E2ETest/testassets/projects/single-phase-dockerfile/Startup.cs

10
src/Microsoft.Tye.Core/GenerateDockerfileStep.cs

@ -13,16 +13,16 @@ namespace Microsoft.Tye
public bool Force { get; set; } public bool Force { get; set; }
public override async Task ExecuteAsync(OutputContext output, ApplicationBuilder application, ServiceBuilder service) public override Task ExecuteAsync(OutputContext output, ApplicationBuilder application, ServiceBuilder service)
{ {
if (SkipWithoutProject(output, service, out var project)) if (SkipWithoutProject(output, service, out var project))
{ {
return; return Task.CompletedTask;
} }
if (SkipWithoutContainerInfo(output, service, out var container)) if (SkipWithoutContainerInfo(output, service, out var container))
{ {
return; return Task.CompletedTask;
} }
if (container.UseMultiphaseDockerfile == false) if (container.UseMultiphaseDockerfile == false)
@ -40,8 +40,8 @@ namespace Microsoft.Tye
File.Delete(dockerFilePath); File.Delete(dockerFilePath);
await DockerfileGenerator.WriteDockerfileAsync(output, application, project, container, dockerFilePath); output.WriteInfoLine($"Generating Dockerfile at '{dockerFilePath}'.");
output.WriteInfoLine($"Generated Dockerfile at '{dockerFilePath}'."); return DockerfileGenerator.WriteDockerfileAsync(output, application, project, container, dockerFilePath);
} }
} }
} }

10
src/Microsoft.Tye.Core/GenerateHelmChartStep.cs

@ -13,16 +13,16 @@ namespace Microsoft.Tye
public bool Force { get; set; } public bool Force { get; set; }
public override async Task ExecuteAsync(OutputContext output, ApplicationBuilder application, ServiceBuilder service) public override Task ExecuteAsync(OutputContext output, ApplicationBuilder application, ServiceBuilder service)
{ {
if (SkipWithoutProject(output, service, out var project)) if (SkipWithoutProject(output, service, out var project))
{ {
return; return Task.CompletedTask;
} }
if (SkipWithoutContainerInfo(output, service, out var container)) if (SkipWithoutContainerInfo(output, service, out var container))
{ {
return; return Task.CompletedTask;
} }
var chartDirectory = Path.Combine(project.ProjectFile.DirectoryName, "charts"); var chartDirectory = Path.Combine(project.ProjectFile.DirectoryName, "charts");
@ -36,14 +36,14 @@ namespace Microsoft.Tye
} }
var chart = new HelmChartStep(); var chart = new HelmChartStep();
await HelmChartGenerator.GenerateAsync( output.WriteInfoLine($"Generating Helm Chart at '{Path.Combine(chartDirectory, chart.ChartName)}'.");
return HelmChartGenerator.GenerateAsync(
output, output,
application, application,
project, project,
container, container,
chart, chart,
new DirectoryInfo(chartDirectory)); new DirectoryInfo(chartDirectory));
output.WriteInfoLine($"Generated Helm Chart at '{Path.Combine(chartDirectory, chart.ChartName)}'.");
} }
} }

6
src/Microsoft.Tye.Hosting/DockerRunner.cs

@ -359,14 +359,16 @@ namespace Microsoft.Tye.Hosting
} }
} }
private async Task StopContainerAsync(Service service) private Task StopContainerAsync(Service service)
{ {
if (service.Items.TryGetValue(typeof(DockerInformation), out var value) && value is DockerInformation di) if (service.Items.TryGetValue(typeof(DockerInformation), out var value) && value is DockerInformation di)
{ {
di.StoppingTokenSource.Cancel(); di.StoppingTokenSource.Cancel();
await Task.WhenAll(di.Tasks); return Task.WhenAll(di.Tasks);
} }
return Task.CompletedTask;
} }
private static string? GetUserSecretsPathFromSecrets() private static string? GetUserSecretsPathFromSecrets()

5
src/Microsoft.Tye.Hosting/ProcessRunner.cs

@ -294,15 +294,16 @@ namespace Microsoft.Tye.Hosting
private Task KillRunningProcesses(IDictionary<string, Service> services) private Task KillRunningProcesses(IDictionary<string, Service> services)
{ {
static async Task KillProcessAsync(Service service) static Task KillProcessAsync(Service service)
{ {
if (service.Items.TryGetValue(typeof(ProcessInfo), out var stateObj) && stateObj is ProcessInfo state) if (service.Items.TryGetValue(typeof(ProcessInfo), out var stateObj) && stateObj is ProcessInfo state)
{ {
// Cancel the token before stopping the process // Cancel the token before stopping the process
state.StoppedTokenSource.Cancel(); state.StoppedTokenSource.Cancel();
await Task.WhenAll(state.Tasks); return Task.WhenAll(state.Tasks);
} }
return Task.CompletedTask;
} }
var index = 0; var index = 0;

4
src/Microsoft.Tye.Hosting/ProxyService.cs

@ -29,7 +29,7 @@ namespace Microsoft.Tye.Hosting
_logger = logger; _logger = logger;
} }
public async Task StartAsync(Application application) public Task StartAsync(Application application)
{ {
_host = new HostBuilder() _host = new HostBuilder()
.ConfigureServer(server => .ConfigureServer(server =>
@ -148,7 +148,7 @@ namespace Microsoft.Tye.Hosting
}) })
.Build(); .Build();
await _host.StartAsync(); return _host.StartAsync();
} }
public async Task StopAsync(Application application) public async Task StopAsync(Application application)

32
src/Microsoft.Tye.Hosting/TyeDashboardApi.cs

@ -56,7 +56,7 @@ namespace Microsoft.Tye.Hosting
_options); _options);
} }
private async Task Services(HttpContext context) private Task Services(HttpContext context)
{ {
var app = context.RequestServices.GetRequiredService<Application>(); var app = context.RequestServices.GetRequiredService<Application>();
@ -70,10 +70,10 @@ namespace Microsoft.Tye.Hosting
list.Add(CreateServiceJson(service)); list.Add(CreateServiceJson(service));
} }
await JsonSerializer.SerializeAsync(context.Response.Body, list, _options); return JsonSerializer.SerializeAsync(context.Response.Body, list, _options);
} }
private async Task Service(HttpContext context) private Task Service(HttpContext context)
{ {
var app = context.RequestServices.GetRequiredService<Application>(); var app = context.RequestServices.GetRequiredService<Application>();
@ -83,18 +83,16 @@ namespace Microsoft.Tye.Hosting
if (!app.Services.TryGetValue(name, out var service)) if (!app.Services.TryGetValue(name, out var service))
{ {
context.Response.StatusCode = 404; context.Response.StatusCode = 404;
await JsonSerializer.SerializeAsync(context.Response.Body, new return JsonSerializer.SerializeAsync(context.Response.Body, new
{ {
message = $"Unknown service {name}" message = $"Unknown service {name}"
}, },
_options); _options);
return;
} }
var serviceJson = CreateServiceJson(service); var serviceJson = CreateServiceJson(service);
await JsonSerializer.SerializeAsync(context.Response.Body, serviceJson, _options); return JsonSerializer.SerializeAsync(context.Response.Body, serviceJson, _options);
} }
private static V1Service CreateServiceJson(Model.Service service) private static V1Service CreateServiceJson(Model.Service service)
@ -211,7 +209,7 @@ namespace Microsoft.Tye.Hosting
return serviceJson; return serviceJson;
} }
private async Task Logs(HttpContext context) private Task Logs(HttpContext context)
{ {
var app = context.RequestServices.GetRequiredService<Tye.Hosting.Model.Application>(); var app = context.RequestServices.GetRequiredService<Tye.Hosting.Model.Application>();
@ -221,19 +219,17 @@ namespace Microsoft.Tye.Hosting
if (!app.Services.TryGetValue(name, out var service)) if (!app.Services.TryGetValue(name, out var service))
{ {
context.Response.StatusCode = 404; context.Response.StatusCode = 404;
await JsonSerializer.SerializeAsync(context.Response.Body, new return JsonSerializer.SerializeAsync(context.Response.Body, new
{ {
message = $"Unknown service {name}" message = $"Unknown service {name}"
}, },
_options); _options);
return;
} }
await JsonSerializer.SerializeAsync(context.Response.Body, service.CachedLogs, _options); return JsonSerializer.SerializeAsync(context.Response.Body, service.CachedLogs, _options);
} }
private async Task AllMetrics(HttpContext context) private Task AllMetrics(HttpContext context)
{ {
var app = context.RequestServices.GetRequiredService<Tye.Hosting.Model.Application>(); var app = context.RequestServices.GetRequiredService<Tye.Hosting.Model.Application>();
@ -258,10 +254,10 @@ namespace Microsoft.Tye.Hosting
sb.AppendLine(); sb.AppendLine();
} }
await context.Response.WriteAsync(sb.ToString()); return context.Response.WriteAsync(sb.ToString());
} }
private async Task Metrics(HttpContext context) private Task Metrics(HttpContext context)
{ {
var app = context.RequestServices.GetRequiredService<Application>(); var app = context.RequestServices.GetRequiredService<Application>();
@ -273,13 +269,11 @@ namespace Microsoft.Tye.Hosting
if (!app.Services.TryGetValue(name, out var service)) if (!app.Services.TryGetValue(name, out var service))
{ {
context.Response.StatusCode = 404; context.Response.StatusCode = 404;
await JsonSerializer.SerializeAsync(context.Response.Body, new return JsonSerializer.SerializeAsync(context.Response.Body, new
{ {
message = $"Unknown service {name}" message = $"Unknown service {name}"
}, },
_options); _options);
return;
} }
foreach (var replica in service.Replicas) foreach (var replica in service.Replicas)
@ -296,7 +290,7 @@ namespace Microsoft.Tye.Hosting
} }
} }
await context.Response.WriteAsync(sb.ToString()); return context.Response.WriteAsync(sb.ToString());
} }
} }
} }

4
src/tye/Program.cs

@ -16,7 +16,7 @@ namespace Microsoft.Tye
{ {
static partial class Program static partial class Program
{ {
public static async Task<int> Main(string[] args) public static Task<int> Main(string[] args)
{ {
var command = new RootCommand() var command = new RootCommand()
{ {
@ -47,7 +47,7 @@ namespace Microsoft.Tye
builder.UseExceptionHandler(HandleException); builder.UseExceptionHandler(HandleException);
var parser = builder.Build(); var parser = builder.Build();
return await parser.InvokeAsync(args); return parser.InvokeAsync(args);
} }
private static void HandleException(Exception exception, InvocationContext context) private static void HandleException(Exception exception, InvocationContext context)

6
test/E2ETest/testassets/projects/multi-phase-dockerfile/Startup.cs

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -30,9 +30,9 @@ namespace multi_phase_dockerfile
app.UseEndpoints(endpoints => app.UseEndpoints(endpoints =>
{ {
endpoints.MapGet("/", async context => endpoints.MapGet("/", context =>
{ {
await context.Response.WriteAsync("Hello World!"); return context.Response.WriteAsync("Hello World!");
}); });
}); });
} }

6
test/E2ETest/testassets/projects/single-phase-dockerfile/Startup.cs

@ -1,4 +1,4 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Threading.Tasks; using System.Threading.Tasks;
@ -30,9 +30,9 @@ namespace single_phase_dockerfile
app.UseEndpoints(endpoints => app.UseEndpoints(endpoints =>
{ {
endpoints.MapGet("/", async context => endpoints.MapGet("/", context =>
{ {
await context.Response.WriteAsync("Hello World!"); return context.Response.WriteAsync("Hello World!");
}); });
}); });
} }

Loading…
Cancel
Save