public InvokeResult CreateLog(BackgroundJobLog jobLog) { //记录日志到统一日志平台 logger.Info(jobLog.runLog.Replace("\\", "")); var bsonDoc = new BsonDocument { { "jobId", jobLog.jobId }, { "jobType", jobLog.jobType }, { "name", jobLog.name }, { "runLog", jobLog.runLog }, { "executionTime", jobLog.executionTime }, { "executionDuration", jobLog.executionDuration }, { "customerCode", jobLog.customerCode } }; var result = CommonDbChangeHelper.SubmitChange(new StorageData() { Document = LogDataMessagePack(bsonDoc), Name = tableName, Type = StorageType.Insert }); return(result); }
/// <summary> /// 执行更新操作 /// </summary> /// <param name="dto"></param> /// <returns></returns> public InvokeResult ProcessJobDataViaQueue(BackgroundJobLog dto) { var systemHealthBll = SystemHealthBll._(); var success = false; switch (int.Parse(dto.jobType)) { case (int)BackgroundJobType.Normal: //数据分析 success = new EasyNetQHelper().VhGeneraterHelper(RabbitMqVirtualHostType.SystemDataAnalyse).Broadcast(dto); break; case (int)BackgroundJobType.SytemHealth: //站点健康检测 success = new EasyNetQHelper().VhGeneraterHelper(RabbitMqVirtualHostType.SystemHealth).Broadcast(dto); break; //管理器 case (int)BackgroundJobType.Manager: break; //更新器 case (int)BackgroundJobType.Updater: break; default: break; } //添加日志处理队列 Task.Run(() => { new EasyNetQHelper().VhGeneraterHelper(RabbitMqVirtualHostType.LogAnalyse).Broadcast <BackgroundJobLog>(dto); }); return(new InvokeResult() { Status = success ? Status.Successful : Status.Failed }); }
/// <summary> /// 添加Job执行日志 /// </summary> /// <param name="jobLog"></param> private static void OnLogCreate(BackgroundJobLog jobLog) { var bsonDoc = new BsonDocument { { "jobId", jobLog.jobId }, { "jobType", jobLog.jobType }, { "name", jobLog.name }, { "runLog", jobLog.runLog }, { "executionTime", jobLog.executionTime }, { "executionDuration", jobLog.executionDuration }, { "customerCode", jobLog.customerCode }, { "createDate", DateTime.Now.ToString("yyy-MM-dd HH:mm:ss") }, { "clientInfo", jobLog.clientInfo } }; try { var result = jobLogBll.CreateLogQuick(bsonDoc); var msg = result.Status == Status.Successful ? "成功" : "失败"; if (result.Status != Status.Successful) { CallBack.OnExecFail(idMap["2"], 1, result.Message, jobLog.ToJson()); } else { queueMap["2"].SuccessTime = DateTime.Now; } var message = ($"{bsonDoc.Text("name")}_{bsonDoc.Text("jobId")}处理结果:{msg}\n"); ShowMessageInfo("OnLogCreate", message); } catch (Exception e) { CallBack.OnExecFail(idMap["2"], 0, e.ToString(), jobLog.ToJson()); } }
/// <summary> /// 业务数据分析 /// </summary> /// <param name="jobLog"></param> private static void OnDataAnalyse(BackgroundJobLog jobLog) { try { var content = jobLog.runLog; var bsonContent = new BsonDocument(); if (!string.IsNullOrEmpty(content)) { bsonContent = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(content); var json = ReceiveSaveData.SaveData(bsonContent.String("execData"), jobLog.customerCode); content = json.Message; if (json.Success == false) { CallBack.OnExecFail(idMap["1"], 1, json.Message, jobLog.ToJson()); } else { queueMap["1"].SuccessTime = DateTime.Now; } } var message = ($"处理结果:{jobLog.jobId}_{jobLog.customerCode}:{content}\n"); ShowMessageInfo("OnDataAnalyse", message); } catch (Exception e) { CallBack.OnExecFail(idMap["1"], 0, e.ToString(), jobLog.ToJson()); } }
public InvokeResult ProcessJobDataImedicate(BackgroundJobLog jobLog) { var systemHealthBll = SystemHealthBll._(); var success = false; var content = jobLog.runLog; BsonDocument bsonDoc = null; if (!string.IsNullOrEmpty(content)) { bsonDoc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(jobLog.runLog); } if (bsonDoc == null) { return new InvokeResult() { Status = Status.Successful } } ; switch (int.Parse(jobLog.jobType)) { case (int)BackgroundJobType.Normal: //数据分析 var json = ReceiveSaveData.SaveData(bsonDoc.String("execData"), jobLog.customerCode); break; case (int)BackgroundJobType.SytemHealth: //站点健康检测,发送错误邮件 if (bsonDoc != null) { if (!string.IsNullOrEmpty(bsonDoc.Text("execData"))) { ///发送PushInfo异常信息到站点 var messageInfo = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <PushMessageInfo>(bsonDoc.Text("execData")); ProcessPushMessageInfo(messageInfo); } } break; //管理器 case (int)BackgroundJobType.Manager: break; //更新器 case (int)BackgroundJobType.Updater: break; default: break; } //添加日志处理队列,发送到日志平台 var result = CreateLog(jobLog); return(new InvokeResult() { Status = success ? Status.Successful : Status.Failed }); }
public InvokeResult ProcessJobData(BackgroundJobLog dto) { if (CommonDbChangeHelper.NeedQueue) { return(ProcessJobDataViaQueue(dto)); } else { return(ProcessJobDataImedicate(dto)); } }
public void WriteLog(string operater, string backgroundJobId, string jobName, DateTime executionTime, decimal executionDuration, string runLog) { var backgroundJobLog = new BackgroundJobLog(); backgroundJobLog.Id = GuidUtil.New(); backgroundJobLog.BackgroundJobId = backgroundJobId; backgroundJobLog.JobName = jobName; backgroundJobLog.ExecutionTime = executionTime; backgroundJobLog.ExecutionDuration = executionDuration; backgroundJobLog.CreateTime = DateTime.Now; backgroundJobLog.RunLog = runLog; CurrentDb.BackgroundJobLog.Add(backgroundJobLog); CurrentDb.SaveChanges(); }
/// <summary> /// Job日志记录 /// </summary> /// <param name="jobId">Job ID</param> /// <param name="JobName">Job名称</param> /// <param name="ExecutionTime">开始执行时间</param> /// <param name="ExecutionDuration">执行时长</param> /// <param name="RunLog">日志内容</param> public static void WriteBackgroundJoLog(BackgroundJobLog backgroundJobLogInfo) { var updateDoc = new BsonDocument(); updateDoc.Set("jobId", backgroundJobLogInfo.jobId.ToString()); updateDoc.Set("name", HttpUtility.UrlEncode(backgroundJobLogInfo.name)); updateDoc.Set("execDateTime", backgroundJobLogInfo.executionTime); updateDoc.Set("execDuration", backgroundJobLogInfo.executionDuration); updateDoc.Set("jobType", backgroundJobLogInfo.jobType); updateDoc.Set("accemblyName", backgroundJobLogInfo.accemblyName); updateDoc.Set("className", backgroundJobLogInfo.className); updateDoc.Set("remark", HttpUtility.UrlEncode(backgroundJobLogInfo.runLog)); ExecHttpWebAPIDocAsync(CustomerConfig.CustomerJobLgUrl, updateDoc); }
/// <summary> /// 执行更新操作 /// </summary> /// <param name="jobLog"></param> /// <returns></returns> public InvokeResult ExecJobViaQueue(BackgroundJobLog jobLog) { var succeed = EasyNetQHelper.Broadcast(jobLog); if (succeed) { return(new InvokeResult() { Status = Status.Successful }); } return(new InvokeResult() { Status = Status.Failed }); }
/// <summary> /// 创建job日志 /// 此处通过JobId或者类型添加到RabbMQ中进行分布式处理,当压力大的时候进行预警并进行添加RabbitMQ服务 /// 可按照 jobType className accemblyName进行队列拆分 /// </summary> /// <returns></returns> public HttpResponseMessage CreateJobLog() { //获取请求的IP地址 var ipAddress = string.Empty; ipAddress = IpHelper.GetIPAddress;; var customerCode = PageReq.GetString("customerCode"); jobLogger.Info("CreateJobLog:" + customerCode); var jobId = PageReq.GetString("jobId"); var name = HttpUtility.UrlDecode(PageReq.GetString("name")); var execDateTime = PageReq.GetString("execDateTime"); var execDuration = PageReq.GetString("execDuration"); var remark = HttpUtility.UrlDecode(PageReq.GetString("remark")); var accemblyName = PageReq.GetString("accemblyName"); var className = PageReq.GetString("className"); var jobType = PageReq.GetInt("jobType");//BackgroundJobType类型 var dto = new BackgroundJobLog() { accemblyName = accemblyName, className = className, customerCode = customerCode, executionTime = execDateTime, executionDuration = execDuration, jobId = jobId, jobType = jobType.ToString(), name = name, runLog = remark, clientInfo = ipAddress }; jobLogger.Info("begin:CreateLogViaQueue" + dto.runLog.Length); var result = _jobLogBll.ProcessJobData(dto); var resultInfo = new ResultInfo { status = result.Status == Status.Successful ? "true" : "false", message = result.Status == Status.Successful ? "成功" : "保存失败", data = dto }; jobLogger.Info("end:CreateLogViaQueue"); return(DataEncode(resultInfo)); }
/// <summary> /// 执行更新操作 /// </summary> /// <param name="jobLog"></param> /// <returns></returns> public InvokeResult ExecJob(BackgroundJobLog jobLog) { var postUrl = SysAppConfig.BugPushUrl; var bsonDoc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(jobLog.runLog); if (bsonDoc != null) { if (!string.IsNullOrEmpty(bsonDoc.Text("execData"))) { var messageInfo = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <PushMessageInfo>( bsonDoc.Text("execData")); messageInfo.errorMessage = HttpUtility.UrlEncode(messageInfo.errorMessage); messageInfo.content = HttpUtility.UrlEncode(messageInfo.content); HttpHelper helper = new HttpHelper(); helper.asyncHttpPost(postUrl, messageInfo); } } return(new InvokeResult() { Status = Status.Successful }); }
/// <summary> /// Job运行日志记录,SchedulerJobListener的运行日志 /// </summary> /// <param name="jobInfo"></param> /// <param name="executionTime"></param> /// <param name="executionDuration"></param> /// <param name="runLog"></param> public void WriteBackgroundJoLog(BackgroundJob jobInfo, DateTime executionTime, double executionDuration, string runLog) { JobLogger.Info($"WriteBackgroundJoLog调度{jobInfo.name} job内容:{runLog.Length}"); //默认发送通过配置文件判断是否发送日志信息,后续可通过任务进行调度进行配置文件修改,更新各大站点最新的配置信息 if (CustomerConfig.NeedSendLog) { BackgroundJobLog backgroundJobLog = new BackgroundJobLog { logId = System.Guid.NewGuid().ToString(), jobId = jobInfo.jobId, name = jobInfo.name, accemblyName = jobInfo.assemblyName, className = jobInfo.className, jobType = jobInfo.jobType, executionTime = executionTime.ToString("yyyy-MM-dd HH:mm:ss"), // ReSharper disable once SpecifyACultureInStringConversionExplicitly executionDuration = executionDuration.ToString(), createDate = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), runLog = runLog }; BackgroundJobWebAPIHelper.WriteBackgroundJoLog(backgroundJobLog); } }
/// <summary> /// 处理系统健康状态 /// </summary> /// <param name="jobLog"></param> private static void OnSystemHealth(BackgroundJobLog jobLog) { if (jobLog != null) { try { var bsonDoc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(jobLog.runLog); if (bsonDoc != null) { if (!string.IsNullOrEmpty(bsonDoc.Text("execData"))) { var messageInfo = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <PushMessageInfo>(bsonDoc.Text("execData")); jobLogBll.ProcessPushMessageInfo(messageInfo); } } var message = ($"{jobLog.jobId}{jobLog.name}{jobLog.customerCode}{jobLog.runLog}\n"); ShowMessageInfo("OnSystemHealth", message); } catch (Exception e) { CallBack.OnExecFail(idMap["4"], 0, e.ToString(), jobLog.ToJson()); } } }