예제 #1
0
        /// <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();
        }
예제 #2
0
        /// <summary>
        ///     删除指定报警组
        /// </summary>
        /// <param name="alarmGroupName">报警组名称</param>
        public void RemoveAlarmGroup(string alarmGroupName)
        {
            CheckAlarmGroupSetIsNull();
            AlarmGroup alarmGroup = FindAlarmGroupByName(alarmGroupName);

            RealTimeRepositoryBase.RtDbContext.AlarmGroupSet.Remove(alarmGroup);
            RealTimeRepositoryBase.RtDbContext.SaveAllChanges();
        }
예제 #3
0
        /// <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());
        }
예제 #4
0
 /// <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));
 }
예제 #5
0
        /// <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();
        }
예제 #6
0
        /// <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();
        }
예제 #7
0
 /// <summary>
 ///     查找所有报警对象
 /// </summary>
 /// <returns></returns>
 public List <AlarmBase> FindAlarmByGroup(AlarmGroup group)
 {
     return(_iAlarmRepository.FindAlarmByGroup(group));
 }