/// <summary> /// 重载基类算法,查看队列服务是否正常 /// </summary> /// <returns></returns> internal override string GenerateData() { var mqAddress = JobParamsDoc.Text("MQAddress"); var mqPassWord = JobParamsDoc.Text("MQAuthorization"); //http://192.168.185.173:15672/api/queues Core.HttpHelper http = new Core.HttpHelper(); HttpItem item = new HttpItem() { URL = mqAddress, Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8", UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36", }; item.Header.Add("Authorization", "Basic YW50YXBvczphbnRhcG9z"); var result = http.GetHtml(item); if (result.StatusCode != System.Net.HttpStatusCode.OK) { var messageInfo = new PushMessageInfo() { content = "RabbitMQ服务停止预警", approvalUserId = this.JobParamsDoc.Text("approvalUserId"), errorMessage = $"{mqAddress}rabbitMQ队列服务出错", customerCode = SysAppConfig.CustomerCode, logType = "1" }; return(messageInfo.ToJson()); } return(string.Empty); }
/// <summary> /// 重载基类算法,注意如果重复读取可能发生数据重复发送邮件 /// </summary> /// <returns></returns> internal override string GenerateData() { var rabbitQueueMessageType = JobParamsDoc.Text("MQMessageType"); var rabbitMQVirtualHost = JobParamsDoc.Text("MQVirtualHost"); var RetryCount = JobParamsDoc.Text("RetryCount"); var tableName = $"{rabbitQueueMessageType}_{rabbitMQVirtualHost}_{DateTime.Now.ToString("yyyy-MM")}"; var week = DateTime.Now.DayOfWeek; var retryTimeQuery = Query.And(Query.NE("DeQueueStage", 1), Query.GTE("EnQueueStage", 3)); //重试入队多次 var query = Query.Or(retryTimeQuery, Query.Exists("errorMsgs", true)); //有错误消息 var limit = 20; //获取当前登录状态 var recordCount = dataOp.FindCount(tableName, query); var topRecoredList = dataOp.FindLimitFieldsByQuery(tableName, query, new MongoDB.Driver.SortByDocument() { }, 0, limit, new string[] { "messageID", "errorMsgs", "MessageRouter", "MessageBody", "EnQueueStage" }).ToList(); //2015.4.13 新增错误日志发送到125.77.255.2:8023端口进行存储,后续迁移 if (!topRecoredList.Any()) { return(string.Empty); } JobLogger.Info($"队列执行错误个数:{recordCount}"); var errorMessage = new StringBuilder(); errorMessage.AppendLine($"{DateTime.Now.ToString("yyyy-MM")}捕获到队列执行异常数据${recordCount}条.前{limit}内容如下:\n\r"); topRecoredList.ForEach(doc => { errorMessage.AppendLine($"{doc.ToJson()}"); }); var approvalUserId = this.JobParamsDoc.Text("approvalUserId"); var messageInfo = new PushMessageInfo() { content = $"小票上传重试错误预警,失败条数:{recordCount}", approvalUserId = approvalUserId, errorMessage = errorMessage.ToString(), customerCode = SysAppConfig.CustomerCode, logType = "1" }; return(messageInfo.ToJson()); }
/// <summary> /// 从数据库中调用EUR_DEADLOCK_DETAIL /// TimePoint statement_parameter_k statement_k statement_parameter [statement] waitresource_k waitresource /// isolationlevel_k isolationlevel waittime_k waittime ///clientapp_k clientapp hostname_k hostname /// </summary> /// <returns></returns> internal override string GenerateData() { //获取异常数据的接口地址通过pos站点数据 var posUrl = JobParamsDoc.Text("PosUrl"); var result = GetHtml(posUrl); if (result.StatusCode == System.Net.HttpStatusCode.OK) { try { var resultDoc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <BsonDocument>(result.Html); if (!resultDoc.ContainsColumn("data") || string.IsNullOrEmpty(resultDoc.Text("data"))) { return(string.Empty); } var detailDetailInfo = string.Empty; var deadLockList = MongoDB.Bson.Serialization.BsonSerializer.Deserialize <List <BsonDocument> >(resultDoc.Text("data")); if (deadLockList.Count() > 0) { //返回解析后的内容字符串 detailDetailInfo = GetDetailFromJson(deadLockList); detailDetailInfo += "详情请通过exec EUR_DEADLOCK_DETAIL 进行查询"; var messageInfo = new PushMessageInfo() { content = "数据库死锁预警", approvalUserId = this.JobParamsDoc.Text("approvalUserId"), errorMessage = detailDetailInfo, customerCode = SysAppConfig.CustomerCode, logType = "1" }; return(messageInfo.ToJson()); } } catch (Exception ex) { } } return(string.Empty); }
/// <summary> /// 重载基类算 定时发送邮件 /// </summary> /// <returns></returns> internal override string GenerateData() { var errorMessage = new StringBuilder(); var RetryCount = JobParamsDoc.Text("RetryCount"); var tableName = "SystemMessagePushQueue"; var _MongoOp = MongoOpCollection.GetMongoOp(CusAppConfig.MasterDataBaseConnectionString); var _dataop = new Yinhe.ProcessingCenter.DataOperation(_MongoOp); var query = Query.And(Query.NE("sendStatus", "1"));//有错误消息 var limit = 20; //获取当前登录状态 var topRecoredList = _dataop.FindLimitFieldsByQuery(tableName, query, new MongoDB.Driver.SortByDocument() { }, 0, limit, new string[] { "title", "content", "arrivedUserIds", "sendDate" }).ToList(); var sendUserIds = topRecoredList.Select(c => (BsonValue)c.Text("arrivedUserIds")); var sendUserList = _dataop.FindAll("SysUser").SetFields("emailAddr", "userId").ToList(); var titileDistinct = new List <int>(); var smtp = SmtpHelper.loadSmtpInfo(); var resultJson = string.Empty; //对重复的titile内容进行过滤减少展示 foreach (var messageInfo in topRecoredList) { var sendDate = messageInfo.Text("sendDate"); ///时间过滤控制 if (!string.IsNullOrEmpty(sendDate)) { //时间生成 var curDate = DateTime.Now; if (sendDate.Contains("yyyy")) { sendDate = sendDate.Replace("yyyy", curDate.Year.ToString()); } if (sendDate.Contains("MM")) { sendDate = sendDate.Replace("MM", curDate.Month.ToString()); } if (sendDate.Contains("dd")) { sendDate = sendDate.Replace("dd", curDate.Day.ToString()); } if (sendDate.Contains("hh")) { sendDate = sendDate.Replace("hh", curDate.Hour.ToString()); } if (sendDate.Contains("mm")) { sendDate = sendDate.Replace("mm", curDate.Minute.ToString()); } if (sendDate.Contains("ss")) { sendDate = sendDate.Replace("ss", curDate.Second.ToString()); } DateTime messSendDate; if (DateTime.TryParse(sendDate, out messSendDate)) { //整小时发送,修正为匹配分钟,15分钟内 if (curDate.Year == messSendDate.Year && curDate.Month == messSendDate.Month && curDate.Day == messSendDate.Day && curDate.Hour == messSendDate.Hour && Math.Abs(curDate.Minute - messSendDate.Minute) <= 30) { } else //时间不匹配需要进行重新轮询时间 { continue; } } } var title = messageInfo.Text("title"); var hasCode = title.GetHashCode(); var content = messageInfo.Text("content"); var hitUserIds = messageInfo.Text("arrivedUserIds"); if (string.IsNullOrEmpty(hitUserIds)) { hitUserIds = "1"; //发给管理员 } var arrivedUserIds = hitUserIds.SplitParam(new string[] { ",", "|" }); //获取发送人的邮箱 var hitUsers = sendUserList.Where(c => arrivedUserIds.Any(d => d == c.Text("userId"))).ToList(); if (hitUsers == null) { continue; } //邮件地址隔开 var mailAddressArr = new List <string>(); hitUsers.ForEach(c => { mailAddressArr.AddRange(c.Text("emailAddr").SplitParam(new string[] { ",", "|" })); }); try { title = title.Replace("\r", " "); title = title.Replace("\n", " "); var mailMessage = SmtpHelper.buildMailMessage(mailAddressArr.Distinct().ToList(), content, title); smtp.SendAsync(mailMessage, null); DBChangeQueue.Instance.EnQueue(new Yinhe.ProcessingCenter.DataRule.StorageData() { Document = new BsonDocument().Add("sendStatus", "1"), Name = tableName, Query = Query.EQ("_id", ObjectId.Parse(messageInfo.Text("_id"))), Type = Yinhe.ProcessingCenter.DataRule.StorageType.Update }); } catch (Exception ex) { errorMessage.AppendFormat("发送邮件错误:{0},请查看调度器服务配置", ex.Message); } //防止重复发送 if (!titileDistinct.Contains(title.GetHashCode())) { titileDistinct.Add(hasCode); } else { continue; } } if (DBChangeQueue.Instance.Count > 0) { StartDbChangeHelper.StartDbChangeProcessQuick(_MongoOp); } if (!string.IsNullOrEmpty(errorMessage.ToString())) { var remoteMessageInfo = new Yinhe.ProcessingCenter.PushMessageInfo() { content = "邮件发送预警", approvalUserId = this.JobParamsDoc.Text("approvalUserId"), errorMessage = errorMessage.ToString(), customerCode = Yinhe.ProcessingCenter.SysAppConfig.CustomerCode, logType = "1" }; return(remoteMessageInfo.ToJson()); } return(errorMessage.ToString()); }