/// <summary>发送告警</summary> /// <param name="groupName">告警组</param> /// <param name="webhook">告警Url</param> /// <param name="title">告警标题</param> /// <param name="message">告警消息</param> public static void SendAlarm(String groupName, String webhook, String title, String message) { XTrace.WriteLine(message); var group = AlarmGroup.FindByName(groupName); var hi = new AlarmHistory { GroupId = group?.Id ?? 0, Name = groupName, Success = true, Action = title, Content = message, Creator = Environment.MachineName, }; try { if (webhook.IsNullOrEmpty() && group != null && group.Enable) { webhook = group?.WebHook; } if (webhook.IsNullOrEmpty()) { throw new InvalidOperationException("未设置或未启用告警地址!"); } if (webhook.Contains("qyapi.weixin")) { hi.Category = "QyWeixin"; var weixin = new WeiXinClient { Url = webhook }; using var span = DefaultTracer.Instance?.NewSpan("SendWeixin", message); weixin.SendMarkDown(message); } else if (webhook.Contains("dingtalk")) { hi.Category = "DingTalk"; var dingTalk = new DingTalkClient { Url = webhook }; using var span = DefaultTracer.Instance?.NewSpan("SendDingTalk", message); dingTalk.SendMarkDown(title, message, null); } } catch (Exception ex) { hi.Success = false; hi.Content += Environment.NewLine + ex.ToString(); } hi.SaveAsync(); }
/// <summary> /// 删除指定报警组 /// </summary> /// <param name="alarmGroupName">报警组名称</param> public void RemoveAlarmGroup(string alarmGroupName) { CheckAlarmGroupSetIsNull(); AlarmGroup alarmGroup = FindAlarmGroupByName(alarmGroupName); RealTimeRepositoryBase.RtDbContext.AlarmGroupSet.Remove(alarmGroup); RealTimeRepositoryBase.RtDbContext.SaveAllChanges(); }
/// <summary>是否能够告警</summary> /// <param name="groupName"></param> /// <param name="webhook"></param> /// <returns></returns> public static Boolean CanAlarm(String groupName, String webhook) { if (!webhook.IsNullOrEmpty()) { return(true); } var group = AlarmGroup.FindByName(groupName); return(group != null && group.Enable && !group.WebHook.IsNullOrEmpty()); }
/// <summary> /// 查找所有报警对象 /// </summary> /// <returns></returns> public List <AlarmBase> FindAlarmByGroup(AlarmGroup group) { if (RealTimeRepositoryBase.RtDbContext.AlarmSet == null) { throw new Exception("RealTimeRepositoryBase.RtDbContext.AlarmSet is null"); } if (RealTimeRepositoryBase.RtDbContext.AlarmSet.Local == null) { throw new Exception("RealTimeRepositoryBase.RtDbContext.AlarmSet.Local is null"); } return(RealTimeRepositoryBase.RtDbContext.AlarmSet.Local.ToList().FindAll(m => m.Group == group)); }
/// <summary> /// 修改报警 /// </summary> public void EditAlarmGroup(string name, AlarmGroup newAlarmGroup) { CheckAlarmGroupSetIsNull(); if (!IsExistAlarmGroupName(newAlarmGroup.Name)) { throw new Exception("报警组名称已存在,不能修改"); } var alarmGroup = FindAlarmGroupByName(name); if (alarmGroup == null) { throw new Exception("需要修改的报警组不存在"); } ObjectCopier.CopyProperties(alarmGroup, newAlarmGroup); RealTimeRepositoryBase.RtDbContext.SaveAllChanges(); }
/// <summary> /// 增加变量组 /// </summary> /// <param name="alarmGroup">待增加的报警组</param> public void AddAlarmGroup(AlarmGroup alarmGroup) { if (alarmGroup == null) { throw new ArgumentNullException(Resource1.AlarmRepository_AddAlarm_alarm); } CheckAlarmSetIsNull(); //判断报警名称是否存在 if (IsExistAlarmGroupName(alarmGroup.Name)) { throw new Exception("变量报警组名称已存在"); } alarmGroup.CreateTime = DateTime.Now; RealTimeRepositoryBase.RtDbContext.AlarmGroupSet.Add(alarmGroup); RealTimeRepositoryBase.RtDbContext.SaveAllChanges(); }
/// <summary> /// 查找所有报警对象 /// </summary> /// <returns></returns> public List <AlarmBase> FindAlarmByGroup(AlarmGroup group) { return(_iAlarmRepository.FindAlarmByGroup(group)); }