public static Task Wait(WaitForDockerConfig config) { config = config ?? new WaitForDockerConfig(); var composeYaml = DockerFilesReader.ReadComposeContent(config.DockerComposeDirPath, config.ComposeFileName); var composeJson = new JsonComposeConverter().Convert(composeYaml); var servicePorts = new JsonComposeServicesPortsExtractor().ExtractServicePorts(composeJson).ToArray(); var killCommand = DockerCommandBuilder.BuildDockerKillCommand(config, servicePorts); ShellExecutorFactory.GetShellExecutor(config.Logger).Execute(killCommand, DockerConsts.DockerComposeKill); return(Task.CompletedTask); }
public override async Task <bool> IsHealthy() { var fullDockerCommand = DockerCommandBuilder.BuildDockerExecCommand(_composeProjectName, ServiceName, _command); Logger.Log($"Command health check of {ServiceName} with command {fullDockerCommand} has been started."); var startInfo = GetProcessStartInfo(fullDockerCommand); var sp = new Stopwatch(); var attempts = 1; while (sp.Elapsed.Seconds < TimeoutInSeconds) { sp.Start(); using (var process = Process.Start(startInfo)) { if (process == null) { throw new WaitForDockerException("Unable to create process"); } process.WaitForExit(); var processExitCode = process.ExitCode; Logger.Log($"Attempt number {attempts} of {ServiceName} command health check exited with exit code: {processExitCode.ToString()} and following output \r\n " + $"Output: \r\n {process.StandardOutput.ReadToEnd()} \r\n" + $"Errors: \r\n{process.StandardError.ReadToEnd()}"); Logger.Log(string.Empty); if (processExitCode == SuccessExitCode) { Logger.Log($"Command health check of {ServiceName} return success exit code {processExitCode.ToString()}"); return(true); } } sp.Stop(); await Task.Delay(100); attempts++; } var exceptionMessage = $"Health check failed! Service {ServiceName} was not returning success http status code after {TimeoutInSeconds} seconds."; Logger.Log(exceptionMessage); throw new WaitForDockerException(exceptionMessage); }
public static async Task Wait(WaitForDockerConfig config) { config = config ?? new WaitForDockerConfig(); var logger = config.Logger; logger.Log("Wait for docker has been started.."); var composeYaml = DockerFilesReader.ReadComposeContent(config.DockerComposeDirPath, config.ComposeFileName); var composeJson = new JsonComposeConverter().Convert(composeYaml); var servicePorts = new JsonComposeServicesPortsExtractor().ExtractServicePorts(composeJson).ToArray(); logger.Log($"Checking is any port is already occupied before {DockerConsts.DockerCompose} execution.."); await DockerHealthCheckRunner.RunPreComposeHealthChecks(servicePorts, config.Logger); config.ExtendWithDefaultHealthChecks(servicePorts); var composeCommand = DockerCommandBuilder.BuildComposeCommand(config); ShellExecutorFactory.GetShellExecutor(config.Logger).Execute(composeCommand, DockerConsts.DockerCompose); await DockerHealthCheckRunner.RunPostComposeHealthChecks(config.HealthCheckers); logger.Log("All health checks returns success."); logger.Log("Wait for docker has been finished.."); }