Beispiel #1
0
        public BackgroundTask()
        {
            StartDate        = DateTime.Now;
            Severity         = 0;
            IndicatorCurrent = 0;
            IndicatorMaximum = 0;
            Status           = BackgroundTaskStatus.Run;

            Completed        = false;
            NotifyOnComplete = false;
        }
Beispiel #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));
            }
        }
Beispiel #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))));
        }
        public BackgroundTask()
        {
            StartDate = DateTime.Now;
            Severity = 0;
            IndicatorCurrent = 0;
            IndicatorMaximum = 0;
            Status = BackgroundTaskStatus.Run;

            Completed = false;
            NotifyOnComplete = false;
        }
Beispiel #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);
        }
        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));

        }
        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);
        }
 public static IDataReader GetProcessBackgroundTasks(BackgroundTaskStatus status)
 {
         return SqlHelper.ExecuteReader(ConnectionString, CommandType.StoredProcedure,
                                        ObjectQualifier + "GetProcessBackgroundTasks",
                                        new SqlParameter("@status", (int)status));
 }
 public static List<BackgroundTask> GetProcessTasks(BackgroundTaskStatus status)
 {
     return ObjectUtils.CreateListFromDataReader<BackgroundTask>(
         DataProvider.GetProcessBackgroundTasks(status));
 }
Beispiel #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);
        }
Beispiel #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()}");
 }