コード例 #1
0
        /// <summary>
        /// 上报任务调度状态
        /// </summary>
        /// <param name="taskid"></param>
        /// <param name="taskversionid"></param>
        /// <param name="status"></param>
        private void UploadStatus(string taskid, string taskversionid, TaskScheduleStatus status, string nextruntime = "")
        {
            var req2 = new UpdateTaskScheduleStatusRequest()
            {
                NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = status, TaskId = int.Parse(taskid), TaskVersionId = int.Parse(taskversionid), NextRunTime = nextruntime
            };
            var r3 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req2);

            if (r3.Status != ResponesStatus.Success)
            {
                ShowCommandLog("更新任务调度状态(" + status.description() + ")失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req2) + ",返回参数:" + JsonConvert.SerializeObject(r3));
            }
        }
コード例 #2
0
 private void UploadLocalTask(List <int> taskidnotserver)
 {
     taskidnotserver.ForEach(x =>
     {
         var taskruntimeInfo = TaskPoolManager.CreateInstance().Get(x.ToString());
         //上报所在在本地节点运行的任务,但是在服务端未在调度中,更新服务端的任务调度状态为调度中
         var req2 = new UpdateTaskScheduleStatusRequest()
         {
             NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = TaskScheduleStatus.Scheduling, TaskId = x, TaskVersionId = taskruntimeInfo.TaskVersionModel.id, NextRunTime = Convert.ToString(taskruntimeInfo.TaskModel.nextruntime)
         };
         var r3 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req2);
         if (r3.Status != ResponesStatus.Success)
         {
             LogProxy.AddNodeErrorLog("任务id:" + x.ToString() + ",任务名称:" + taskruntimeInfo.TaskModel.taskname + ",在服务端为停止调度状态,在本地节点下为调度中。上报本地节点下的任务状态(调度中)失败");
             // ShowCommandLog("更新任务调度状态(" + status.description() + ")失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req2) + ",返回参数:" + JsonConvert.SerializeObject(r3));
         }
     });
 }
コード例 #3
0
 /// <summary>
 /// 执行
 /// </summary>
 public override RunCommandResult Execute()
 {
     try
     {
         string taskid          = CommandQueue.taskid.ToString();
         int    taskversionid   = CommandQueue.taskversionid;
         var    taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString());
         if (taskruntimeinfo == null)
         {
             ShowCommandLog("任务不在运行中");
             //return new RunCommandResult() { RunStatus = CommandRunStatus.Normal };
         }
         else
         {
             var r = TaskDisposer.DisposeTask(CommandQueue.taskid, taskruntimeinfo, false, ShowCommandLog);
         }
         //上报任务已停止日志,并更新任务执行状态和调度状态(待调度)
         var req = new UpdateTaskScheduleStatusRequest()
         {
             NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = Model.enums.TaskScheduleStatus.StopSchedule, TaskId = int.Parse(taskid), TaskVersionId = taskversionid
         };
         var r2 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req);
         if (r2.Status != ResponesStatus.Success)
         {
             ShowCommandLog("更新任务调度状态(停止调度)失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req) + ",返回参数:" + JsonConvert.SerializeObject(r2));
         }
         return(new RunCommandResult()
         {
             ExecuteStatus = ExecuteStatus.ExecuteSucess
         });
     }
     catch (Exception ex)
     {
         ShowCommandLog("停止执行节点任务失败,异常信息:" + JsonConvert.SerializeObject(ex));
         return(new RunCommandResult()
         {
             ExecuteStatus = ExecuteStatus.ExecuteException, Ex = ex, Message = ex.Message
         });
     }
 }
        public override Model.RunCommandResult Execute()
        {
            try
            {
                string taskid          = CommandQueue.taskid.ToString();
                var    taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString());

                if (taskruntimeinfo == null)
                {
                    ShowCommandLog("当前任务不存在于本地节点中,恢复任务调度失败");
                    return(new Model.RunCommandResult()
                    {
                        ExecuteStatus = ExecuteStatus.ExecuteFailed, Message = "当前任务不存在于本地节点中,暂停任务失败"
                    });
                }

                TaskPoolManager.CreateInstance().UpdateTaskSchduleStatus(taskid, TaskScheduleStatus.RecoverSchedule);
                var req = new UpdateTaskScheduleStatusRequest()
                {
                    NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = Model.enums.TaskScheduleStatus.RecoverSchedule, TaskId = int.Parse(taskid), TaskVersionId = taskruntimeinfo.TaskVersionModel.id
                };
                var r2 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req);
                if (r2.Status != ResponesStatus.Success)
                {
                    ShowCommandLog("更新任务调度状态(恢复调度)失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req) + ",返回参数:" + JsonConvert.SerializeObject(r2));
                }
                return(new Model.RunCommandResult()
                {
                    ExecuteStatus = ExecuteStatus.ExecuteSucess
                });
            }
            catch (Exception ex)
            {
                return(new Model.RunCommandResult()
                {
                    ExecuteStatus = ExecuteStatus.ExecuteException, Message = ex.Message, Ex = ex
                });
            }
        }
