Exemple #1
0
        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);
        }
Exemple #2
0
        /// <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());
     }
 }
Exemple #5
0
        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
            });
        }
Exemple #6
0
 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());
         }
     }
 }