1package pagerduty 2 3import ( 4 "bytes" 5 "encoding/json" 6 "fmt" 7 "net/http" 8) 9 10const eventEndPoint = "https://events.pagerduty.com/generic/2010-04-15/create_event.json" 11 12// Event stores data for problem reporting, acknowledgement, and resolution. 13type Event struct { 14 ServiceKey string `json:"service_key"` 15 Type string `json:"event_type"` 16 IncidentKey string `json:"incident_key,omitempty"` 17 Description string `json:"description"` 18 Client string `json:"client,omitempty"` 19 ClientURL string `json:"client_url,omitempty"` 20 Details interface{} `json:"details,omitempty"` 21 Contexts []interface{} `json:"contexts,omitempty"` 22} 23 24// EventResponse is the data returned from the CreateEvent API endpoint. 25type EventResponse struct { 26 Status string `json:"status"` 27 Message string `json:"message"` 28 IncidentKey string `json:"incident_key"` 29} 30 31// CreateEvent sends PagerDuty an event to trigger, acknowledge, or resolve a 32// problem. If you need to provide a custom HTTP client, please use 33// CreateEventWithHTTPClient. 34func CreateEvent(e Event) (*EventResponse, error) { 35 return CreateEventWithHTTPClient(e, defaultHTTPClient) 36} 37 38// CreateEventWithHTTPClient sends PagerDuty an event to trigger, acknowledge, 39// or resolve a problem. This function accepts a custom HTTP Client, if the 40// default one used by this package doesn't fit your needs. If you don't need a 41// custom HTTP client, please use CreateEvent instead. 42func CreateEventWithHTTPClient(e Event, client HTTPClient) (*EventResponse, error) { 43 data, err := json.Marshal(e) 44 if err != nil { 45 return nil, err 46 } 47 req, _ := http.NewRequest("POST", eventEndPoint, bytes.NewBuffer(data)) 48 req.Header.Set("Content-Type", "application/json") 49 resp, err := client.Do(req) 50 if err != nil { 51 return nil, err 52 } 53 defer resp.Body.Close() 54 if resp.StatusCode != http.StatusOK { 55 return nil, fmt.Errorf("HTTP Status Code: %d", resp.StatusCode) 56 } 57 var eventResponse EventResponse 58 if err := json.NewDecoder(resp.Body).Decode(&eventResponse); err != nil { 59 return nil, err 60 } 61 return &eventResponse, nil 62} 63