Source code for notifiers.providers.victorops

from ..core import Provider
from ..core import Response
from ..utils import requests


[docs]class VictorOps(Provider): """Send VictorOps webhook notifications""" base_url = "https://portal.victorops.com/ui/{ORGANIZATION_ID}/incidents" site_url = "https://portal.victorops.com/dash/{ORGANIZATION_ID}#/advanced/rest" name = "victorops" _required = { "required": [ "rest_url", "message_type", "entity_id", "entity_display_name", "message", ] } _schema = { "type": "object", "properties": { "rest_url": { "type": "string", "format": "uri", "title": "the REST URL to use with routing_key. create one in victorops `integrations` tab.", }, "message_type": { "type": "string", "title": "severity level can be: " "- critical or warning: Triggers an incident " "- acknowledgement: sends Acknowledgment to an incident " "- info: Creates a timeline event but doesn't trigger an incident " "- recovery or ok: Resolves an incident", "enum": [ "critical", "warning", "acknowledgement", "info", "recovery", "ok", ], }, "entity_id": { "type": "string", "title": "Unique id for the incident for aggregation ,Acknowledging, or resolving.", }, "entity_display_name": { "type": "string", "title": "Display Name in the UI and Notifications.", }, "message": { "type": "string", "title": "This is the description that will be posted in the incident.", }, "annotations": { "type": "object", "patternProperties": { "^vo_annotate.u.": {"type": "string"}, "^vo_annotate.s.": {"type": "string"}, "^vo_annotate.i.": {"type": "string"}, }, "minProperties": 1, "title": "annotations can be of three types: " "vo_annotate.u.{custom_name}, " "vo_annotate.s.{custom_name}, " "vo_annotate.i.{custom_name} .", "additionalProperties": False, }, "additional_keys": { "type": "object", "title": "any additional keys that can be passed in the body", }, }, "additionalProperties": False, } def _prepare_data(self, data: dict) -> dict: annotations = data.pop("annotations", {}) for annotation, value in annotations.items(): data[annotation] = value additional_keys = data.pop("additional_keys", {}) for additional_key, value in additional_keys.items(): data[additional_key] = value return data def _send_notification(self, data: dict) -> Response: url = data.pop("rest_url") response, errors = requests.post(url, json=data) return self.create_response(data, response, errors)