コード例 #5
0
        public ResponseBase <EmptyResponse> UpdateTaskScheduleStatus(UpdateTaskScheduleStatusRequest req)
        {
            var taskversion = taskrep.FindSingle(x => x.id == req.TaskId);

            if (taskversion == null)
            {
                return(ResponseToClient <EmptyResponse>(ResponesStatus.Failed, "未找到该任务版本号对应的信息"));
            }
            taskversion.taskschedulestatus = (int)req.ScheduleStatus;
            if (req.ScheduleStatus == TaskScheduleStatus.PauseSchedule)
            {
                taskversion.ispauseschedule = 1;
            }
            if (req.ScheduleStatus == TaskScheduleStatus.RecoverSchedule)
            {
                taskversion.ispauseschedule    = 0;
                taskversion.taskschedulestatus = (int)TaskScheduleStatus.Scheduling;
            }
            taskversion.nextruntime = string.IsNullOrEmpty(req.NextRunTime) ? taskversion.nextruntime : Convert.ToDateTime(req.NextRunTime);
            taskrep.Update(taskversion);
            return(ResponseToClient <EmptyResponse>(ResponesStatus.Success, ""));
        }
コード例 #6
0
        public void Execute(JobExecutionContext context)
        {
            //lock (lockobj)
            //{
            int taskid = Convert.ToInt32(context.JobDetail.Name);

            try
            {
                var taskruntimeinfo = TaskPoolManager.CreateInstance().Get(taskid.ToString());

                taskruntimeinfo.DllTask.ClearLog();
                if (taskruntimeinfo == null || taskruntimeinfo.DllTask == null)
                {
                    // LogHelper.AddTaskError("当前任务信息为空引用", taskid, new Exception());
                    return;
                }
                taskruntimeinfo.TaskLock.Invoke(() =>
                {
                    // int runCount = 0;
                    try
                    {
                        int taskid2        = taskruntimeinfo.TaskModel.id;
                        int taskversionid  = taskruntimeinfo.TaskVersionModel.id;
                        string nextrunTime = Convert.ToDateTime(context.NextFireTimeUtc).ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss");
                        nextrunTime        = nextrunTime.IndexOf("0001-01") > -1 ? "2099-12-30" : nextrunTime;
                        if (taskruntimeinfo.TaskModel.ispauseschedule == 0)                   //等于0 说明没有停止调度,否则停止调度
                        {
                            taskruntimeinfo.DllTask.TryRunTask(nextrunTime, taskruntimeinfo); //执行完,判断是否需要释放
                            try
                            {
                                if (taskruntimeinfo.TaskModel.tasktype == (int)TaskType.OnceTask)
                                {
                                    bool disposeflag = TaskDisposer.DisposeTask(taskid2, taskruntimeinfo, false, null);
                                    if (disposeflag)   //如果释放成功则上报
                                    {
                                        var req = new UpdateTaskScheduleStatusRequest()
                                        {
                                            NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, ScheduleStatus = Model.enums.TaskScheduleStatus.StopSchedule, TaskId = taskid2, TaskVersionId = taskversionid
                                        };
                                        var r2 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskScheduleStatusRequest>(ProxyUrl.UpdateTaskScheduleStatus_Url, req);
                                        if (r2.Status != ResponesStatus.Success)
                                        {
                                            LogProxy.AddTaskErrorLog("更新任务调度状态(停止调度)失败,请求Url:" + ProxyUrl.UpdateTaskScheduleStatus_Url + ",请求参数:" + JsonConvert.SerializeObject(req) + ",返回参数:" + JsonConvert.SerializeObject(r2), taskid);
                                        }
                                    }
                                    else
                                    {
                                        LogProxy.AddTaskErrorLog("taskid=" + taskid + ",释放单次执行任务资源失败", taskid);
                                    }
                                }
                            }
                            catch (Exception ex)
                            {
                                LogProxy.AddTaskErrorLog("taskid=" + taskid + ",释放单次执行任务资源异常:" + JsonConvert.SerializeObject(ex), taskid);
                            }
                        }
                    }
                    catch (Exception exp)
                    {
                        LogProxy.AddTaskErrorLog("任务:" + taskid + ",TaskJob回调时执行异常,异常信息:" + JsonConvert.SerializeObject(exp), taskid);
                    }
                });
            }
            catch (Exception exp)
            {
                LogProxy.AddTaskErrorLog("任务调度组件回调时发生严重异常,异常信息:" + JsonConvert.SerializeObject(exp), taskid);
            }
        }