相同服务,相同策略的服务能够不用重复写好屡次触发器python
一、策略A给小李和小罗发邮件
二、策略B给小胡和小崔发邮件
三、策略A是第三部发邮件
四、策略B是第五步发邮件express
一、问题恢复自定义通知
二、触发是触发器决定,报警不报警是报警中心说了算,一个是收集部门,一个是处理部门
三、报警的次数报警升级阈值
四、通知组别
五、脚本名称至关与故障自愈django
class ActionOperation(models.Model): """报警动做列表""" action_type_choices = ((0,'Email'),(1,'weixin'),(3,'Script'),) action_type = models.CharField(u"动做类型",choices=action_type_choices,default='email',max_length=64) step = models.SmallIntegerField(u"第n次告警",default=1,help_text="当trigger触发次数小于这个值时就执行这条记录里报警方式") notifiers= models.ManyToManyField('UserProfile',verbose_name=u"通知对象",blank=True) script_name = models.CharField(max_length=128,blank=True,null=True) _msg_format = '''Host({hostname},{ip}) service({service_name}) has issue,msg:{msg}''' #通知的格式 msg_format = models.TextField(u"消息格式",default=_msg_format) def __str__(self): return self.name
一、触发和动做是多对一
二、动做列表
三、报警多少次与多少次中间报警
四、报警策略,一个策略包含不少动做
五、策略和动做多对多的好处坏处3d
class Action(models.Model): """定义trigger发生后,如何报警""" name = models.CharField(max_length=64,unique=True) triggers = models.ManyToManyField('Trigger',blank=True,help_text=u"想让哪些trigger触发当前报警动做") interval = models.IntegerField(u'告警间隔(s)',default=300) recover_notice = models.BooleanField(u'故障恢复后发送通知消息',default=True) recover_subject = models.CharField(max_length=128,blank=True,null=True) recover_message = models.TextField(blank=True,null=True) enabled = models.BooleanField(default=True) def __str__(self): return self.name
一、以前的triggers关联的是模板
二、以前是多对多,如今是一对多orm
一、以前的triggers关联的是模板对象
host_groups = models.ManyToManyField('HostGroup',blank=True) #在template里已经关联了主机和tirgger了,为何这里还要有 hosts = models.ManyToManyField('Host',blank=True)
二、以前triggers是多对多,如今是一对多blog
triggers = models.ManyToManyField('Trigger',blank=True,help_text=u"想让哪些trigger触发当前报警动做")
from django.contrib import admin from django import forms from monitor import models # Register your models here. from django.contrib.auth.admin import UserAdmin from django.contrib.auth.forms import ReadOnlyPasswordHashField class HostAdmin(admin.ModelAdmin): list_display = ('id','name','ip_addr','status') filter_horizontal = ('host_groups','templates') class TemplateAdmin(admin.ModelAdmin): filter_horizontal = ('services','triggers') class ServiceAdmin(admin.ModelAdmin): filter_horizontal = ('items',) list_display = ('name','interval','plugin_name') #list_select_related = ('items',) class TriggerExpressionInline(admin.TabularInline): model = models.TriggerExpression #exclude = ('memo',) #readonly_fields = ['create_date'] class TriggerAdmin(admin.ModelAdmin): list_display = ('name','severity','enabled') inlines = [TriggerExpressionInline,] #filter_horizontal = ('expressions',) class TriggerExpressionAdmin(admin.ModelAdmin): list_display = ('trigger','service','service_index','specified_index_key','operator_type','data_calc_func','threshold','logic_type') admin.site.register(models.Host,HostAdmin) admin.site.register(models.HostGroup) admin.site.register(models.Template,TemplateAdmin) admin.site.register(models.Service,ServiceAdmin) admin.site.register(models.Trigger,TriggerAdmin) admin.site.register(models.TriggerExpression,TriggerExpressionAdmin) admin.site.register(models.ServiceIndex) admin.site.register(models.Action) admin.site.register(models.ActionOperation) #admin.site.register(models.ActionCondtion,ActionConditionAdmin) admin.site.register(models.Maintenance) admin.site.register(models.UserProfile,UserProfileAdmin) admin.site.register(models.EventLog)
一、建立截图ip
二、建立完成ci
三、表达式列表it
一、反向的关联
二、实现代码以下:
class TriggerExpressionInline(admin.TabularInline): model = models.TriggerExpression #exclude = ('memo',) #readonly_fields = ['create_date'] class TriggerAdmin(admin.ModelAdmin): list_display = ('name','severity','enabled') inlines = [TriggerExpressionInline,] #filter_horizontal = ('expressions',