public ResponseBase <AddTaskExecuteLogResponse> AddTaskExecuteLog(AddTaskExecuteLogRequest req)
        {
            try
            {
                var taskmodel = taskversionrep.FindSingle(x => x.id == req.TaskVersionId && x.taskid == req.TaskId && x.nodeid == req.NodeId);
                if (taskmodel == null)
                {
                    return(ResponseToClient <AddTaskExecuteLogResponse>(ResponesStatus.Failed, "任务已不存在"));
                }
                DateTime dt        = DateTime.Now;
                int      runstatus = (int)req.RunStatus;
                //添加执行命令日志
                int r = tasklogrep.AddTaskLog(new tb_tasklog()
                {
                    logcreatetime = dt,
                    logmsg        = "",
                    nodeid        = req.NodeId,
                    taskid        = req.TaskId,
                    taskversionid = req.TaskVersionId,
                    taskparams    = req.TaskParams,
                    taskstarttime = Convert.ToDateTime(req.StartTime),
                    taskstatus    = (int)req.RunStatus,
                    nextruntime   = Convert.ToDateTime(req.NextRunTime)
                });

                if (r <= 0)
                {
                    return(ResponseToClient <AddTaskExecuteLogResponse>(ResponesStatus.Failed, "添加任务执行日志失败"));
                }
                taskmodel.taskrunstatus = (int)req.RunStatus;
                taskversionrep.Update(taskmodel); //更新任务实体
                taskrep.UpdateById(new List <int> {
                    taskmodel.taskid
                }, new Dictionary <string, string>()
                {
                    { "nextruntime", req.NextRunTime }
                });                                                                                                                            //更新任务下次运行时间
                return(ResponseToClient <AddTaskExecuteLogResponse>(ResponesStatus.Success, "", new AddTaskExecuteLogResponse()
                {
                    LogId = r.ToString()
                }));
            }
            catch (Exception ex)
            {
                return(ResponseToClient <AddTaskExecuteLogResponse>(ResponesStatus.Exception, JsonConvert.SerializeObject(ex)));
            }
        }
示例#2
0
        public static RunTaskResult TryRunTask(this AbstractTask task, string nextRunTime, NodeTaskRunTimeInfo taskruntimeinfo)
        {
            RunTaskResult result = new RunTaskResult()
            {
                RunStatus = (int)RunStatus.Failed
            };
            string logId = "";
            long   times = 0;

            Model.enums.ExecuteStatus executestatus = Model.enums.ExecuteStatus.ExecuteSucess;
            try
            {
                task.ShowProcessIngLog("----------------------" + DateTime.Now + ":开始执行任务-----------------------------------------");
                DateTime startTime = DateTime.Now;
                //开始执行任务,上报开始执行日志,并更新任务版本状态为执行中
                #region 开始执行任务,上报开始执行日志,并更新任务版本状态为执行中
                AddTaskExecuteLogRequest req = new AddTaskExecuteLogRequest()
                {
                    NodeId        = GlobalNodeConfig.NodeID,
                    RunStatus     = Model.enums.ExecuteStatus.Executing,
                    Source        = Model.Source.Node,
                    StartTime     = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"),
                    TaskId        = taskruntimeinfo.TaskModel.id,
                    TaskParams    = taskruntimeinfo.TaskVersionModel.taskparams,
                    TaskVersionId = taskruntimeinfo.TaskVersionModel.id,
                    NextRunTime   = nextRunTime
                };
                var r2 = NodeProxy.PostToServer <AddTaskExecuteLogResponse, AddTaskExecuteLogRequest>(ProxyUrl.AddTaskVersionExecuteLog_Url, req);
                if (r2.Status != ResponesStatus.Success)
                {
                    task.ShowProcessIngLog("上报任务(taskid=" + task.TaskDetail.id + "taskversionid=" + task.TaskVersionDetail.id + ")的执行日志失败,请求地址:" + ProxyUrl.AddTaskVersionExecuteLog_Url + ",请求参数:" + JsonConvert.SerializeObject(req) + ",服务器返回参数:" + JsonConvert.SerializeObject(r2));
                }
                logId = r2.Data.LogId;
                #endregion

                Stopwatch sw = new Stopwatch();
                sw.Start();
                try
                {
                    result = task.RunTask();
                }
                catch (Exception ex)
                {
                    result = new RunTaskResult()
                    {
                        RunStatus = (int)RunStatus.Exception, Message = ex.Message, Ex = ex
                    };
                    task.ShowProcessIngLog("执行任务异常,异常信息:" + JsonConvert.SerializeObject(ex));
                }
                sw.Stop();

                TimeSpan ts = sw.Elapsed;
                times = sw.ElapsedMilliseconds / 1000;//秒

                executestatus = result.RunStatus == (int)RunStatus.Normal? Model.enums.ExecuteStatus.ExecuteSucess:(result.RunStatus == (int)RunStatus.Failed?ExecuteStatus.ExecuteFailed:ExecuteStatus.ExecuteException);
            }
            catch (Exception exp)
            {
                executestatus = Model.enums.ExecuteStatus.ExecuteException;
                task.ShowProcessIngLog("执行任务异常,异常信息:" + JsonConvert.SerializeObject(exp));
            }
            finally
            {
                #region 执行任务完毕,上报开始执行日志,并更新任务版本状态为执行中
                task.ShowProcessIngLog("上报任务状态:" + executestatus);
                task.ShowProcessIngLog("----------------------" + DateTime.Now + ":执行任务完成-----------------------------------------");

                DateTime endTime = DateTime.Now;
                //上报任务执行日志和执行结果,并更新最后一次任务状态
                UpdateTaskExecuteLogRequest req2 = new UpdateTaskExecuteLogRequest()
                {
                    NodeId        = GlobalNodeConfig.NodeID,
                    RunStatus     = executestatus,
                    Source        = Model.Source.Node,
                    EndTime       = endTime.ToString("yyyy-MM-dd HH:mm:ss"),
                    TaskId        = taskruntimeinfo.TaskModel.id,
                    TaskResult    = result,
                    LogId         = string.IsNullOrEmpty(logId)?0: int.Parse(logId),
                    TotalRunTime  = times.ToString(),
                    TaskVersionId = taskruntimeinfo.TaskVersionModel.id,
                    LogMsg        = task.GetLog(),
                };
                if (!string.IsNullOrEmpty(logId))
                {
                    var r3 = NodeProxy.PostToServer <EmptyResponse, UpdateTaskExecuteLogRequest>(ProxyUrl.UpdateTaskVersionExecuteLog_Url, req2);
                    if (r3.Status != ResponesStatus.Success)
                    {
                        task.ShowProcessIngLog("上报任务(taskid=" + taskruntimeinfo.TaskModel.id + "taskversionid=" + taskruntimeinfo.TaskVersionModel.id + ")的执行日志失败,请求地址:" + ProxyUrl.AddTaskVersionExecuteLog_Url + ",请求参数:" + JsonConvert.SerializeObject(req2) + ",服务器返回参数:" + JsonConvert.SerializeObject(r3));
                    }
                }
                log.Info(task.GetLog().ToString());
                Alaram(req2, taskruntimeinfo, task);
                task.ClearLog();
                #endregion
            }
            return(result);
        }