Browse Source

Refactore tye dashboard api (#818)

* renamed v1bindingList into v1BindingList

* added Deconstruct for use of language feature var (_, _) in foreach

* applied dotnet format

* refactored ifs into switch

* refactored foreach

* inverted if

* refactored foreach

* removed qulifier

* refactored foreachs
finitereality/replica-status-colors
Marvin Huber 6 years ago
committed by GitHub
parent
commit
c759cd7dfc
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 6
      src/Microsoft.Tye.Hosting/Model/EnvironmentVariable.cs
  2. 157
      src/Microsoft.Tye.Hosting/TyeDashboardApi.cs

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

@ -21,5 +21,11 @@ namespace Microsoft.Tye.Hosting.Model
public string? Value { get; set; } public string? Value { get; set; }
public EnvironmentVariableSource? Source { get; set; } public EnvironmentVariableSource? Source { get; set; }
public void Deconstruct(out string name, out string? value)
{
name = Name;
value = Value;
}
} }
} }

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

@ -100,64 +100,59 @@ namespace Microsoft.Tye.Hosting
var description = service.Description; var description = service.Description;
var bindings = description.Bindings; var bindings = description.Bindings;
var v1bindingList = new List<V1ServiceBinding>(); var v1BindingList = bindings.Select(binding => new V1ServiceBinding()
foreach (var binding in bindings)
{ {
v1bindingList.Add(new V1ServiceBinding() Name = binding.Name,
{ ConnectionString = binding.ConnectionString,
Name = binding.Name, Port = binding.Port,
ConnectionString = binding.ConnectionString, ContainerPort = binding.ContainerPort,
Port = binding.Port, Host = binding.Host,
ContainerPort = binding.ContainerPort, Protocol = binding.Protocol
Host = binding.Host, }).ToList();
Protocol = binding.Protocol
});
}
var v1ConfigurationSourceList = new List<V1ConfigurationSource>(); var v1ConfigurationSourceList = new List<V1ConfigurationSource>();
foreach (var configSource in description.Configuration) foreach (var (name, value) in description.Configuration)
{ {
v1ConfigurationSourceList.Add(new V1ConfigurationSource() v1ConfigurationSourceList.Add(new V1ConfigurationSource()
{ {
Name = configSource.Name, Name = name,
Value = configSource.Value Value = value
}); });
} }
var v1RunInfo = new V1RunInfo(); var v1RunInfo = new V1RunInfo();
if (description.RunInfo is DockerRunInfo dockerRunInfo) switch (description.RunInfo)
{
v1RunInfo.Type = V1RunInfoType.Docker;
v1RunInfo.Image = dockerRunInfo.Image;
v1RunInfo.VolumeMappings = dockerRunInfo.VolumeMappings.Select(v => new V1DockerVolume
{
Name = v.Name,
Source = v.Source,
Target = v.Target
}).ToList();
v1RunInfo.WorkingDirectory = dockerRunInfo.WorkingDirectory;
v1RunInfo.Args = dockerRunInfo.Args;
}
else if (description.RunInfo is ExecutableRunInfo executableRunInfo)
{
v1RunInfo.Type = V1RunInfoType.Executable;
v1RunInfo.Args = executableRunInfo.Args;
v1RunInfo.Executable = executableRunInfo.Executable;
v1RunInfo.WorkingDirectory = executableRunInfo.WorkingDirectory;
}
else if (description.RunInfo is ProjectRunInfo projectRunInfo)
{ {
v1RunInfo.Type = V1RunInfoType.Project; case DockerRunInfo dockerRunInfo:
v1RunInfo.Args = projectRunInfo.Args; v1RunInfo.Type = V1RunInfoType.Docker;
v1RunInfo.Build = projectRunInfo.Build; v1RunInfo.Image = dockerRunInfo.Image;
v1RunInfo.Project = projectRunInfo.ProjectFile.FullName; v1RunInfo.VolumeMappings = dockerRunInfo.VolumeMappings.Select(v => new V1DockerVolume
{
Name = v.Name,
Source = v.Source,
Target = v.Target
}).ToList();
v1RunInfo.WorkingDirectory = dockerRunInfo.WorkingDirectory;
v1RunInfo.Args = dockerRunInfo.Args;
break;
case ExecutableRunInfo executableRunInfo:
v1RunInfo.Type = V1RunInfoType.Executable;
v1RunInfo.Args = executableRunInfo.Args;
v1RunInfo.Executable = executableRunInfo.Executable;
v1RunInfo.WorkingDirectory = executableRunInfo.WorkingDirectory;
break;
case ProjectRunInfo projectRunInfo:
v1RunInfo.Type = V1RunInfoType.Project;
v1RunInfo.Args = projectRunInfo.Args;
v1RunInfo.Build = projectRunInfo.Build;
v1RunInfo.Project = projectRunInfo.ProjectFile.FullName;
break;
} }
var v1ServiceDescription = new V1ServiceDescription() var v1ServiceDescription = new V1ServiceDescription()
{ {
Bindings = v1bindingList, Bindings = v1BindingList,
Configuration = v1ConfigurationSourceList, Configuration = v1ConfigurationSourceList,
Name = description.Name, Name = description.Name,
Replicas = description.Replicas, Replicas = description.Replicas,
@ -165,29 +160,30 @@ namespace Microsoft.Tye.Hosting
}; };
var replicateDictionary = new Dictionary<string, V1ReplicaStatus>(); var replicateDictionary = new Dictionary<string, V1ReplicaStatus>();
foreach (var replica in service.Replicas) foreach (var (instance, replica) in service.Replicas)
{ {
var replicaStatus = new V1ReplicaStatus() var replicaStatus = new V1ReplicaStatus()
{ {
Name = replica.Value.Name, Name = replica.Name,
Ports = replica.Value.Ports, Ports = replica.Ports,
Environment = replica.Value.Environment, Environment = replica.Environment,
State = replica.Value.State State = replica.State
}; };
replicateDictionary[replica.Key] = replicaStatus; replicateDictionary[instance] = replicaStatus;
if (replica.Value is ProcessStatus processStatus) switch (replica)
{ {
replicaStatus.Pid = processStatus.Pid; case ProcessStatus processStatus:
replicaStatus.ExitCode = processStatus.ExitCode; replicaStatus.Pid = processStatus.Pid;
} replicaStatus.ExitCode = processStatus.ExitCode;
else if (replica.Value is DockerStatus dockerStatus) break;
{ case DockerStatus dockerStatus:
replicaStatus.DockerCommand = dockerStatus.DockerCommand; replicaStatus.DockerCommand = dockerStatus.DockerCommand;
replicaStatus.ContainerId = dockerStatus.ContainerId; replicaStatus.ContainerId = dockerStatus.ContainerId;
replicaStatus.DockerNetwork = dockerStatus.DockerNetwork; replicaStatus.DockerNetwork = dockerStatus.DockerNetwork;
replicaStatus.DockerNetworkAlias = dockerStatus.DockerNetworkAlias; replicaStatus.DockerNetworkAlias = dockerStatus.DockerNetworkAlias;
break;
} }
} }
@ -218,38 +214,37 @@ namespace Microsoft.Tye.Hosting
var name = (string?)context.Request.RouteValues["name"]; var name = (string?)context.Request.RouteValues["name"];
context.Response.ContentType = "application/json"; context.Response.ContentType = "application/json";
if (string.IsNullOrEmpty(name) || !app.Services.TryGetValue(name, out var service)) if (!string.IsNullOrEmpty(name) && app.Services.TryGetValue(name, out var service))
{ {
context.Response.StatusCode = 404; return JsonSerializer.SerializeAsync(context.Response.Body, service.CachedLogs, _options);
return JsonSerializer.SerializeAsync(context.Response.Body, new
{
message = $"Unknown service {name}"
},
_options);
} }
return JsonSerializer.SerializeAsync(context.Response.Body, service.CachedLogs, _options); context.Response.StatusCode = 404;
return JsonSerializer.SerializeAsync(context.Response.Body, new
{
message = $"Unknown service {name}"
}, _options);
} }
private Task AllMetrics(HttpContext context) private Task AllMetrics(HttpContext context)
{ {
var app = context.RequestServices.GetRequiredService<Tye.Hosting.Model.Application>(); var app = context.RequestServices.GetRequiredService<Application>();
var sb = new StringBuilder(); var sb = new StringBuilder();
foreach (var s in app.Services.OrderBy(s => s.Key)) foreach (var (serviceName, service) in app.Services.OrderBy(s => s.Key))
{ {
sb.AppendLine($"# {s.Key}"); sb.AppendLine($"# {serviceName}");
foreach (var replica in s.Value.Replicas) foreach (var (instance, replica) in service.Replicas)
{ {
foreach (var metric in replica.Value.Metrics) foreach (var (key, value) in replica.Metrics)
{ {
sb.Append(metric.Key); sb.Append(key);
sb.Append("{"); sb.Append("{");
sb.Append($"service=\"{s.Key}\","); sb.Append($"service=\"{serviceName}\",");
sb.Append($"instance=\"{replica.Key}\""); sb.Append($"instance=\"{instance}\"");
sb.Append("}"); sb.Append("}");
sb.Append(" "); sb.Append(" ");
sb.Append(metric.Value); sb.Append(value);
sb.AppendLine(); sb.AppendLine();
} }
} }
@ -278,16 +273,16 @@ namespace Microsoft.Tye.Hosting
_options); _options);
} }
foreach (var replica in service.Replicas) foreach (var (instance, replica) in service.Replicas)
{ {
foreach (var metric in replica.Value.Metrics) foreach (var (key, value) in replica.Metrics)
{ {
sb.Append(metric.Key); sb.Append(key);
sb.Append("{"); sb.Append("{");
sb.Append($"instance=\"{replica.Key}\""); sb.Append($"instance=\"{instance}\"");
sb.Append("}"); sb.Append("}");
sb.Append(" "); sb.Append(" ");
sb.Append(metric.Value); sb.Append(value);
sb.AppendLine(); sb.AppendLine();
} }
} }

Loading…
Cancel
Save