public BackgroundRunner(string name, IRunnerAction impl, IRunnerActionPayload payload) { Name = name; ActionImplementation = impl; ActionImplementationParameters = payload; timer = new Timer(RunImpl, null, Timeout.Infinite, Timeout.Infinite); IsStarted = false; }
public async Task Implementation(IRunnerActionPayload p) { Logger.Information($"{nameof(BuildAndDeployAction)} Started."); var payload = p as BuildAndDeployActionPayload; if (payload == null) { Logger.Error("Payload is null"); HasErrors = true; return; } else { Payload = payload; } try { var requests = await payload.ProjectRepository.GetBuildAndDeployRequests(payload.ProjectId, BuildAndDeployRequestState.Created, true); if (requests != null && requests.Count > 0) { // Clear the log. Logger.Clear(); foreach (var r in requests.OrderByDescending(x => x.Request.CreatedAtUtc)) { var task = DoWork(r); await payload.ProjectRepository.UpdateBuildAndDeployRequest(r.Request.Id, Logger.ToString(), null, DateTime.UtcNow); while (task.IsCompleted == false) { // Persist Log await payload.ProjectRepository.UpdateBuildAndDeployRequest(r.Request.Id, Logger.ToString(), null, null); // Sleep for a while await Task.Delay(TimeSpan.FromSeconds(5)); } // Mark this request as Completed await payload.ProjectRepository.UpdateBuildAndDeployRequest(r.Request.Id, Logger.ToString(), BuildAndDeployRequestState.Completed, null); // Clear the Log. Logger.Clear(); } } } catch (Exception exp) { Logger.Error(exp); } Logger.Information($"{nameof(BuildAndDeployAction)} Done."); }