2016-02-07 23:16:07 +01:00
|
|
|
/*
|
|
|
|
* Datadog API for Go
|
|
|
|
*
|
|
|
|
* Please see the included LICENSE file for licensing information.
|
|
|
|
*
|
|
|
|
* Copyright 2013 by authors and contributors.
|
|
|
|
*/
|
|
|
|
|
|
|
|
package datadog
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net/url"
|
|
|
|
"strconv"
|
|
|
|
)
|
|
|
|
|
|
|
|
// Event is a single event. If this is being used to post an event, then not
|
|
|
|
// all fields will be filled out.
|
|
|
|
type Event struct {
|
|
|
|
Id int `json:"id,omitempty"`
|
|
|
|
Title string `json:"title,omitempty"`
|
|
|
|
Text string `json:"text,omitempty"`
|
|
|
|
Time int `json:"date_happened,omitempty"` // UNIX time.
|
|
|
|
Priority string `json:"priority,omitempty"`
|
|
|
|
AlertType string `json:"alert_type,omitempty"`
|
|
|
|
Host string `json:"host,omitempty"`
|
|
|
|
Aggregation string `json:"aggregation_key,omitempty"`
|
2016-12-05 14:16:47 +01:00
|
|
|
SourceType string `json:"source_type_name,omitempty"`
|
2016-02-07 23:16:07 +01:00
|
|
|
Tags []string `json:"tags,omitempty"`
|
|
|
|
Url string `json:"url,omitempty"`
|
|
|
|
Resource string `json:"resource,omitempty"`
|
2016-12-05 14:16:47 +01:00
|
|
|
EventType string `json:"event_type,omitempty"`
|
2016-02-07 23:16:07 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
// reqGetEvent is the container for receiving a single event.
|
|
|
|
type reqGetEvent struct {
|
|
|
|
Event Event `json:"event,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// reqGetEvents is for returning many events.
|
|
|
|
type reqGetEvents struct {
|
|
|
|
Events []Event `json:"events,omitempty"`
|
|
|
|
}
|
|
|
|
|
|
|
|
// PostEvent takes as input an event and then posts it to the server.
|
|
|
|
func (self *Client) PostEvent(event *Event) (*Event, error) {
|
|
|
|
var out reqGetEvent
|
|
|
|
err := self.doJsonRequest("POST", "/v1/events", event, &out)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &out.Event, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// GetEvent gets a single event given an identifier.
|
|
|
|
func (self *Client) GetEvent(id int) (*Event, error) {
|
|
|
|
var out reqGetEvent
|
|
|
|
err := self.doJsonRequest("GET", fmt.Sprintf("/v1/events/%d", id), nil, &out)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return &out.Event, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
// QueryEvents returns a slice of events from the query stream.
|
|
|
|
func (self *Client) GetEvents(start, end int,
|
|
|
|
priority, sources, tags string) ([]Event, error) {
|
|
|
|
// Since this is a GET request, we need to build a query string.
|
|
|
|
vals := url.Values{}
|
|
|
|
vals.Add("start", strconv.Itoa(start))
|
|
|
|
vals.Add("end", strconv.Itoa(end))
|
|
|
|
if priority != "" {
|
|
|
|
vals.Add("priority", priority)
|
|
|
|
}
|
|
|
|
if sources != "" {
|
|
|
|
vals.Add("sources", sources)
|
|
|
|
}
|
|
|
|
if tags != "" {
|
|
|
|
vals.Add("tags", tags)
|
|
|
|
}
|
|
|
|
|
|
|
|
// Now the request and response.
|
|
|
|
var out reqGetEvents
|
|
|
|
err := self.doJsonRequest("GET",
|
|
|
|
fmt.Sprintf("/v1/events?%s", vals.Encode()), nil, &out)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
return out.Events, nil
|
|
|
|
}
|