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;
        }
Exemple #2
0
        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.");
        }