Пример #1
0
        public BackgroundTask()
        {
            StartDate        = DateTime.Now;
            Severity         = 0;
            IndicatorCurrent = 0;
            IndicatorMaximum = 0;
            Status           = BackgroundTaskStatus.Run;

            Completed        = false;
            NotifyOnComplete = false;
        }
Пример #2
0
        //First Draw cycle of a Field calls this method
        void BeforeFirstDraw()
        {
            Log.i(this, "Operation before first draw started");

            //Creating Background instance
            BackgroundImage = new MainMenuBackground(this);

            //Initializing object for displaying current status of Background Tasks
            BackgroundTaskStatus = new BackgroundTaskStatus(10, 5);

            Log.i(this, "Operation before first draw finished");
        }
        static async Task WaitForBackgroundTaskCompletion(string correlationId)
        {
            while (true)
            {
                BackgroundTaskStatus status = BackgroundTask.GetStatus(correlationId);
                if (status.Status != BackgroundTaskRunStatus.Running)
                {
                    break;
                }

                await Task.Delay(TimeSpan.FromSeconds(1));
            }
        }
Пример #4
0
        public static TaskStatusResponse Create(string correlationId, BackgroundTaskStatus backgroundTaskStatus)
        {
            Preconditions.CheckNotNull(backgroundTaskStatus, nameof(backgroundTaskStatus));
            string message = string.Empty;

            if (backgroundTaskStatus.Status == BackgroundTaskRunStatus.Failed)
            {
                message = backgroundTaskStatus.Exception.Match(
                    e => $"Task {backgroundTaskStatus.Operation} failed because of error {e.Message}",
                    () => $"Task {backgroundTaskStatus.Operation} failed with no error");
            }

            return(new TaskStatusResponse(correlationId, backgroundTaskStatus.Status, message));
        }
        protected override Task <Option <TaskStatusResponse> > HandleRequestInternal(Option <TaskStatusRequest> payloadOption, CancellationToken cancellationToken)
        {
            TaskStatusRequest payload = payloadOption.Expect(() => new ArgumentException("Request payload not found"));

            if (ExpectedSchemaVersion.CompareMajorVersion(payload.SchemaVersion, "logs upload request schema") != 0)
            {
                Events.MismatchedMinorVersions(payload.SchemaVersion, ExpectedSchemaVersion);
            }

            BackgroundTaskStatus backgroundTaskStatus = BackgroundTask.GetStatus(payload.CorrelationId);

            Events.ProcessingRequest(payload, backgroundTaskStatus);
            return(Task.FromResult(Option.Some(TaskStatusResponse.Create(payload.CorrelationId, backgroundTaskStatus))));
        }
Пример #6
0
        public BackgroundTask()
        {
            StartDate = DateTime.Now;
            Severity = 0;
            IndicatorCurrent = 0;
            IndicatorMaximum = 0;
            Status = BackgroundTaskStatus.Run;

            Completed = false;
            NotifyOnComplete = false;
        }
