/// <summary> /// 是否在监听工作时间段 /// </summary> /// <param name="queueName"></param> /// <returns></returns> public virtual bool IsListenerWorkTime(QueueMonitorOption option) { try { //if (string.IsNullOrEmpty(option.WorkTime)) //如果当前工作时间段为空(未配置),默认都在工作时间段内 //{ // return true; //} //List<string> workTime = option.WorkTime.Split('-').ToList(); //if (workTime != null && workTime.Count > 0) //{ // DateTime dtStartTime = Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " + workTime[0]); // DateTime dtEndTime = Convert.ToDateTime(DateTime.Now.ToShortDateString() + " " + workTime[1]); // return // workTime.Any( // workTimes => // DateTime.Now.Ticks >= dtStartTime.Ticks && DateTime.Now.Ticks <= dtEndTime.Ticks); //} return(true); } catch (Exception ex) { log.Error("Listener.IsListenerWorkTime获取(" + option.QueueName + ")是否在工作时间段(" + option.WorkTime + ")异常:" + ex.Message, ex); return(false); } }
public override Dictionary <string, QueueMonitorOption> LoadOption() { log.Fatal("-------------------读取本地json配置开始(" + DateTime.Now + ")---------------------------------"); Dictionary <string, QueueMonitorOption> dic = new Dictionary <string, QueueMonitorOption>(); QueueMonitorOption defaultOption = GetDefault(); List <QueueMonitorOption> optionList = JsonConvert.DeserializeObject <List <QueueMonitorOption> >(File.ReadAllText(directory)); foreach (var item in optionList) { item.AlarmMaxCount = item.AlarmMaxCount <= 0 ? defaultOption.AlarmMaxCount: item.AlarmMaxCount; item.AlarmInterval = item.AlarmInterval <= 0 ? defaultOption.AlarmInterval : item.AlarmInterval; item.ThresholdMaxCount = item.ThresholdMaxCount <= 0 ? defaultOption.ThresholdMaxCount : item.ThresholdMaxCount; if (dic.ContainsKey(item.QueueName)) { dic[item.QueueName] = item; } else { dic.Add(item.QueueName, item); } } log.Fatal("刷新配置文件:" + JsonConvert.SerializeObject(optionList)); log.Fatal("-------------------读取本地json配置结束(" + DateTime.Now + ")---------------------------------"); //读取本地配置文件 return(dic); }
/// <summary> /// 开启监听 /// </summary> /// <param name="queueName"></param> public override void StartListener(List <string> queueName) { StringBuilder strMessage = new StringBuilder(); try { bool isClearSucess = false; string msg = ""; //string wkTime = ""; foreach (var item in queueName) { QueueMonitorOption option = QueueMonitorOptionProvider.GetOption(item); if (!IsListenerWorkTime(option)) { strMessage.AppendLine("queuename:" + item + ",未在监听时间段(" + option.WorkTime + ")"); continue; } float count = _queueMonitor.GetCount(item); strMessage.AppendLine("queuename:" + item + ",count:" + count); if (option.ThresholdMaxCount <= count) //超出范围 { if (option.IsClearQueue) //是否要清空队列 { isClearSucess = _queueMonitor.ClearQueue(item); } msg = "queueName:" + item + ",count:" + count + ",ThresholdMaxCount:" + option.ThresholdMaxCount + ",isClearSucess:" + isClearSucess; strMessage.AppendLine(msg); log.Error(msg); AlarmManger.AlaramAsync(new AlarmOption() { Ip = ConfigurationManager.AppSettings["ServerIp"], CurrentQueueCount = count, QueueOption = option, isClearSucess = isClearSucess }); } else { AlarmManger.ClearAlaramCache(item); } } } catch (Exception ex) { log.Error("监听异常:" + ex.Message, ex); strMessage.AppendLine("监听异常:" + ex.Message); } finally { log.Info(strMessage.ToString()); } }