Esempio n. 1
0
 internal void FireTaskFailed(ITask task, Exception e)
 {
     if (TaskFailed != null)
     {
         TaskFailed.Invoke(this, task, e);
     }
 }
Esempio n. 2
0
        /// <summary>
        /// Add a <see cref="TaskFailed"/> callback
        /// </summary>
        /// <param name="callback"><see cref="TaskFailed"/> callback to add</param>
        /// <returns>The <see cref="TaskContext"/></returns>
        public TaskContext Failed(TaskFailed callback)
        {
            if (HasFailed)
            {
                callback(this);
            }

            _failed += callback;
            return(this);
        }
        public async Task AddTask(TaskVm model)
        {
            var result = await Create(model.ToCreateTaskCommand());

            if (result != null)
            {
                await RefreshTask();

                return;
            }
            TaskFailed?.Invoke(this, "Unable to create task");
        }
        private async Task RefreshTask()
        {
            var updatedTasks = (await GetAllTasks()).Payload;

            if (updatedTasks != null)
            {
                Tasks = updatedTasks.ToList();
                TasksUpdated?.Invoke(this, null);
                return;
            }
            TaskFailed?.Invoke(this, "Error while refreshing task list.");
        }
Esempio n. 5
0
 public virtual void SetDatum(object odatum)
 {
     this.datum              = (TaskFailed)odatum;
     this.id                 = TaskID.ForName(datum.taskid.ToString());
     this.taskType           = TaskType.ValueOf(datum.taskType.ToString());
     this.finishTime         = datum.finishTime;
     this.error              = datum.error.ToString();
     this.failedDueToAttempt = datum.failedDueToAttempt == null ? null : TaskAttemptID
                               .ForName(datum.failedDueToAttempt.ToString());
     this.status   = datum.status.ToString();
     this.counters = EventReader.FromAvro(datum.counters);
 }
        public async Task AssignTask(Guid memberId)
        {
            SelectedTask.AssignedMemberId = memberId;
            var result = await Update(SelectedTask.ToUpdateTaskCommand());

            if (result != null)
            {
                await RefreshTask();

                return;
            }
            TaskFailed?.Invoke(this, "Unable to create task");
        }
        public async Task CompleteTask(Guid id)
        {
            var completeTask = Tasks.FirstOrDefault(x => x.Id == id);

            completeTask.IsComplete = true;
            var result = await Update(completeTask.ToUpdateTaskCommand());

            if (result != null)
            {
                await RefreshTask();
            }
            TaskFailed?.Invoke(this, "Unable to complete task");
            TasksUpdated?.Invoke(this, null);
        }
Esempio n. 8
0
 public virtual object GetDatum()
 {
     if (datum == null)
     {
         datum                    = new TaskFailed();
         datum.taskid             = new Utf8(id.ToString());
         datum.error              = new Utf8(error);
         datum.finishTime         = finishTime;
         datum.taskType           = new Utf8(taskType.ToString());
         datum.failedDueToAttempt = failedDueToAttempt == null ? null : new Utf8(failedDueToAttempt
                                                                                 .ToString());
         datum.status   = new Utf8(status);
         datum.counters = EventWriter.ToAvro(counters);
     }
     return(datum);
 }
Esempio n. 9
0
        private void Handle(TaskFailed message)
        {
            RequireActivation(true);
            if (message.ParentTaskInstanceId != this.InstanceId)
            {
                throw new Exception();
            }
            TransitionInfo ti = GetTransition(message.FromTaskInstanceId);

            if (ti == null)
            {
                throw new Exception();
            }
            lock (this)
            {
                log.Info("Child task {0} has failed: {1}", ti.InstanceId, message.ErrorInfo);
                if (ti.Status == TransitionStatus.Failed)
                {
                    return;
                }
                if (!ti.IsTransitionActive)
                {
                    log.Warn("Transition {0} ({1}) is not active: {2}", ti.InstanceId, ti.TaskId, ti.Status);
                    return;
                }
                if (message.IsExpected)
                {
                    ti.Status = TransitionStatus.Failed;
                    if (!AllowChildTaskFailures)
                    {
                        DefaultHandleTaskFailure(message.ErrorInfo, true);
                        return;
                    }
                }
                else
                {
                    ti.Status = TransitionStatus.FailedActive;
                }
                OnTransitionStatusChanged(ti.InstanceId);
                return;
            }
        }
Esempio n. 10
0
        internal virtual void ProcessTask(ScheduledTask scheduledTask)
        {
            if (scheduledTask.IsQueued &&
                !scheduledTask.AllowMultipleInstance)
            {
                GlobalConfiguration.Logger.Warn("scheduled task {0} is in queue and not allow multiple instance", scheduledTask.Name);
                return;
            }

            if (!scheduledTask.AllowMultipleInstance)
            {
                if (TasksHost.IsRunning(scheduledTask.Name))
                {
                    GlobalConfiguration.Logger.Warn("scheduled task {0} is already running and not allow multiple instance", scheduledTask.Name);
                    return;
                }
            }

            var id = Guid.NewGuid();

            scheduledTask.IsQueued = true;

            TasksHost.Enqueue(
                id
                , scheduledTask.Name
                , scheduledTask.TaskType
                , scheduledTask.Parameters
                , (dic) =>
            {
                GlobalConfiguration.Logger.Info("scheduled task {0} completed", scheduledTask.Name);
                scheduledTask.IsQueued = false;
                try
                {
                    if (scheduledTask.Completed != null)
                    {
                        scheduledTask.Completed(dic);
                    }
                }
                catch (Exception ex)
                {
                    GlobalConfiguration.Logger.Error(ex);
                }
                finally
                {
                    scheduledTask.IsForced = false;
                    if (scheduledTask.NextRunningDateFactory != null)
                    {
                        try
                        {
                            scheduledTask.NextRunningDate = scheduledTask.NextRunningDateFactory.Invoke();
                        }
                        catch (Exception ex)
                        {
                            GlobalConfiguration.Logger.Error(ex);
                        }
                    }
                }
            }
                , (ex) =>
            {
                scheduledTask.Exception = ex;
                GlobalConfiguration.Logger.Error(ex);
                if (TaskFailed != null)
                {
                    try
                    {
                        TaskFailed.Invoke(scheduledTask.Name, ex);
                    }
                    catch { }
                }
            },
                null,
                () =>
            {
                GlobalConfiguration.Logger.Info("scheduled task {0} started", scheduledTask.Name);
                scheduledTask.StartedCount += 1;
                if (TaskStarted != null)
                {
                    try
                    {
                        TaskStarted.Invoke(scheduledTask.Name);
                    }
                    catch { }
                }
            },
                true,
                scheduledTask.IsForced);
        }
Esempio n. 11
0
        /// <summary>
        /// Add a <see cref="TaskFailed"/> callback
        /// </summary>
        /// <param name="callback"><see cref="TaskFailed"/> callback to add</param>
        /// <returns>The <see cref="TaskContext"/></returns>
        public TaskContext Failed(TaskFailed callback)
        {
            if (HasFailed) callback(this);

            _failed += callback;
            return this;
        }
Esempio n. 12
0
 /// <summary>
 /// Invokes the TaskFailed event
 /// </summary>
 protected void OnTaskFailed(Exception error)
 => TaskFailed?.Invoke(this, error);
 private void OnTaskFailed()
 {
     TaskFailed?.Invoke(this, EventArgs.Empty);
 }