aeb17182b4
Signed-off-by: Emile Vauge <emile@vauge.com>
181 lines
6.1 KiB
Go
181 lines
6.1 KiB
Go
package monitor
|
|
|
|
// Job wraps an NS1 /monitoring/jobs resource
|
|
type Job struct {
|
|
ID string `json:"id,omitempty"`
|
|
|
|
// The id of the notification list to send notifications to.
|
|
NotifyListID string `json:"notify_list"`
|
|
|
|
// Type of monitor to be run.
|
|
// Available job types:
|
|
// - http: Do an HTTP request against a webserver
|
|
// - dns: Do a DNS lookup against a nameserver
|
|
// - tcp: Connect to a TCP port on a host
|
|
// - ping: Ping a host using ICMP packets
|
|
Type string `json:"job_type"`
|
|
|
|
// Configuration dictionary(key/vals depend on the jobs' type).
|
|
Config Config `json:"config"`
|
|
|
|
// The current status of the monitor.
|
|
Status map[string]*Status `json:"status,omitempty"`
|
|
|
|
// Rules for determining failure conditions.
|
|
Rules []*Rule `json:"rules,omitempty"`
|
|
|
|
// List of regions in which to run the monitor.
|
|
// eg, ["dal", "sin", "sjc", "lga", "ams"]
|
|
Regions []string `json:"regions"`
|
|
|
|
// Indicates if the job is active or temporarily disabled.
|
|
Active bool `json:"active"`
|
|
|
|
// Frequency(in seconds), at which to run the monitor.
|
|
Frequency int `json:"frequency"`
|
|
|
|
// The policy for determining the monitor's global status based
|
|
// on the status of the job in all regions.
|
|
// Available policies:
|
|
// - quorum: Status change when majority status
|
|
// - all: Status change only when all regions are in agreement
|
|
// - one: Status change if any region changes
|
|
Policy string `json:"policy"`
|
|
|
|
// Controls behavior of how the job is assigned to monitoring regions.
|
|
// Currently this must be fixed — indicating monitoring regions are explicitly chosen.
|
|
RegionScope string `json:"region_scope"`
|
|
|
|
// Freeform notes to be included in any notifications about this job,
|
|
// e.g., instructions for operators who will receive the notifications.
|
|
Notes string `json:"notes,omitempty"`
|
|
|
|
// A free-form display name for the monitoring job.
|
|
Name string `json:"name"`
|
|
|
|
// Time(in seconds) between repeat notifications of a failed job.
|
|
// Set to 0 to disable repeating notifications.
|
|
NotifyRepeat int `json:"notify_repeat"`
|
|
|
|
// If true, on any apparent state change, the job is quickly re-run after
|
|
// one second to confirm the state change before notification.
|
|
RapidRecheck bool `json:"rapid_recheck"`
|
|
|
|
// Time(in seconds) after a failure to wait before sending a notification.
|
|
NotifyDelay int `json:"notify_delay"`
|
|
|
|
// If true, notifications are sent for any regional failure (and failback if desired),
|
|
// in addition to global state notifications.
|
|
NotifyRegional bool `json:"notify_regional"`
|
|
|
|
// If true, a notification is sent when a job returns to an "up" state.
|
|
NotifyFailback bool `json:"notify_failback"`
|
|
}
|
|
|
|
// Activate a monitoring job.
|
|
func (j *Job) Activate() {
|
|
j.Active = true
|
|
|
|
}
|
|
|
|
// Deactivate a monitoring job.
|
|
func (j *Job) Deactivate() {
|
|
j.Active = false
|
|
}
|
|
|
|
// Result wraps an element of a JobType's "results" attribute
|
|
type Result struct {
|
|
Comparators []string `json:"comparators"`
|
|
Metric bool `json:"metric"`
|
|
Validator string `json:"validator"`
|
|
ShortDesc string `json:"shortdesc"`
|
|
Type string `json:"type"`
|
|
Desc string `json:"desc"`
|
|
}
|
|
|
|
// Status wraps an value of a Job's "status" attribute
|
|
type Status struct {
|
|
Since int `json:"since"`
|
|
Status string `json:"status"`
|
|
}
|
|
|
|
// StatusLog wraps an NS1 /monitoring/history resource
|
|
type StatusLog struct {
|
|
Job string `json:"job"`
|
|
Region string `json:"region"`
|
|
Status string `json:"status"`
|
|
Since int `json:"since"`
|
|
Until int `json:"until"`
|
|
}
|
|
|
|
// Rule wraps an element of a Job's "rules" attribute
|
|
type Rule struct {
|
|
Key string `json:"key"`
|
|
Value interface{} `json:"value"`
|
|
Comparison string `json:"comparison"`
|
|
}
|
|
|
|
// NewHTTPConfig constructs/returns a job configuration for HTTP type jobs.
|
|
// url is the URL to query. (Required)
|
|
// method is the HTTP method(valid methods are HEAD, GET, and POST).
|
|
// ua is the user agent text in the request header.
|
|
// auth is the authorization header to use in request.
|
|
// connTimeout is the timeout(in sec) to wait for query output.
|
|
func NewHTTPConfig(url, method, ua, auth string, connTimeout int) *Config {
|
|
return &Config{
|
|
"url": url, // Required
|
|
"method": method,
|
|
"user_agent": ua,
|
|
"auth": auth,
|
|
"connection_timeout": connTimeout,
|
|
}
|
|
|
|
}
|
|
|
|
// NewDNSConfig constructs/returns a job configuration for DNS type jobs.
|
|
// host is the IP address or hostname of the nameserver to query. (Required)
|
|
// domain name to query. (Required)
|
|
// port is the dns port to query on host.
|
|
// t is the type of the DNS record type to query.
|
|
// respTimeout is the timeout(in ms) after sending query to wait for the output.
|
|
func NewDNSConfig(host, domain string, port int, t string, respTimeout int) *Config {
|
|
return &Config{
|
|
"host": host, // Required
|
|
"domain": domain, // Required
|
|
"port": port,
|
|
"type": t,
|
|
"response_timeout": respTimeout,
|
|
}
|
|
}
|
|
|
|
// NewTCPConfig constructs/returns a job configuration for TCP type jobs.
|
|
// host is the IP address or hostname to connect to. (Required)
|
|
// port is the tcp port to connect to on host. (Required)
|
|
// connTimeout is the timeout(in ms) before giving up on trying to connect.
|
|
// respTimeout is the timeout(in sec) after connecting to wait for output.
|
|
// send is the string to send to the host upon connecting.
|
|
// ssl determines whether to attempt negotiating an SSL connection.
|
|
func NewTCPConfig(host string, port, connTimeout, respTimeout int, send string, ssl bool) *Config {
|
|
return &Config{
|
|
"host": host, // Required
|
|
"port": port, // Required
|
|
"connection_timeout": connTimeout,
|
|
"response_timeout": respTimeout,
|
|
"send": send,
|
|
"ssl": ssl,
|
|
}
|
|
}
|
|
|
|
// NewPINGConfig constructs/returns a job configuration for PING type jobs.
|
|
// host is the IP address or hostname to ping. (Required)
|
|
// timeout is the timeout(in ms) before marking the host as failed.
|
|
// count is the number of packets to send.
|
|
// interval is the minimum time(in ms) to wait between sending each packet.
|
|
func NewPINGConfig(host string, timeout, count, interval int) *Config {
|
|
return &Config{
|
|
"host": host, // Required
|
|
"timeout": timeout,
|
|
"count": count,
|
|
"interval": interval,
|
|
}
|
|
}
|