相同服務,相同策略的服務能夠不用重複寫好屢次觸發器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',