def post(self): req = request.get_json(True) require_fields(req, ('options', 'name', 'type')) schema = get_configuration_schema_for_destination_type(req['type']) if schema is None: abort(400) config = ConfigurationContainer(req['options'], schema) if not config.is_valid(): abort(400) destination = models.NotificationDestination(org=self.current_org, name=req['name'], type=req['type'], options=config, user=self.current_user) try: models.db.session.add(destination) models.db.session.commit() except IntegrityError as e: if 'name' in e.message: abort(400, message=u"Alert Destination with the name {} already exists.".format(req['name'])) abort(500) return destination.to_dict(all=True)
def notify(self, alert, query, user, new_state, app, host): if self.destination: return self.destination.notify(alert, query, user, new_state, app, host) else: # User email subscription, so create an email destination object config = {'addresses': self.user.email} schema = get_configuration_schema_for_destination_type('email') options = ConfigurationContainer(config, schema) destination = get_destination('email', options) return destination.notify(alert, query, user, new_state, app, host, options)
def to_dict(self, all=False): d = { 'id': self.id, 'name': self.name, 'type': self.type, 'icon': self.destination.icon() } if all: schema = get_configuration_schema_for_destination_type(self.type) self.options.set_schema(schema) d['options'] = self.options.to_dict(mask_secrets=True) return d
def post(self, destination_id): destination = models.NotificationDestination.get_by_id_and_org(destination_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_destination_type(req['type']) if schema is None: abort(400) try: destination.type = req['type'] destination.name = req['name'] destination.options.set_schema(schema) destination.options.update(req['options']) models.db.session.add(destination) models.db.session.commit() except ValidationError: abort(400) return destination.to_dict(all=True)
def post(self): req = request.get_json(True) required_fields = ('options', 'name', 'type') for f in required_fields: if f not in req: abort(400) schema = get_configuration_schema_for_destination_type(req['type']) if schema is None: abort(400) config = ConfigurationContainer(req['options'], schema) if not config.is_valid(): abort(400) destination = models.NotificationDestination(org=self.current_org, name=req['name'], type=req['type'], options=config, user=self.current_user) destination.save() return destination.to_dict(all=True)
def post(self, destination_id): destination = models.NotificationDestination.get_by_id_and_org(destination_id, self.current_org) req = request.get_json(True) schema = get_configuration_schema_for_destination_type(req['type']) if schema is None: abort(400) try: destination.type = req['type'] destination.name = req['name'] destination.options.set_schema(schema) destination.options.update(req['options']) models.db.session.add(destination) models.db.session.commit() except ValidationError: abort(400) except IntegrityError as e: if 'name' in e.message: abort(400, message=u"Alert Destination with the name {} already exists.".format(req['name'])) abort(500) return destination.to_dict(all=True)
def post(self): req = request.get_json(True) required_fields = ('options', 'name', 'type') for f in required_fields: if f not in req: abort(400) schema = get_configuration_schema_for_destination_type(req['type']) if schema is None: abort(400) config = ConfigurationContainer(req['options'], schema) if not config.is_valid(): abort(400) destination = models.NotificationDestination(org=self.current_org, name=req['name'], type=req['type'], options=config, user=self.current_user) models.db.session.add(destination) models.db.session.commit() return destination.to_dict(all=True)
def notify(self, alert, query, user, new_state, app, host): schema = get_configuration_schema_for_destination_type(self.type) self.options.set_schema(schema) return self.destination.notify(alert, query, user, new_state, app, host, self.options)
# Update alert subscription fields migrate( migrator.add_column('alert_subscriptions', 'destination_id', AlertSubscription.destination) ) try: org = Organization.get_by_slug('default') user = User.select().where(User.org==org, peewee.SQL("%s = ANY(groups)", org.admin_group.id)).get() except Exception: print "!!! Warning: failed finding default organization or admin user, won't migrate Webhook/HipChat alert subscriptions." exit() if settings.WEBHOOK_ENDPOINT: # Have all existing alerts send to webhook if already configured schema = get_configuration_schema_for_destination_type('webhook') conf = {'url': settings.WEBHOOK_ENDPOINT} if settings.WEBHOOK_USERNAME: conf['username'] = settings.WEBHOOK_USERNAME conf['password'] = settings.WEBHOOK_PASSWORD options = ConfigurationContainer(conf, schema) webhook = NotificationDestination.create( org=org, user=user, name="Webhook", type="webhook", options=options ) for alert in Alert.select():
# Update alert subscription fields migrate( migrator.add_column('alert_subscriptions', 'destination_id', AlertSubscription.destination) ) try: org = Organization.get_by_slug('default') user = User.select().where(User.org==org, peewee.SQL("%s = ANY(groups)", org.admin_group.id)).get() except Exception: print("!!! Warning: failed finding default organization or admin user, won't migrate Webhook/HipChat alert subscriptions.") exit() if WEBHOOK_ENDPOINT: # Have all existing alerts send to webhook if already configured schema = get_configuration_schema_for_destination_type('webhook') conf = {'url': WEBHOOK_ENDPOINT} if WEBHOOK_USERNAME: conf['username'] = WEBHOOK_USERNAME conf['password'] = WEBHOOK_PASSWORD options = ConfigurationContainer(conf, schema) webhook = NotificationDestination.create( org=org, user=user, name="Webhook", type="webhook", options=options ) for alert in Alert.select():