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))); } }
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); }