def send_trigger(self, data): # expected payload: https://v2.developer.pagerduty.com/docs/send-an-event-events-api-v2 # for now, only construct the payload if data is an event if isinstance(data, Event): source = data.transaction or data.culprit or "<unknown>" group = data.group level = data.get_tag("level") or "error" custom_details = serialize(data, None, ExternalEventSerializer()) summary = (data.message or data.title)[:1024] payload = { "routing_key": self.integration_key, "event_action": "trigger", "dedup_key": group.qualified_short_id, "payload": { "summary": summary, "severity": LEVEL_SEVERITY_MAP[level], "source": source, "component": group.project.slug, "custom_details": custom_details, }, "links": [{ "href": group.get_absolute_url( params={"referrer": "pagerduty_integration"}), "text": "Issue Details", }], } return self.post("/", data=payload)
def test_send_trigger(self, mock_request): event = self.store_event( data={ "event_id": "a" * 32, "message": "message", "timestamp": self.min_ago, "stacktrace": copy.deepcopy(DEFAULT_EVENT_DATA["stacktrace"]), }, project_id=self.project.id, ) group = event.group integration_key = self.service.integration_key client = self.installation.get_client(integration_key=integration_key) custom_details = serialize(event, None, ExternalEventSerializer()) client.send_trigger(event) data = { "routing_key": integration_key, "event_action": "trigger", "dedup_key": group.qualified_short_id, "payload": { "summary": event.message, "severity": "error", "source": event.transaction or event.culprit, "component": self.project.slug, "custom_details": custom_details, }, "links": [{ "href": group.get_absolute_url( params={"referrer": "pagerduty_integration"}), "text": "View Sentry Issue Details", }], } mock_request.assert_called_once_with("POST", "/", data=data)