Пример #7
0
        public async Task MultipleTasksTest()
        {
            CancellationTokenSource cts = new CancellationTokenSource();

            bool isCompleted1 = false;

            async Task TestTask1()
            {
                await Task.Delay(TimeSpan.FromSeconds(3), cts.Token);

                isCompleted1 = true;
            }

            bool isCompleted2 = false;

            async Task TestTask2()
            {
                await Task.Delay(TimeSpan.FromSeconds(8), cts.Token);

                isCompleted2 = true;
            }

            bool isCompleted3 = false;

            async Task TestTask3()
            {
                await Task.Delay(TimeSpan.FromSeconds(14), cts.Token);

                isCompleted3 = true;
            }

            (string correlationId1, BackgroundTaskStatus backgroundTaskStatus1) = BackgroundTask.Run(TestTask1, "testTask1", cts.Token);
            (string correlationId2, BackgroundTaskStatus backgroundTaskStatus2) = BackgroundTask.Run(TestTask2, "testTask2", cts.Token);
            (string correlationId3, BackgroundTaskStatus backgroundTaskStatus3) = BackgroundTask.Run(TestTask3, "testTask3", cts.Token);

            Assert.NotEmpty(correlationId1);
            Assert.NotNull(backgroundTaskStatus1);
            Assert.Equal(BackgroundTaskRunStatus.Running, backgroundTaskStatus1.Status);
            Assert.False(backgroundTaskStatus1.Exception.HasValue);
            Assert.False(isCompleted1);

            Assert.NotEmpty(correlationId2);
            Assert.NotNull(backgroundTaskStatus2);
            Assert.Equal(BackgroundTaskRunStatus.Running, backgroundTaskStatus2.Status);
            Assert.False(backgroundTaskStatus2.Exception.HasValue);
            Assert.False(isCompleted2);

            Assert.NotEmpty(correlationId3);
            Assert.NotNull(backgroundTaskStatus3);
            Assert.Equal(BackgroundTaskRunStatus.Running, backgroundTaskStatus3.Status);
            Assert.False(backgroundTaskStatus3.Exception.HasValue);
            Assert.False(isCompleted3);

            await Task.Delay(TimeSpan.FromSeconds(5));

            backgroundTaskStatus1 = BackgroundTask.GetStatus(correlationId1);
            Assert.NotNull(backgroundTaskStatus1);
            Assert.Equal(BackgroundTaskRunStatus.Completed, backgroundTaskStatus1.Status);
            Assert.False(backgroundTaskStatus1.Exception.HasValue);
            Assert.True(isCompleted1);

            backgroundTaskStatus2 = BackgroundTask.GetStatus(correlationId2);
            Assert.NotNull(backgroundTaskStatus2);
            Assert.Equal(BackgroundTaskRunStatus.Running, backgroundTaskStatus2.Status);
            Assert.False(backgroundTaskStatus2.Exception.HasValue);
            Assert.False(isCompleted2);

            backgroundTaskStatus3 = BackgroundTask.GetStatus(correlationId3);
            Assert.NotNull(backgroundTaskStatus3);
            Assert.Equal(BackgroundTaskRunStatus.Running, backgroundTaskStatus3.Status);
            Assert.False(backgroundTaskStatus3.Exception.HasValue);
            Assert.False(isCompleted3);

            await Task.Delay(TimeSpan.FromSeconds(7));

            backgroundTaskStatus1 = BackgroundTask.GetStatus(correlationId1);
            Assert.NotNull(backgroundTaskStatus1);
            Assert.Equal(BackgroundTaskRunStatus.Completed, backgroundTaskStatus1.Status);
            Assert.False(backgroundTaskStatus1.Exception.HasValue);
            Assert.True(isCompleted1);

            backgroundTaskStatus2 = BackgroundTask.GetStatus(correlationId2);
            Assert.NotNull(backgroundTaskStatus2);
            Assert.Equal(BackgroundTaskRunStatus.Completed, backgroundTaskStatus2.Status);
            Assert.False(backgroundTaskStatus2.Exception.HasValue);
            Assert.True(isCompleted2);

            backgroundTaskStatus3 = BackgroundTask.GetStatus(correlationId3);
            Assert.NotNull(backgroundTaskStatus3);
            Assert.Equal(BackgroundTaskRunStatus.Running, backgroundTaskStatus3.Status);
            Assert.False(backgroundTaskStatus3.Exception.HasValue);
            Assert.False(isCompleted3);

            await Task.Delay(TimeSpan.FromSeconds(7));

            backgroundTaskStatus1 = BackgroundTask.GetStatus(correlationId1);
            Assert.NotNull(backgroundTaskStatus1);
            Assert.Equal(BackgroundTaskRunStatus.Completed, backgroundTaskStatus1.Status);
            Assert.False(backgroundTaskStatus1.Exception.HasValue);
            Assert.True(isCompleted1);

            backgroundTaskStatus2 = BackgroundTask.GetStatus(correlationId2);
            Assert.NotNull(backgroundTaskStatus2);
            Assert.Equal(BackgroundTaskRunStatus.Completed, backgroundTaskStatus2.Status);
            Assert.False(backgroundTaskStatus2.Exception.HasValue);
            Assert.True(isCompleted2);

            backgroundTaskStatus3 = BackgroundTask.GetStatus(correlationId3);
            Assert.NotNull(backgroundTaskStatus3);
            Assert.Equal(BackgroundTaskRunStatus.Completed, backgroundTaskStatus3.Status);
            Assert.False(backgroundTaskStatus3.Exception.HasValue);
            Assert.True(isCompleted3);

            BackgroundTaskStatus unknownTaskStatus = BackgroundTask.GetStatus(Guid.NewGuid().ToString());

            Assert.NotNull(unknownTaskStatus);
            Assert.Equal(BackgroundTaskRunStatus.Unknown, unknownTaskStatus.Status);
        }
Пример #8
0
        public static void UpdateBackgroundTask(Guid guid, int taskId, int scheduleId, int packageId, string taskName, int itemId,
            string itemName, DateTime finishDate, int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime,
            string source, int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status)
        {
            SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
                                      ObjectQualifier + "UpdateBackgroundTask",
                                      new SqlParameter("@Guid", guid),
                                      new SqlParameter("@taskId", taskId),
                                      new SqlParameter("@scheduleId", scheduleId),
                                      new SqlParameter("@packageId", packageId),
                                      new SqlParameter("@taskName", taskName),
                                      new SqlParameter("@itemId", itemId),
                                      new SqlParameter("@itemName", itemName),
                                      new SqlParameter("@finishDate",
                                                       finishDate == DateTime.MinValue
                                                           ? DBNull.Value
                                                           : (object)finishDate),
                                      new SqlParameter("@indicatorCurrent", indicatorCurrent),
                                      new SqlParameter("@indicatorMaximum", indicatorMaximum),
                                      new SqlParameter("@maximumExecutionTime", maximumExecutionTime),
                                      new SqlParameter("@source", source),
                                      new SqlParameter("@severity", severity),
                                      new SqlParameter("@completed", completed),
                                      new SqlParameter("@notifyOnComplete", notifyOnComplete),
                                      new SqlParameter("@status", (int)status));

        }
