public ResponseBase <EmptyResponse> AddCommandExecuteLog(AddCommandExecuteLogRequest req) { try { //添加执行命令日志 cmdLogRespository.Add(new tb_commandlog() { commanddetailid = req.CommandDetailId, commandendtime = Convert.ToDateTime(req.CommandEndTime), commandparams = req.CommandParams, commandqueueid = req.CommandQueueId, commandstarttime = Convert.ToDateTime(req.CommandStartTime), commandstate = req.ExecuteStatus, logcreatetime = DateTime.Now, msg = req.CommandExecuteLog, nodeid = req.NodeId, totalruntime = int.Parse(req.TotalTime), commandresult = req.CommandResult, }); var cmdqueuemodel = cmdqueuerespository.FindSingle(x => x.id == req.CommandQueueId && x.nodeid == req.NodeId); if (cmdqueuemodel == null) { return(ResponseToClient <EmptyResponse>(ResponesStatus.Failed, "更新命令队列状态失败")); } cmdqueuemodel.commandstate = req.ExecuteStatus; //更新命令队列执行状态 if (req.ExecuteStatus != (int)ExecuteStatus.ExecuteSucess) { //更新命令队列失败次数 cmdqueuemodel.failedcount += 1; } cmdqueuerespository.Update(cmdqueuemodel); //更新命令实体失败次数 return(ResponseToClient <EmptyResponse>(ResponesStatus.Success, "")); } catch (Exception ex) { return(ResponseToClient <EmptyResponse>(ResponesStatus.Exception, JsonConvert.SerializeObject(ex))); } }
} //从左到右,第一位:代表大版本迭代 ,第二位:代表大版本下的大更新 第三位:代表bug修复次数 /// <summary> /// 命令执行方法约定 /// </summary> public void TryExecute() { try { ShowCommandLog("----------------------" + DateTime.Now + ":开始执行命令-----------------------------------------"); DateTime startTime = DateTime.Now; Stopwatch sw = new Stopwatch(); RunCommandResult r; sw.Start(); try { r = Execute(); int retryCount = 0; while (r.ExecuteStatus == ExecuteStatus.ExecuteException && retryCount < this.CommandDetail.maxexeceptionretrycount) { int ct = retryCount + 1; ShowCommandLog("**********第" + ct + "次重试 Start**********"); r = Execute(); retryCount += 1; ShowCommandLog("**********第" + ct + "次重试 End**********"); } r.RetryCount += retryCount; } catch (Exception ex) { r = new RunCommandResult() { ExecuteStatus = ExecuteStatus.ExecuteException, Message = ex.Message, Ex = ex }; ShowCommandLog("执行命令异常,异常信息:" + JsonConvert.SerializeObject(ex)); } sw.Stop(); ShowCommandLog("----------------------" + DateTime.Now + ":执行命令完成-----------------------------------------"); DateTime endTime = DateTime.Now; TimeSpan ts = sw.Elapsed; long times = sw.ElapsedMilliseconds / 1000;//秒 AddCommandExecuteLogRequest addLogReq = new AddCommandExecuteLogRequest() { NodeId = GlobalNodeConfig.NodeID, Source = Source.Node, CommandEndTime = endTime.ToString("yyyy-MM-dd HH:mm:ss"), CommandExecuteLog = strLog.ToString(), CommandParams = JsonConvert.SerializeObject(this.AppConfig), CommandQueueId = CommandQueue.id, CommandResult = JsonConvert.SerializeObject(r), ExecuteStatus = (int)r.ExecuteStatus, CommandStartTime = startTime.ToString("yyyy-MM-dd HH:mm:ss"), TotalTime = times.ToString(), CommandDetailId = CommandDetail.id, }; //上报命令执行日志和执行结果 var r2 = NodeProxy.PostToServer <EmptyResponse, AddCommandExecuteLogRequest>(ProxyUrl.AddCommandExecuteLog_Url, addLogReq); if (r2.Status != ResponesStatus.Success) { ShowCommandLog("上报命令(" + CommandDetail.commandmainclassname + ")的执行日志失败,请求地址:" + ProxyUrl.AddCommandExecuteLog_Url + ",请求参数:" + JsonConvert.SerializeObject(addLogReq) + ",服务器返回参数:" + JsonConvert.SerializeObject(r2)); } if (r.ExecuteStatus == ExecuteStatus.ExecuteException)//命令执行异常,报警 { string title = "当前命令队列(" + CommandQueue.id + ")执行失败,请及时处理"; StringBuilder strContent = new StringBuilder(); strContent.AppendLine("节点编号:" + GlobalNodeConfig.NodeID); strContent.AppendLine("命令队列编号/命令编号:" + CommandQueue.id + "/" + CommandDetail.id.ToString()); strContent.AppendLine("命令执行参数:" + JsonConvert.SerializeObject(this.AppConfig)); strContent.AppendLine("命令执行起/止时间:" + startTime.ToString("yyyy-MM-dd HH:mm:ss") + "/" + endTime.ToString("yyyy-MM-dd HH:mm:ss")); strContent.AppendLine("命令执行耗时(s):" + times.ToString()); strContent.AppendLine("命令执行结果,状态:" + r.ExecuteStatus.description() + ",执行结果:" + JsonConvert.SerializeObject(r)); AlarmHelper.AlarmAsync(GlobalNodeConfig.NodeInfo.isenablealarm, (AlarmType)GlobalNodeConfig.NodeInfo.alarmtype, GlobalNodeConfig.Alarm, title, strContent.ToString()); } } catch (Exception ex) { ShowCommandLog("执行命令异常,异常信息:" + JsonConvert.SerializeObject(ex)); ShowCommandLog("----------------------" + DateTime.Now + ":执行命令完成-----------------------------------------"); log.Error(strLog.ToString()); } finally { strLog.Clear();//正常执行完情况strLog日志 } }