Browse Source

Fixed capturing startup errors in containers and processes (#209)

- Capture both stderr and stdout
- Run docker logs in a loop to capture the output for restarting containers.

Fixes #199
pull/214/head
David Fowler 6 years ago
committed by GitHub
parent
commit
ab48bfc3ba
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
  1. 19
      src/Microsoft.Tye.Hosting/DockerRunner.cs
  2. 2
      src/Microsoft.Tye.Hosting/Model/DockerStatus.cs
  3. 1
      src/Microsoft.Tye.Hosting/Model/V1/V1ReplicaStatus.cs
  4. 1
      src/Microsoft.Tye.Hosting/ProcessRunner.cs
  5. 1
      src/Microsoft.Tye.Hosting/TyeDashboardApi.cs

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

@ -160,7 +160,8 @@ namespace Microsoft.Tye.Hosting
command,
throwOnError: false,
cancellationToken: dockerInfo.StoppingTokenSource.Token,
outputDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"));
outputDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"),
errorDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"));
if (result.ExitCode != 0)
{
@ -194,14 +195,14 @@ namespace Microsoft.Tye.Hosting
_logger.LogInformation("Collecting docker logs for {ContainerName}.", replica);
await ProcessUtil.RunAsync("docker", $"logs -f {containerId}",
outputDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"),
onStart: pid =>
{
status.DockerLogsPid = pid;
},
throwOnError: false,
cancellationToken: dockerInfo.StoppingTokenSource.Token);
while (!dockerInfo.StoppingTokenSource.Token.IsCancellationRequested)
{
await ProcessUtil.RunAsync("docker", $"logs -f {containerId}",
outputDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"),
errorDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"),
throwOnError: false,
cancellationToken: dockerInfo.StoppingTokenSource.Token);
}
_logger.LogInformation("docker logs collection for {ContainerName} complete with exit code {ExitCode}", replica, result.ExitCode);

2
src/Microsoft.Tye.Hosting/Model/DockerStatus.cs

@ -13,7 +13,5 @@ namespace Microsoft.Tye.Hosting.Model
public string? DockerCommand { get; set; }
public string? ContainerId { get; set; }
public int? DockerLogsPid { get; set; }
}
}

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

@ -14,7 +14,6 @@ namespace Microsoft.Tye.Hosting.Model.V1
public V1ReplicaType Type { get; set; }
public string? DockerCommand { get; set; }
public string? ContainerId { get; set; }
public int? DockerLogsPid { get; set; }
public string? Name { get; set; }
public IEnumerable<int>? Ports { get; set; }
public int? ExitCode { get; set; }

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

@ -191,6 +191,7 @@ namespace Microsoft.Tye.Hosting
environmentVariables: environment,
workingDirectory: workingDirectory,
outputDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"),
errorDataReceived: data => service.Logs.OnNext($"[{replica}]: {data}"),
onStart: pid =>
{
if (hasPorts)

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

@ -181,7 +181,6 @@ namespace Microsoft.Tye.Hosting
else if (replica.Value is DockerStatus dockerStatus)
{
replicaStatus.DockerCommand = dockerStatus.DockerCommand;
replicaStatus.DockerLogsPid = dockerStatus.DockerLogsPid;
replicaStatus.ContainerId = dockerStatus.ContainerId;
}
}

Loading…
Cancel
Save