Browse Source

Track and report the "source" of a service. (#1124)

* Track and report the "source" of a service.

* Update file encoding.
pull/1126/head
Phillip Hoff 5 years ago
committed by GitHub
parent
commit
4588079a52
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 14
      src/Microsoft.Tye.Core/ApplicationFactory.cs
  2. 4
      src/Microsoft.Tye.Core/AzureFunctionServiceBuilder.cs
  3. 4
      src/Microsoft.Tye.Core/ContainerServiceBuilder.cs
  4. 4
      src/Microsoft.Tye.Core/DockerFileServiceBuilder.cs
  5. 4
      src/Microsoft.Tye.Core/DotnetProjectServiceBuilder.cs
  6. 4
      src/Microsoft.Tye.Core/ExecutableServiceBuilder.cs
  7. 4
      src/Microsoft.Tye.Core/ExternalServiceBuilder.cs
  8. 4
      src/Microsoft.Tye.Core/LaunchedServiceBuilder.cs
  9. 4
      src/Microsoft.Tye.Core/ProjectServiceBuilder.cs
  10. 5
      src/Microsoft.Tye.Core/ServiceBuilder.cs
  11. 14
      src/Microsoft.Tye.Core/ServiceSource.cs
  12. 4
      src/Microsoft.Tye.Extensions/Dapr/DaprExtension.cs
  13. 2
      src/Microsoft.Tye.Extensions/Elastic/ElasticStackExtension.cs
  14. 2
      src/Microsoft.Tye.Extensions/Seq/SeqExtensions.cs
  15. 2
      src/Microsoft.Tye.Extensions/Zipkin/ZipkinExtension.cs
  16. 2
      src/Microsoft.Tye.Hosting/DockerRunner.cs
  17. 6
      src/Microsoft.Tye.Hosting/Model/Service.cs
  18. 1
      src/Microsoft.Tye.Hosting/Model/V1/V1Service.cs
  19. 1
      src/Microsoft.Tye.Hosting/TyeDashboardApi.cs
  20. 4
      src/tye/ApplicationBuilderExtensions.cs
  21. 4
      test/E2ETest/TyeRunTests.cs

14
src/Microsoft.Tye.Core/ApplicationFactory.cs

@ -164,7 +164,8 @@ namespace Microsoft.Tye
if (!string.IsNullOrEmpty(configService.Project)) if (!string.IsNullOrEmpty(configService.Project))
{ {
var project = new DotnetProjectServiceBuilder(configService.Name!, new FileInfo(configService.ProjectFullPath)); // TODO: Investigate possible null.
var project = new DotnetProjectServiceBuilder(configService.Name!, new FileInfo(configService.ProjectFullPath!), ServiceSource.Configuration);
service = project; service = project;
project.Build = configService.Build ?? true; project.Build = configService.Build ?? true;
@ -195,7 +196,7 @@ namespace Microsoft.Tye
} }
else if (!string.IsNullOrEmpty(configService.Image)) else if (!string.IsNullOrEmpty(configService.Image))
{ {
var container = new ContainerServiceBuilder(configService.Name!, configService.Image!) var container = new ContainerServiceBuilder(configService.Name!, configService.Image!, ServiceSource.Configuration)
{ {
Args = configService.Args, Args = configService.Args,
Replicas = configService.Replicas ?? 1 Replicas = configService.Replicas ?? 1
@ -207,7 +208,7 @@ namespace Microsoft.Tye
} }
else if (!string.IsNullOrEmpty(configService.DockerFile)) else if (!string.IsNullOrEmpty(configService.DockerFile))
{ {
var dockerFile = new DockerFileServiceBuilder(configService.Name!, configService.Image!) var dockerFile = new DockerFileServiceBuilder(configService.Name!, configService.Image!, ServiceSource.Configuration)
{ {
Args = configService.Args, Args = configService.Args,
Build = configService.Build ?? true, Build = configService.Build ?? true,
@ -241,7 +242,7 @@ namespace Microsoft.Tye
workingDirectory = Path.GetDirectoryName(expandedExecutable)!; workingDirectory = Path.GetDirectoryName(expandedExecutable)!;
} }
var executable = new ExecutableServiceBuilder(configService.Name!, expandedExecutable) var executable = new ExecutableServiceBuilder(configService.Name!, expandedExecutable, ServiceSource.Configuration)
{ {
Args = configService.Args, Args = configService.Args,
WorkingDirectory = configService.WorkingDirectory != null ? WorkingDirectory = configService.WorkingDirectory != null ?
@ -310,7 +311,8 @@ namespace Microsoft.Tye
var functionBuilder = new AzureFunctionServiceBuilder( var functionBuilder = new AzureFunctionServiceBuilder(
configService.Name, configService.Name,
azureFunctionDirectory) azureFunctionDirectory,
ServiceSource.Configuration)
{ {
Args = configService.Args, Args = configService.Args,
Replicas = configService.Replicas ?? 1, Replicas = configService.Replicas ?? 1,
@ -332,7 +334,7 @@ namespace Microsoft.Tye
} }
else if (configService.External) else if (configService.External)
{ {
var external = new ExternalServiceBuilder(configService.Name); var external = new ExternalServiceBuilder(configService.Name, ServiceSource.Configuration);
service = external; service = external;
} }
else else

4
src/Microsoft.Tye.Core/AzureFunctionServiceBuilder.cs

@ -6,8 +6,8 @@ namespace Microsoft.Tye
{ {
public class AzureFunctionServiceBuilder : ServiceBuilder public class AzureFunctionServiceBuilder : ServiceBuilder
{ {
public AzureFunctionServiceBuilder(string name, string path) public AzureFunctionServiceBuilder(string name, string path, ServiceSource source)
: base(name) : base(name, source)
{ {
FunctionPath = path; FunctionPath = path;
} }

4
src/Microsoft.Tye.Core/ContainerServiceBuilder.cs

@ -8,8 +8,8 @@ namespace Microsoft.Tye
{ {
public sealed class ContainerServiceBuilder : ServiceBuilder public sealed class ContainerServiceBuilder : ServiceBuilder
{ {
public ContainerServiceBuilder(string name, string image) public ContainerServiceBuilder(string name, string image, ServiceSource source)
: base(name) : base(name, source)
{ {
Image = image; Image = image;
} }

4
src/Microsoft.Tye.Core/DockerFileServiceBuilder.cs

@ -8,8 +8,8 @@ namespace Microsoft.Tye
{ {
public class DockerFileServiceBuilder : ProjectServiceBuilder public class DockerFileServiceBuilder : ProjectServiceBuilder
{ {
public DockerFileServiceBuilder(string name, string image) public DockerFileServiceBuilder(string name, string image, ServiceSource source)
: base(name) : base(name, source)
{ {
Image = image; Image = image;
} }

4
src/Microsoft.Tye.Core/DotnetProjectServiceBuilder.cs

@ -9,8 +9,8 @@ namespace Microsoft.Tye
{ {
public class DotnetProjectServiceBuilder : ProjectServiceBuilder public class DotnetProjectServiceBuilder : ProjectServiceBuilder
{ {
public DotnetProjectServiceBuilder(string name, FileInfo projectFile) public DotnetProjectServiceBuilder(string name, FileInfo projectFile, ServiceSource source)
: base(name) : base(name, source)
{ {
ProjectFile = projectFile; ProjectFile = projectFile;
} }

4
src/Microsoft.Tye.Core/ExecutableServiceBuilder.cs

@ -8,8 +8,8 @@ namespace Microsoft.Tye
{ {
public sealed class ExecutableServiceBuilder : LaunchedServiceBuilder public sealed class ExecutableServiceBuilder : LaunchedServiceBuilder
{ {
public ExecutableServiceBuilder(string name, string executable) public ExecutableServiceBuilder(string name, string executable, ServiceSource source)
: base(name) : base(name, source)
{ {
Executable = executable; Executable = executable;
} }

4
src/Microsoft.Tye.Core/ExternalServiceBuilder.cs

@ -6,8 +6,8 @@ namespace Microsoft.Tye
{ {
public sealed class ExternalServiceBuilder : ServiceBuilder public sealed class ExternalServiceBuilder : ServiceBuilder
{ {
public ExternalServiceBuilder(string name) public ExternalServiceBuilder(string name, ServiceSource source)
: base(name) : base(name, source)
{ {
} }
} }

4
src/Microsoft.Tye.Core/LaunchedServiceBuilder.cs

@ -8,8 +8,8 @@ namespace Microsoft.Tye
{ {
public abstract class LaunchedServiceBuilder : ServiceBuilder public abstract class LaunchedServiceBuilder : ServiceBuilder
{ {
public LaunchedServiceBuilder(string name) public LaunchedServiceBuilder(string name, ServiceSource source)
: base(name) : base(name, source)
{ {
} }

4
src/Microsoft.Tye.Core/ProjectServiceBuilder.cs

@ -8,8 +8,8 @@ namespace Microsoft.Tye
{ {
public class ProjectServiceBuilder : LaunchedServiceBuilder public class ProjectServiceBuilder : LaunchedServiceBuilder
{ {
public ProjectServiceBuilder(string name) public ProjectServiceBuilder(string name, ServiceSource source)
: base(name) : base(name, source)
{ {
} }
public bool IsAspNet { get; set; } public bool IsAspNet { get; set; }

5
src/Microsoft.Tye.Core/ServiceBuilder.cs

@ -4,9 +4,10 @@ namespace Microsoft.Tye
{ {
public abstract class ServiceBuilder public abstract class ServiceBuilder
{ {
public ServiceBuilder(string name) public ServiceBuilder(string name, ServiceSource source)
{ {
Name = name; Name = name;
Source = source;
} }
public string Name { get; } public string Name { get; }
@ -17,5 +18,7 @@ namespace Microsoft.Tye
public List<ServiceOutput> Outputs { get; } = new List<ServiceOutput>(); public List<ServiceOutput> Outputs { get; } = new List<ServiceOutput>();
public HashSet<string> Dependencies { get; } = new HashSet<string>(); public HashSet<string> Dependencies { get; } = new HashSet<string>();
public ServiceSource Source { get; }
} }
} }

14
src/Microsoft.Tye.Core/ServiceSource.cs

@ -0,0 +1,14 @@
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.
// See the LICENSE file in the project root for more information.
namespace Microsoft.Tye
{
public enum ServiceSource
{
Unknown = 0,
Configuration,
Extension,
Host
}
}

4
src/Microsoft.Tye.Extensions/Dapr/DaprExtension.cs

@ -58,7 +58,7 @@ namespace Microsoft.Tye.Extensions.Dapr
} }
context.Output.WriteDebugLine("Injecting Dapr placement service..."); context.Output.WriteDebugLine("Injecting Dapr placement service...");
var daprPlacement = new ContainerServiceBuilder("placement", daprPlacementImage) var daprPlacement = new ContainerServiceBuilder("placement", daprPlacementImage, ServiceSource.Extension)
{ {
Args = "./placement", Args = "./placement",
Bindings = { Bindings = {
@ -104,7 +104,7 @@ namespace Microsoft.Tye.Extensions.Dapr
var daprExecutablePath = GetDaprExecutablePath(); var daprExecutablePath = GetDaprExecutablePath();
var proxy = new ExecutableServiceBuilder($"{project.Name}-dapr", daprExecutablePath) var proxy = new ExecutableServiceBuilder($"{project.Name}-dapr", daprExecutablePath, ServiceSource.Extension)
{ {
WorkingDirectory = context.Application.Source.DirectoryName, WorkingDirectory = context.Application.Source.DirectoryName,

2
src/Microsoft.Tye.Extensions/Elastic/ElasticStackExtension.cs

@ -24,7 +24,7 @@ namespace Microsoft.Tye.Extensions.Elastic
// easy to set up. // easy to set up.
// //
// See: https://elk-docker.readthedocs.io/ // See: https://elk-docker.readthedocs.io/
var elastic = new ContainerServiceBuilder("elastic", "sebp/elk") var elastic = new ContainerServiceBuilder("elastic", "sebp/elk", ServiceSource.Extension)
{ {
Bindings = Bindings =
{ {

2
src/Microsoft.Tye.Extensions/Seq/SeqExtensions.cs

@ -20,7 +20,7 @@ namespace Microsoft.Tye.Extensions.Seq
{ {
context.Output.WriteDebugLine("Injecting seq service..."); context.Output.WriteDebugLine("Injecting seq service...");
var seq = new ContainerServiceBuilder("seq", "datalust/seq") var seq = new ContainerServiceBuilder("seq", "datalust/seq", ServiceSource.Extension)
{ {
EnvironmentVariables = EnvironmentVariables =
{ {

2
src/Microsoft.Tye.Extensions/Zipkin/ZipkinExtension.cs

@ -21,7 +21,7 @@ namespace Microsoft.Tye.Extensions.Zipkin
else else
{ {
context.Output.WriteDebugLine("Injecting zipkin service..."); context.Output.WriteDebugLine("Injecting zipkin service...");
var service = new ContainerServiceBuilder("zipkin", "openzipkin/zipkin") var service = new ContainerServiceBuilder("zipkin", "openzipkin/zipkin", ServiceSource.Extension)
{ {
Bindings = Bindings =
{ {

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

@ -96,7 +96,7 @@ namespace Microsoft.Tye.Hosting
b.ReplicaPorts.Add(b.Port.Value); b.ReplicaPorts.Add(b.Port.Value);
proxyDescription.Bindings.Add(b); proxyDescription.Bindings.Add(b);
} }
var proxyContainerService = new Service(proxyDescription); var proxyContainerService = new Service(proxyDescription, ServiceSource.Host);
containers.Add(proxyContainerService); containers.Add(proxyContainerService);
proxies.Add(proxyContainerService); proxies.Add(proxyContainerService);
} }

6
src/Microsoft.Tye.Hosting/Model/Service.cs

@ -11,7 +11,7 @@ namespace Microsoft.Tye.Hosting.Model
{ {
public class Service public class Service
{ {
public Service(ServiceDescription description) public Service(ServiceDescription description, ServiceSource source)
{ {
Description = description; Description = description;
@ -29,12 +29,16 @@ namespace Microsoft.Tye.Hosting.Model
{ {
entry.Replica.State = entry.State; entry.Replica.State = entry.State;
}); });
ServiceSource = source;
} }
public ServiceDescription Description { get; } public ServiceDescription Description { get; }
public int Restarts { get; set; } public int Restarts { get; set; }
public ServiceSource ServiceSource { get; }
public ServiceType ServiceType public ServiceType ServiceType
{ {
get get

1
src/Microsoft.Tye.Hosting/Model/V1/V1Service.cs

@ -9,6 +9,7 @@ namespace Microsoft.Tye.Hosting.Model.V1
public class V1Service public class V1Service
{ {
public V1ServiceDescription? Description { get; set; } public V1ServiceDescription? Description { get; set; }
public ServiceSource ServiceSource { get; set; }
public ServiceType ServiceType { get; set; } public ServiceType ServiceType { get; set; }
public int Restarts { get; set; } public int Restarts { get; set; }
public V1ServiceStatus? Status { get; set; } public V1ServiceStatus? Status { get; set; }

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

@ -228,6 +228,7 @@ namespace Microsoft.Tye.Hosting
var serviceJson = new V1Service() var serviceJson = new V1Service()
{ {
ServiceSource = service.ServiceSource,
ServiceType = service.ServiceType, ServiceType = service.ServiceType,
Status = v1Status, Status = v1Status,
Description = v1ServiceDescription, Description = v1ServiceDescription,

4
src/tye/ApplicationBuilderExtensions.cs

@ -180,7 +180,7 @@ namespace Microsoft.Tye
}); });
} }
services.Add(service.Name, new Service(description)); services.Add(service.Name, new Service(description, service.Source));
} }
// Ingress get turned into services for hosting // Ingress get turned into services for hosting
@ -210,7 +210,7 @@ namespace Microsoft.Tye
}); });
} }
services.Add(ingress.Name, new Service(description)); services.Add(ingress.Name, new Service(description, ServiceSource.Host));
} }
return new Application(application.Name, application.Source, services, application.ContainerEngine) { Network = application.Network }; return new Application(application.Name, application.Source, services, application.ContainerEngine) { Network = application.Network };

4
test/E2ETest/TyeRunTests.cs

@ -249,7 +249,7 @@ services:
application.Services.Remove(project); application.Services.Remove(project);
var outputFileName = project.AssemblyName + ".dll"; var outputFileName = project.AssemblyName + ".dll";
var container = new ContainerServiceBuilder(project.Name, $"mcr.microsoft.com/dotnet/core/aspnet:{project.TargetFrameworkVersion}") var container = new ContainerServiceBuilder(project.Name, $"mcr.microsoft.com/dotnet/core/aspnet:{project.TargetFrameworkVersion}", ServiceSource.Configuration)
{ {
IsAspNet = true IsAspNet = true
}; };
@ -296,7 +296,7 @@ services:
application.Services.Remove(project); application.Services.Remove(project);
var outputFileName = project.AssemblyName + ".dll"; var outputFileName = project.AssemblyName + ".dll";
var container = new ContainerServiceBuilder(project.Name, $"mcr.microsoft.com/dotnet/core/aspnet:{project.TargetFrameworkVersion}") var container = new ContainerServiceBuilder(project.Name, $"mcr.microsoft.com/dotnet/core/aspnet:{project.TargetFrameworkVersion}", ServiceSource.Configuration)
{ {
IsAspNet = true IsAspNet = true
}; };

Loading…
Cancel
Save