public static string ToString(EnumTaskStatus eStatus) { switch (eStatus) { case EnumTaskStatus.Process: return("Process"); case EnumTaskStatus.Wait: return("Wait"); case EnumTaskStatus.Rollback: return("Rollback"); case EnumTaskStatus.Delay: return("Delay"); case EnumTaskStatus.Abort: return("Abort"); case EnumTaskStatus.Completed: return("Completed"); default: return("Unknown"); } }
/// <summary> /// 更新任务状态 /// </summary> /// <param name="status"></param> public void UpdateTaskStatus(EnumTaskStatus status, CancellationToken cancellationToken = default(CancellationToken)) { var result = Job.Cluster.ConfigCenter.TryUpdateTaskStatus(this, status, out int errCode, out JobBase latestJob, cancellationToken); if (errCode == 0 || errCode == 2) { Status = status; } }
/// <summary> /// 更新任务状态 /// </summary> /// <param name="status"></param> public void UpdateTaskStatus(EnumTaskStatus status, CancellationToken cancellationToken = default(CancellationToken)) { var result = Job.Cluster.ConfigCenter.TryUpdateTaskStatus(this, status, out int errCode, out JobBase latestJob, cancellationToken); LogWriter.Write(string.Format("更新任务状态结果:{0}", errCode)); if (errCode == 0 || errCode == 2) { Status = status; } }
/// <summary> /// 同步UI状态 /// </summary> /// <param name="status"></param> private void SyncUI(EnumTaskStatus status) { switch (status) { case EnumTaskStatus.Default: CanStart = false; CanStop = false; CanClear = false; IsRecords = Visibility.Collapsed; break; case EnumTaskStatus.Init: CanStart = true; CanStop = false; break; case EnumTaskStatus.Started: CanStart = false; CanStop = true; break; case EnumTaskStatus.Stoped: CanStart = true; CanStop = false; break; case EnumTaskStatus.Clear: CanClear = false; IsRecords = Visibility.Collapsed; Records = new ObservableCollection <RecordObservable>(); break; case EnumTaskStatus.Loading: if (Records.Count > 0 && IsRecords != Visibility.Visible) { IsRecords = Visibility.Visible; CanClear = true; } if (Records.Count == 0 && IsRecords != Visibility.Collapsed) { IsRecords = Visibility.Collapsed; CanClear = false; } if (Records.Count > 100) { //TODO:RECORDS.COUNT > 100 } break; } }
public EnumTaskStatus Update(object obj, float elapsedTime) { if (m_status != EnumTaskStatus.Running) { return(m_status); } m_status = m_task.Update(obj, elapsedTime); if (m_status == EnumTaskStatus.Success || m_status == EnumTaskStatus.Failure) { m_task.Leave(obj); } return(m_status); }
public void Stop(object obj) { if (m_node == null) { return; } if (m_status == EnumTaskStatus.Running) { m_task.Leave(obj); } XBTClassFactory.Free(m_task); m_task = null; m_node = null; m_status = EnumTaskStatus.None; }
public void Start(XBTNode node, object obj) { if (m_status == EnumTaskStatus.Running) { m_task.Leave(obj); } if (m_node == null || m_node != node) { if (m_task != null) { XBTClassFactory.Free(m_task); m_task = null; } m_task = XBTClassFactory.Alloc <IXBTTask>(node.taskClassName); m_task.SetNode(node); m_node = node; } m_task.Enter(obj); m_status = EnumTaskStatus.Running; }
/// <summary> /// Converts the task status enum to a string value /// </summary> /// <param name="StatusEnum">An IStatusFile.EnumTaskStatus object</param> /// <returns>String representation of input object</returns> private string ConvertTaskStatusToString(EnumTaskStatus StatusEnum) { return StatusEnum.ToString("G"); }
/// <summary> /// Sets status file to show mahager not running /// </summary> /// <param name="MgrError">TRUE if manager not running due to error; FALSE otherwise</param> public void UpdateStopped(bool MgrError) { ClearCachedInfo(); if (MgrError) { m_MgrStatus = EnumMgrStatus.Stopped_Error; } else { m_MgrStatus = EnumMgrStatus.Stopped; } m_TaskStatus = EnumTaskStatus.No_Task; m_TaskStatusDetail = EnumTaskStatusDetail.No_Task; WriteStatusFile(); }
/// <summary> /// Updates status file to show manager in idle state /// </summary> public void UpdateIdle() { ClearCachedInfo(); m_MgrStatus = EnumMgrStatus.Running; m_TaskStatus = EnumTaskStatus.No_Task; m_TaskStatusDetail = EnumTaskStatusDetail.No_Task; WriteStatusFile(); }
/// <summary> /// Updates status file to show manager disabled /// </summary> /// <param name="Local">TRUE if manager disabled locally, otherwise FALSE</param> public void UpdateDisabled(bool Local) { ClearCachedInfo(); if (Local) { m_MgrStatus = EnumMgrStatus.Disabled_Local; } else { m_MgrStatus = EnumMgrStatus.Disabled_MC; } m_TaskStatus = EnumTaskStatus.No_Task; m_TaskStatusDetail = EnumTaskStatusDetail.No_Task; this.WriteStatusFile(); }
/// <summary> /// Converts the task status enum to a string value /// </summary> /// <param name="statusEnum">An IStatusFile.EnumTaskStatus object</param> /// <returns>String representation of input object</returns> private string ConvertTaskStatusToString(EnumTaskStatus statusEnum) { return(statusEnum.ToString("G")); }
/// <summary> /// 尝试更新任务状态 /// </summary> /// <returns><c>true</c>, if update task status was tryed, <c>false</c> otherwise.</returns> /// <param name="task">Task.</param> /// <param name="status">Status.</param> /// <param name="errCode">错误代码:0无错误 1不能设置为这个状态 2无需重复设置状态 3作业或任务不存在</param> /// <param name="latestJob">Latest job.</param> /// <param name="cancellationToken">Cancellation token.</param> public bool TryUpdateTaskStatus(JobTask task, EnumTaskStatus status, out int errCode, out JobBase latestJob, CancellationToken cancellationToken = default(CancellationToken)) { errCode = 0; latestJob = null; cancellationToken.ThrowIfCancellationRequested(); var jobRecordKey = GetJobRecordFullKey(task.Job.Cluster.Name, task.Job.Name, task.Job.Id); KVPair jobRecordKV; int updateIndex = 0; do { updateIndex++; Log.LogWriter.Write(string.Format("UpdateTaskStatus Execute Times: {0},{1}", jobRecordKey + ":" + task.Id, updateIndex), Log.LogLevel.Debug); if (updateIndex > 1) { Thread.Sleep(200); } jobRecordKV = ConsulKV.Get(jobRecordKey, cancellationToken); if (jobRecordKV == null) { errCode = 3; Log.LogWriter.Write(string.Format("the job missing: {0}", jobRecordKey), Log.LogLevel.Error); return(false); } var jobRecordJson = Encoding.UTF8.GetString(jobRecordKV.Value); Log.LogWriter.Write("UpdateTaskStatus Get Value[" + jobRecordKV.ModifyIndex + "]" + jobRecordJson, Log.LogLevel.Trace); var jobRecord = JobBase.Deserialize(jobRecordJson, task.Job.Cluster); jobRecord.ModifyIndex = jobRecordKV.ModifyIndex; // 从作业任务计划中查找出任务:Synced和SyncFailed是Manager更改的状态,其它情况下是任务所属的Worker来更改 var consulTask = jobRecord.TaskPlan.Where(d => d.Key == task.Job.Cluster.CurrentMember.Id).SelectMany(d => d.Value.Where(t => t.Id == task.Id)).FirstOrDefault(); if (status == EnumTaskStatus.Synced || status == EnumTaskStatus.SyncFailed) { consulTask = jobRecord.TaskPlan.SelectMany(d => d.Value.Where(t => t.Id == task.Id)).FirstOrDefault(); } if (consulTask == null) { errCode = 3; Log.LogWriter.Write(string.Format("the job task missing: {0}", jobRecordKey), Log.LogLevel.Error); return(false); } // 取消状态只能更新为 已取消或者取消失败 if (consulTask.Status == EnumTaskStatus.Canceling && status != EnumTaskStatus.Canceled && status != EnumTaskStatus.CancelFailed) { LogWriter.Write(string.Format("{0} can not change to {1}", jobRecord.Status, status)); errCode = 1; return(false); } if ((consulTask.Status == EnumTaskStatus.Completed || consulTask.Status == EnumTaskStatus.Synced) && status == EnumTaskStatus.Executing) { LogWriter.Write(string.Format("{0} can not change to {1}", jobRecord.Status, status)); errCode = 1; return(false); } if (status == EnumTaskStatus.Executing) { consulTask.StartTime = DateTime.Now; } if (status == EnumTaskStatus.Completed) { consulTask.FinishedTime = DateTime.Now; } consulTask.Status = status; jobRecord.ModifyIndex = jobRecordKV.ModifyIndex; latestJob = jobRecord; jobRecordJson = JsonConvert.SerializeObject(jobRecord); Log.LogWriter.Write("UpdateTaskStatus CAS Value[" + jobRecordKV.ModifyIndex + "]" + jobRecordJson, Log.LogLevel.Trace); jobRecordKV.Value = Encoding.UTF8.GetBytes(jobRecordJson); } while (!ConsulKV.CAS(jobRecordKV, cancellationToken)); return(true); }
public XBTBehavior() { m_node = null; m_task = null; m_status = EnumTaskStatus.None; }