114 lines
3.6 KiB
Go
114 lines
3.6 KiB
Go
|
/*
|
||
|
* Datadog API for Go
|
||
|
*
|
||
|
* Please see the included LICENSE file for licensing information.
|
||
|
*
|
||
|
* Copyright 2013 by authors and contributors.
|
||
|
*/
|
||
|
|
||
|
package datadog
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
)
|
||
|
|
||
|
type ThresholdCount struct {
|
||
|
Ok json.Number `json:"ok,omitempty"`
|
||
|
Critical json.Number `json:"critical,omitempty"`
|
||
|
Warning json.Number `json:"warning,omitempty"`
|
||
|
}
|
||
|
|
||
|
type Options struct {
|
||
|
NoDataTimeframe int `json:"no_data_timeframe,omitempty"`
|
||
|
NotifyAudit bool `json:"notify_audit,omitempty"`
|
||
|
NotifyNoData bool `json:"notify_no_data,omitempty"`
|
||
|
RenotifyInterval int `json:"renotify_interval,omitempty"`
|
||
|
Silenced map[string]int `json:"silenced,omitempty"`
|
||
|
TimeoutH int `json:"timeout_h,omitempty"`
|
||
|
EscalationMessage string `json:"escalation_message,omitempty"`
|
||
|
Thresholds ThresholdCount `json:"thresholds,omitempty"`
|
||
|
IncludeTags bool `json:"include_tags,omitempty"`
|
||
|
}
|
||
|
|
||
|
//Monitors allow you to watch a metric or check that you care about,
|
||
|
//notifying your team when some defined threshold is exceeded.
|
||
|
type Monitor struct {
|
||
|
Id int `json:"id,omitempty"`
|
||
|
Type string `json:"type,omitempty"`
|
||
|
Query string `json:"query,omitempty"`
|
||
|
Name string `json:"name,omitempty"`
|
||
|
Message string `json:"message,omitempty"`
|
||
|
Tags []string `json:"tags,omitempty"`
|
||
|
Options Options `json:"options,omitempty"`
|
||
|
}
|
||
|
|
||
|
// reqMonitors receives a slice of all monitors
|
||
|
type reqMonitors struct {
|
||
|
Monitors []Monitor `json:"monitors,omitempty"`
|
||
|
}
|
||
|
|
||
|
// Createmonitor adds a new monitor to the system. This returns a pointer to an
|
||
|
// monitor so you can pass that to Updatemonitor later if needed.
|
||
|
func (self *Client) CreateMonitor(monitor *Monitor) (*Monitor, error) {
|
||
|
var out Monitor
|
||
|
err := self.doJsonRequest("POST", "/v1/monitor", monitor, &out)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &out, nil
|
||
|
}
|
||
|
|
||
|
// Updatemonitor takes an monitor that was previously retrieved through some method
|
||
|
// and sends it back to the server.
|
||
|
func (self *Client) UpdateMonitor(monitor *Monitor) error {
|
||
|
return self.doJsonRequest("PUT", fmt.Sprintf("/v1/monitor/%d", monitor.Id),
|
||
|
monitor, nil)
|
||
|
}
|
||
|
|
||
|
// Getmonitor retrieves an monitor by identifier.
|
||
|
func (self *Client) GetMonitor(id int) (*Monitor, error) {
|
||
|
var out Monitor
|
||
|
err := self.doJsonRequest("GET", fmt.Sprintf("/v1/monitor/%d", id), nil, &out)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return &out, nil
|
||
|
}
|
||
|
|
||
|
// Deletemonitor removes an monitor from the system.
|
||
|
func (self *Client) DeleteMonitor(id int) error {
|
||
|
return self.doJsonRequest("DELETE", fmt.Sprintf("/v1/monitor/%d", id),
|
||
|
nil, nil)
|
||
|
}
|
||
|
|
||
|
// GetMonitors returns a slice of all monitors.
|
||
|
func (self *Client) GetMonitors() ([]Monitor, error) {
|
||
|
var out reqMonitors
|
||
|
err := self.doJsonRequest("GET", "/v1/monitor", nil, &out.Monitors)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
return out.Monitors, nil
|
||
|
}
|
||
|
|
||
|
// MuteMonitors turns off monitoring notifications.
|
||
|
func (self *Client) MuteMonitors() error {
|
||
|
return self.doJsonRequest("POST", "/v1/monitor/mute_all", nil, nil)
|
||
|
}
|
||
|
|
||
|
// UnmuteMonitors turns on monitoring notifications.
|
||
|
func (self *Client) UnmuteMonitors() error {
|
||
|
return self.doJsonRequest("POST", "/v1/monitor/unmute_all", nil, nil)
|
||
|
}
|
||
|
|
||
|
// MuteMonitor turns off monitoring notifications for a monitor.
|
||
|
func (self *Client) MuteMonitor(id int) error {
|
||
|
return self.doJsonRequest("POST", fmt.Sprintf("/v1/monitor/%d/mute", id), nil, nil)
|
||
|
}
|
||
|
|
||
|
// UnmuteMonitor turns on monitoring notifications for a monitor.
|
||
|
func (self *Client) UnmuteMonitor(id int) error {
|
||
|
return self.doJsonRequest("POST", fmt.Sprintf("/v1/monitor/%d/unmute", id), nil, nil)
|
||
|
}
|