Esempio n. 1
0
 def monitor_by_email(self, users):
     mail_service = AppSetting.get_default('mail_service', {})
     body = [
         f'告警名称:{self.title}',
         f'告警对象:{self.target}',
         f'{"告警" if self.event == "1" else "恢复"}时间:{human_datetime()}',
         f'告警描述:{self.message}'
     ]
     if self.event == '2':
         body.append('故障持续:' + self.duration)
     if mail_service.get('server'):
         event_map = {'1': '监控告警通知', '2': '告警恢复通知'}
         subject = f'{event_map[self.event]}-{self.title}'
         mail = Mail(**mail_service)
         mail.send_text_mail(users, subject, '\r\n'.join(body) + '\r\n\r\n自动发送,请勿回复。')
     elif self.spug_key:
         data = {
             'token': self.spug_key,
             'event': self.event,
             'subject': self.title,
             'body': '\r\n'.join(body),
             'users': list(users)
         }
         self.handle_request(f'{spug_server}/apis/notify/mail/', data, 'spug')
     else:
         Notify.make_monitor_notify('发送报警信息失败', '未配置报警服务调用凭据,请在系统管理/系统设置/报警服务设置中配置。')
Esempio n. 2
0
 def monitor_by_wx(self, users):
     if not self.spug_key:
         Notify.make_monitor_notify('发送报警信息失败', '未配置报警服务调用凭据,请在系统管理/系统设置/基本设置/调用凭据中配置。')
         return
     data = {
         'token': self.spug_key,
         'event': self.event,
         'subject': f'{self.title} >> {self.target}',
         'desc': self.message,
         'remark': f'故障持续{self.duration}' if self.event == '2' else None,
         'users': list(users)
     }
     self.handle_request(f'{spug_server}/apis/notify/wx/', data, 'spug')
Esempio n. 3
0
 def dispatch_monitor(self, modes):
     self.u_ids = sum([json.loads(x.contacts) for x in Group.objects.filter(id__in=self.grp)], [])
     for mode in modes:
         if mode == '1':
             users = set(x.wx_token for x in Contact.objects.filter(id__in=self.u_ids, wx_token__isnull=False))
             if not users:
                 Notify.make_monitor_notify('发送报警信息失败', '未找到可用的通知对象,请确保设置了相关报警联系人的微信Token。')
                 continue
             self.monitor_by_wx(users)
         elif mode == '3':
             users = set(x.ding for x in Contact.objects.filter(id__in=self.u_ids, ding__isnull=False))
             if not users:
                 Notify.make_monitor_notify('发送报警信息失败', '未找到可用的通知对象,请确保设置了相关报警联系人的钉钉。')
                 continue
             self.monitor_by_dd(users)
         elif mode == '4':
             users = set(x.email for x in Contact.objects.filter(id__in=self.u_ids, email__isnull=False))
             if not users:
                 Notify.make_monitor_notify('发送报警信息失败', '未找到可用的通知对象,请确保设置了相关报警联系人的邮件地址。')
                 continue
             self.monitor_by_email(users)
         elif mode == '5':
             users = set(x.qy_wx for x in Contact.objects.filter(id__in=self.u_ids, qy_wx__isnull=False))
             if not users:
                 Notify.make_monitor_notify('发送报警信息失败', '未找到可用的通知对象,请确保设置了相关报警联系人的企业微信。')
                 continue
             self.monitor_by_qy_wx(users)