refactor(monitors): extract applyTransition and add passive monitor model fields
This commit is contained in:
@@ -7,12 +7,21 @@ import (
|
||||
)
|
||||
|
||||
const (
|
||||
MonitorHTTP = "http"
|
||||
MonitorTCP = "tcp"
|
||||
MonitorICMP = "icmp"
|
||||
MonitorTLS = "tls"
|
||||
MonitorHTTP = "http"
|
||||
MonitorTCP = "tcp"
|
||||
MonitorICMP = "icmp"
|
||||
MonitorTLS = "tls"
|
||||
MonitorMetric = "metric"
|
||||
MonitorHeartbeat = "heartbeat"
|
||||
)
|
||||
|
||||
// IsPassiveMonitor reports whether a monitor type is evaluated from data that
|
||||
// arrives (a ping, an agent report) rather than by running a check. Passive
|
||||
// monitors are never handed to monitorsched or to an agent.
|
||||
func IsPassiveMonitor(t string) bool {
|
||||
return t == MonitorMetric || t == MonitorHeartbeat
|
||||
}
|
||||
|
||||
const (
|
||||
StatusUp = "up"
|
||||
StatusDown = "down"
|
||||
@@ -38,6 +47,14 @@ type MonitorTarget struct {
|
||||
Keyword string `bson:"keyword,omitempty" json:"keyword,omitempty"`
|
||||
TLSWarnDays int `bson:"tls_warn_days,omitempty" json:"tls_warn_days,omitempty"`
|
||||
Insecure bool `bson:"insecure,omitempty" json:"insecure,omitempty"`
|
||||
// Metric monitors.
|
||||
Selector map[string]string `bson:"selector,omitempty" json:"selector,omitempty"`
|
||||
Metric string `bson:"metric,omitempty" json:"metric,omitempty"`
|
||||
Threshold float64 `bson:"threshold,omitempty" json:"threshold,omitempty"`
|
||||
Mount string `bson:"mount,omitempty" json:"mount,omitempty"`
|
||||
// Heartbeat monitors.
|
||||
PeriodSec int `bson:"period_sec,omitempty" json:"period_sec,omitempty"`
|
||||
GraceSec int `bson:"grace_sec,omitempty" json:"grace_sec,omitempty"`
|
||||
}
|
||||
|
||||
type MonitorState struct {
|
||||
@@ -48,6 +65,8 @@ type MonitorState struct {
|
||||
CertExpiryAt *time.Time `bson:"cert_expiry_at,omitempty" json:"cert_expiry_at,omitempty"`
|
||||
Fails int `bson:"fails" json:"fails"`
|
||||
LastNotifiedAt *time.Time `bson:"last_notified_at,omitempty" json:"last_notified_at,omitempty"`
|
||||
LastPingAt *time.Time `bson:"last_ping_at,omitempty" json:"last_ping_at,omitempty"`
|
||||
StartedAt *time.Time `bson:"started_at,omitempty" json:"started_at,omitempty"`
|
||||
}
|
||||
|
||||
type Monitor struct {
|
||||
@@ -68,6 +87,11 @@ type Monitor struct {
|
||||
ChannelIDs []string `bson:"channel_ids,omitempty" json:"channel_ids,omitempty"`
|
||||
State MonitorState `bson:"state" json:"state"`
|
||||
CreatedAt time.Time `bson:"created_at" json:"created_at"`
|
||||
// ForSec is how long a metric condition must hold before a server is down.
|
||||
ForSec int `bson:"for_sec,omitempty" json:"for_sec,omitempty"`
|
||||
// HeartbeatTokenHash is the SHA-256 of the ping token. The token itself is
|
||||
// shown once, on create or rotate, and never stored.
|
||||
HeartbeatTokenHash string `bson:"heartbeat_token_hash,omitempty" json:"-"`
|
||||
}
|
||||
|
||||
type Incident struct {
|
||||
@@ -77,6 +101,22 @@ type Incident struct {
|
||||
StartedAt time.Time `bson:"started_at" json:"started_at"`
|
||||
ResolvedAt *time.Time `bson:"resolved_at,omitempty" json:"resolved_at,omitempty"`
|
||||
Cause string `bson:"cause,omitempty" json:"cause,omitempty"`
|
||||
// ServerID is set only for metric monitors, which keep one incident per
|
||||
// breaching server.
|
||||
ServerID string `bson:"server_id,omitempty" json:"server_id,omitempty"`
|
||||
}
|
||||
|
||||
// MonitorServerState is one metric monitor's view of one matching server.
|
||||
type MonitorServerState struct {
|
||||
InstanceID string `bson:"instance_id" json:"instance_id"`
|
||||
MonitorID string `bson:"monitor_id" json:"monitor_id"`
|
||||
ServerID string `bson:"server_id" json:"server_id"`
|
||||
Hostname string `bson:"-" json:"hostname,omitempty"`
|
||||
Status string `bson:"status" json:"status"`
|
||||
BreachSince *time.Time `bson:"breach_since,omitempty" json:"breach_since,omitempty"`
|
||||
Value float64 `bson:"value" json:"value"`
|
||||
Message string `bson:"message,omitempty" json:"message,omitempty"`
|
||||
UpdatedAt time.Time `bson:"updated_at" json:"updated_at"`
|
||||
}
|
||||
|
||||
// MonitorSample is one check result, kept only long enough to draw the
|
||||
|
||||
@@ -48,6 +48,8 @@ type Inventory struct {
|
||||
// BootTime is the host's last reported boot time, stored on every report
|
||||
// that carries one so a patch reboot can be proven by a changed boot.
|
||||
BootTime *time.Time `bson:"boot_time,omitempty" json:"boot_time,omitempty"`
|
||||
// RebootRequiredSince is when the host first reported a pending reboot.
|
||||
RebootRequiredSince *time.Time `bson:"reboot_required_since,omitempty" json:"reboot_required_since,omitempty"`
|
||||
}
|
||||
|
||||
type Server struct {
|
||||
|
||||
Reference in New Issue
Block a user