Пример #9
0
        public static int AddBackgroundTask(Guid guid, string taskId, int scheduleId, int packageId, int userId,
            int effectiveUserId, string taskName, int itemId, string itemName, DateTime startDate,
            int indicatorCurrent, int indicatorMaximum, int maximumExecutionTime, string source,
            int severity, bool completed, bool notifyOnComplete, BackgroundTaskStatus status)
        {
            SqlParameter prmId = new SqlParameter("@BackgroundTaskID", SqlDbType.Int);
            prmId.Direction = ParameterDirection.Output;

            SqlHelper.ExecuteNonQuery(ConnectionString, CommandType.StoredProcedure,
                                      ObjectQualifier + "AddBackgroundTask",
                                      prmId,
                                      new SqlParameter("@guid", guid),
                                      new SqlParameter("@taskId", taskId),
                                      new SqlParameter("@scheduleId", scheduleId),
                                      new SqlParameter("@packageId", packageId),
                                      new SqlParameter("@userId", userId),
                                      new SqlParameter("@effectiveUserId", effectiveUserId),
                                      new SqlParameter("@taskName", taskName),
                                      new SqlParameter("@itemId", itemId),
                                      new SqlParameter("@itemName", itemName),
                                      new SqlParameter("@startDate", startDate),
                                      new SqlParameter("@indicatorCurrent", indicatorCurrent),
                                      new SqlParameter("@indicatorMaximum", indicatorMaximum),
                                      new SqlParameter("@maximumExecutionTime", maximumExecutionTime),
                                      new SqlParameter("@source", source),
                                      new SqlParameter("@severity", severity),
                                      new SqlParameter("@completed", completed),
                                      new SqlParameter("@notifyOnComplete", notifyOnComplete),
                                      new SqlParameter("@status", status));

            // read identity
            return Convert.ToInt32(prmId.Value);
        }
Пример #10
0
 public static IDataReader GetProcessBackgroundTasks(BackgroundTaskStatus status)
 {
         return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
                                        ObjectQualifier + "GetProcessBackgroundTasks",
                                        new SqlParameter("@status", (int)status));
 }
Пример #11
0
 public static List<BackgroundTask> GetProcessTasks(BackgroundTaskStatus status)
 {
     return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
         DataProvider.GetProcessBackgroundTasks(status));
 }
Пример #12
0
        public JobManagerStatus GetStatus()
        {
            var status = new JobManagerStatus();

            status.Status      = this.RunningState.ToString();
            status.RuningSince = _runningSince;

            foreach (var job in _jobs.Values)
            {
                var instanceStatus = new JobInstanceStatus();
                instanceStatus.Id = job.Id;

                if (_runningJobs.ContainsKey(job.Id))
                {
                    instanceStatus.Status = JobInstanceStatus.JobStatus.Running;
                }
                else
                {
                    instanceStatus.Status = JobInstanceStatus.JobStatus.Idle;
                }

                Int32 runCount = default(int);
                if (_runCounts.TryGetValue(job.Id, out runCount))
                {
                    instanceStatus.RunCount = runCount;
                }

                DateTime lastRun = default(DateTime);
                if (_lastRunTimes.TryGetValue(job.Id, out lastRun))
                {
                    instanceStatus.LastRun = lastRun;
                }

                DateTime?nextRun = null;
                if (_nextRunTimes.TryGetValue(job.Id, out nextRun))
                {
                    instanceStatus.NextRun = nextRun;
                }

                DateTime?runningSince = null;
                if (_runningJobStartTimes.TryGetValue(job.Id, out runningSince))
                {
                    instanceStatus.RunningSince = runningSince;
                }

                status.Jobs.Add(instanceStatus);
            }

            foreach (var runningJob in _runningJobs)
            {
                if (!_jobs.ContainsKey(runningJob.Key))
                {
                    var asyncState = _runningJobs[runningJob.Key].AsyncState as JobState;
                    if (asyncState != null)
                    {
                        var task           = asyncState.BackgroundTask as BackgroundTask;
                        var instanceStatus = new BackgroundTaskStatus(task);
                        status.RunningTasks.Add(instanceStatus);
                    }
                }
            }

            return(status);
        }
Пример #13
0
 public static List <BackgroundTask> GetProcessTasks(BackgroundTaskStatus status)
 {
     return(ObjectUtils.CreateListFromDataReader <BackgroundTask>(
                DataProvider.GetProcessBackgroundTasks(status)));
 }
 public static void ProcessingRequest(TaskStatusRequest payload, BackgroundTaskStatus backgroundTaskStatus)
 {
     Log.LogInformation((int)EventIds.ProcessingRequest, $"Handling status request for task {payload.CorrelationId} - {backgroundTaskStatus.ToJson()}");
 }