sched

package
v0.0.0-...-8d97d4a Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 29, 2024 License: MIT Imports: 45 Imported by: 18

Documentation

Index

Constants

This section is empty.

Variables

View Source
var DefaultClient *http.Client

DefaultClient is the default http client for requests made from templates. It is configured in cmd/bosun/main.go

View Source
var DefaultSched = &Schedule{}

Functions

func Autostyle

func Autostyle(i int) chart.Style

Autostyle styles a chart series.

func Close

func Close(reload bool)

func Load

func Load(systemConf conf.SystemConfProvider, ruleConf conf.RuleConfProvider, dataAccess database.DataAccess, annotate backend.Backend, skipLast, quiet bool) error

Load loads a configuration into the default schedule.

func NewIncident

func NewIncident(ak models.AlertKey) *models.IncidentState

func Reset

func Reset()

func Run

func Run() error

Run runs the default schedule.

Types

type Battery

type Battery struct {
	Status            string
	StatusLastUpdated int64
}

type BoardPowerReading

type BoardPowerReading struct {
	Watts            int64
	WattsLastUpdated int64
}

type CDPCacheEntries

type CDPCacheEntries []CDPCacheEntry

type CDPCacheEntry

type CDPCacheEntry struct {
	DeviceID   string
	DevicePort string
}

Cisco Discovery Protocol

type ChassisComponent

type ChassisComponent struct {
	Status            string
	StatusLastUpdated int64
}

type Context

type Context struct {
	*models.IncidentState
	Alert   *conf.Alert
	IsEmail bool
	Errors  []string

	Attachments []*models.Attachment
	ElasticHost string
	// contains filtered or unexported fields
}

func (*Context) Ack

func (c *Context) Ack() string

Ack returns the URL to acknowledge an alert.

func (c *Context) AzureResourceLink(prefix, rType, rsg, name string) (link string)

AzureResourceLink create a link to Azure's Portal for the resource (https://portal.azure.com) given the subscription identifer (bosun expression prefix), as well as the resource type, group, and name. It uses the azrt expression function under the hood

func (*Context) AzureResourceTags

func (c *Context) AzureResourceTags(prefix, rType, rsg, name string) map[string]string

AzureResourceTags returns the Azure tags associated with the resource as a map

func (*Context) ESQuery

func (c *Context) ESQuery(indexRoot expr.ESIndexer, filter expr.ESQuery, sduration, eduration string, size int) interface{}

func (*Context) ESQueryAll

func (c *Context) ESQueryAll(indexRoot expr.ESIndexer, filter expr.ESQuery, sduration, eduration string, size int) interface{}

func (*Context) Eval

func (c *Context) Eval(v interface{}) interface{}

Eval takes a result or an expression which it evaluates to a result. It returns a value with tags corresponding to the context's tags. If no such result is found, the first result with nil tags is returned. If no such result is found, nil is returned.

func (*Context) EvalAll

func (c *Context) EvalAll(v interface{}) interface{}

EvalAll returns the executed expression (or the given result as is).

func (*Context) Expr

func (c *Context) Expr(v string) string

Expr takes an expression in the form of a string, changes the tags to match the context of the alert, and returns a link to the expression page.

func (*Context) Get

func (c *Context) Get(name string) interface{}

func (*Context) GetIncidentState

func (c *Context) GetIncidentState(id int64) *models.IncidentState

GetIncidentState returns an IncidentState so users can include information about previous or other Incidents in alert notifications

func (*Context) GetMeta

func (c *Context) GetMeta(metric, name string, v interface{}) interface{}

GetMeta fetches either metric metadata (if a metric name is provided) or metadata about a tagset key by name

func (*Context) Graph

func (c *Context) Graph(v interface{}, args ...string) interface{}

Graph returns an SVG for the given result (or expression, for which it gets the result) with same tags as the context's tags.

func (*Context) GraphAll

func (c *Context) GraphAll(v interface{}, args ...string) interface{}

GraphAll returns an SVG for the given result (or expression, for which it gets the result).

func (c *Context) GraphLink(v string) string

GraphLink takes an expression in the form of a string, and returns a link to the expression page's graph tab with the time set.

func (*Context) HTTPGet

func (c *Context) HTTPGet(url string) string

func (*Context) HTTPGetJSON

func (c *Context) HTTPGetJSON(url string) *jsonq.JsonQuery

func (*Context) HTTPPost

func (c *Context) HTTPPost(url, bodyType, data string) string

func (*Context) HostView

func (c *Context) HostView(host string) string

HostView returns the URL to the host view page.

func (*Context) Incident

func (c *Context) Incident() string

func (*Context) Last

func (c *Context) Last() interface{}

Hack so template can read IncidentId off of event.

func (*Context) LastError

func (c *Context) LastError() string

LastError gets the most recent error string for the context's Error slice or returns an empty string if the error slice is empty

func (*Context) LeftJoin

func (c *Context) LeftJoin(v ...interface{}) (interface{}, error)

LeftJoin takes slices of results and expressions for which it gets the slices of results. Then it joins the 2nd and higher slice of results onto the first slice of results. Joining is performed by group: a group that includes all tags (with same values) of the first group is a match.

func (*Context) Lookup

func (c *Context) Lookup(table, key string) string

Lookup returns the value for a key in the lookup table for the context's tagset. the returned string may be the representation of an error

func (*Context) LookupAll

func (c *Context) LookupAll(table, key string, group interface{}) string

func (*Context) Rule

func (c *Context) Rule() string

func (*Context) Set

func (c *Context) Set(name string, value interface{}) string

func (*Context) Shorten

func (c *Context) Shorten(link string) string

Shorten uses Bosun's url shortner service to create a shortlink for the given url

func (*Context) SlackAttachment

func (c *Context) SlackAttachment() *slack.Attachment

SlackAttachment creates a new SlackAttachment with fields initalized from the IncidentState.

func (*Context) UseElastic

func (c *Context) UseElastic(host string) interface{}

type Controller

type Controller struct {
	Status            string
	StatusLastUpdated int64
	metadata.HWControllerMeta
}

type Disk

type Disk struct {
	UsedBytes        int64
	TotalBytes       int64
	Label            string `json:",omitempty"`
	StatsLastUpdated int64
}

type EpochAction

type EpochAction struct {
	User    string
	Message string
	Time    int64
	Type    models.ActionType
}

func MakeEpochAction

func MakeEpochAction(a models.Action) EpochAction

type EventSummary

type EventSummary struct {
	Status models.Status
	Time   int64
}

func MakeEventSummary

func MakeEventSummary(e models.Event) (EventSummary, bool)

EventSummary is like a models.Event but strips the Results and Unevaluated

type Hardware

type Hardware struct {
	Memory            map[string]*MemoryModule     `json:",omitempty"`
	ChassisComponents map[string]*ChassisComponent `json:",omitempty"`
	Storage           struct {
		Controllers   map[string]*Controller   `json:",omitempty"`
		PhysicalDisks map[string]*PhysicalDisk `json:",omitempty"`
		VirtualDisks  map[string]*VirtualDisk  `json:",omitempty"`
		Batteries     map[string]*Battery
	}
	Temps             map[string]*Temp
	PowerSupplies     map[string]*PowerSupply `json:",omitempty"`
	BoardPowerReading *BoardPowerReading
}

type HostData

type HostData struct {
	CPU struct {
		Logical          int64 `json:",omitempty"`
		Physical         int64 `json:",omitempty"`
		PercentUsed      float64
		StatsLastUpdated int64
		Processors       map[string]string `json:",omitempty"`
	}
	ICMPData      map[string]*ICMPData
	Disks         map[string]*Disk
	OpenIncidents []IncidentStatus
	Interfaces    map[string]*HostInterface
	UptimeSeconds int64     `json:",omitempty"`
	Manufacturer  string    `json:",omitempty"`
	Hardware      *Hardware `json:",omitempty"`
	Memory        struct {
		TotalBytes       float64
		UsedBytes        float64
		StatsLastUpdated int64
	}
	Processes map[string]*Process       `json:",omitempty"`
	Services  map[string]*ServiceStatus `json:",omitempty"`
	Model     string                    `json:",omitempty"`
	Name      string                    `json:",omitempty"`
	OS        struct {
		Caption string `json:",omitempty"`
		Version string `json:",omitempty"`
	}
	SerialNumber string   `json:",omitempty"`
	VM           *VM      `json:",omitempty"`
	Guests       []string `json:",omitempty"`
}

func (*HostData) Clean

func (hd *HostData) Clean()

Clean sets certain maps to nil so they don't get marshalled in JSON The logic is to remove ones that monitored devices might lack, such as hardware information

type HostInterface

type HostInterface struct {
	Description      string          `json:",omitempty"`
	IPAddresses      []string        `json:",omitempty"`
	RemoteMacs       []string        `json:",omitempty"`
	CDPCacheEntries  CDPCacheEntries `json:",omitempty"`
	Inbps            int64
	LinkSpeed        int64  `json:",omitempty"`
	MAC              string `json:",omitempty"`
	Master           string `json:",omitempty"`
	Name             string `json:",omitempty"`
	Outbps           int64
	StatsLastUpdated int64
	Type             string
}

type ICMPData

type ICMPData struct {
	TimedOut               bool
	TimedOutLastUpdated    int64
	DNSResolved            bool
	DNSResolvedLastUpdated int64
	RTTMS                  float64
	RTTLastUpdated         int64
}

type IncidentStatus

type IncidentStatus struct {
	IncidentID         int64
	Active             bool
	AlertKey           models.AlertKey
	Status             models.Status
	StatusTime         int64
	Subject            string
	Silenced           bool
	LastAbnormalStatus models.Status
	LastAbnormalTime   models.Epoch
	NeedsAck           bool
}

type IncidentSummaryView

type IncidentSummaryView struct {
	Id                     int64
	Subject                string
	Start                  int64
	AlertName              string
	Tags                   opentsdb.TagSet
	TagsString             string
	CurrentStatus          models.Status
	WorstStatus            models.Status
	LastAbnormalStatus     models.Status
	LastAbnormalTime       models.Epoch
	Unevaluated            bool
	NeedAck                bool
	Silenced               bool
	Actions                []EpochAction
	Events                 []EventSummary
	WarnNotificationChains [][]string
	CritNotificationChains [][]string
	LastStatusTime         int64
}

func (IncidentSummaryView) Ask

func (is IncidentSummaryView) Ask(filter string) (bool, error)

type IncidentWithTemplates

type IncidentWithTemplates struct {
	*models.IncidentState
	*models.RenderedTemplates
}

type MemoryModule

type MemoryModule struct {
	// Maybe this should be a bool but that might be limiting
	Status            string
	StatusLastUpdated int64
	Size              string
}

type PhysicalDisk

type PhysicalDisk struct {
	Status            string
	StatusLastUpdated int64
	metadata.HWDiskMeta
}

type PowerSupply

type PowerSupply struct {
	Status                     string
	StatusLastUpdated          int64
	Amps                       float64
	AmpsLastUpdated            int64
	Volts                      float64
	VoltsLastUpdated           int64
	metadata.HWPowerSupplyMeta //Should be renamed to Meta
}

type Process

type Process struct {
	CPUPercentUsed              float64
	CPUPercentLastUpdated       int64
	UsedRealBytes               int64
	UsedRealBytesLastUpdated    int64
	UsedVirtualBytes            int64
	UsedVirtualBytesLastUpdated int64
	Count                       int64
	CountLastUpdated            int64
}

type RunHistory

type RunHistory struct {
	Cache    *cache.Cache
	Start    time.Time
	Backends *expr.Backends
	Events   map[models.AlertKey]*models.Event
	// contains filtered or unexported fields
}

func (*RunHistory) AtTime

func (rh *RunHistory) AtTime(t time.Time) *RunHistory

AtTime creates a new RunHistory starting at t with the same context and events as rh.

type Schedule

type Schedule struct {
	RuleConf   conf.RuleConfProvider
	SystemConf conf.SystemConfProvider

	Search *search.Search

	LastCheck time.Time

	DataAccess database.DataAccess
	// contains filtered or unexported fields
}

func (*Schedule) ActionByAlertKey

func (s *Schedule) ActionByAlertKey(user, message string, t models.ActionType, at *time.Time, ak models.AlertKey) error

func (*Schedule) ActionByIncidentId

func (s *Schedule) ActionByIncidentId(user, message string, t models.ActionType, at *time.Time, id int64) (models.AlertKey, error)

func (*Schedule) ActionNotify

func (s *Schedule) ActionNotify(at models.ActionType, user, message string, aks []models.AlertKey) error

func (*Schedule) AddSilence

func (s *Schedule) AddSilence(start, end time.Time, alert, tagList string, forget, confirm bool, edit, user, message string) (map[models.AlertKey]bool, error)

func (*Schedule) AlertSuccessful

func (s *Schedule) AlertSuccessful(name string) bool

func (*Schedule) CheckAlert

func (s *Schedule) CheckAlert(T miniprofiler.Timer, r *RunHistory, a *conf.Alert) (cancelled bool)

func (*Schedule) CheckExpr

func (s *Schedule) CheckExpr(T miniprofiler.Timer, rh *RunHistory, a *conf.Alert, e *expr.Expr, checkStatus models.Status, ignore models.AlertKeys) (alerts models.AlertKeys, err error, cancelled bool)

func (*Schedule) CheckNotifications

func (s *Schedule) CheckNotifications() time.Time

CheckNotifications processes past notification events. It returns the next time a notification is needed.

func (*Schedule) ClearErrors

func (s *Schedule) ClearErrors(alert string) error

func (*Schedule) ClearSilence

func (s *Schedule) ClearSilence(id string) error

func (*Schedule) Close

func (s *Schedule) Close(reload bool)

func (*Schedule) CollectStates

func (s *Schedule) CollectStates()

CollectStates sends various state information to bosun with collect.

func (*Schedule) Data

func (s *Schedule) Data(rh *RunHistory, st *models.IncidentState, a *conf.Alert, isEmail bool) *Context

func (*Schedule) DeleteMetadata

func (s *Schedule) DeleteMetadata(tags opentsdb.TagSet, name string) error

func (*Schedule) ExecuteAll

func (s *Schedule) ExecuteAll(rh *RunHistory, a *conf.Alert, st *models.IncidentState, recordTimes bool) (*models.RenderedTemplates, []error)

func (*Schedule) ExecuteBadTemplate

func (s *Schedule) ExecuteBadTemplate(errs []error, rh *RunHistory, a *conf.Alert, st *models.IncidentState) (subject, body string, err error)

func (*Schedule) ExecuteBody

func (s *Schedule) ExecuteBody(rh *RunHistory, a *conf.Alert, st *models.IncidentState, isEmail bool) (string, []*models.Attachment, error)

func (*Schedule) ExecuteSubject

func (s *Schedule) ExecuteSubject(rh *RunHistory, a *conf.Alert, st *models.IncidentState, isEmail bool) (string, error)

func (*Schedule) ExprGraph

func (s *Schedule) ExprGraph(t miniprofiler.Timer, unit string, res []*expr.Result) (chart.Chart, error)

func (*Schedule) ExprPNG

func (s *Schedule) ExprPNG(t miniprofiler.Timer, w io.Writer, width, height int, unit string, res []*expr.Result) error

func (*Schedule) ExprSVG

func (s *Schedule) ExprSVG(t miniprofiler.Timer, w io.Writer, width, height int, unit string, res []*expr.Result) error

func (*Schedule) GetCheckFrequency

func (s *Schedule) GetCheckFrequency(alertName string) (time.Duration, error)

GetCheckFrequency returns the duration between checks for the named alert. If the alert does not exist an error is returned.

func (*Schedule) GetLockStatus

func (s *Schedule) GetLockStatus() (holder string, since time.Time)

func (*Schedule) GetMetadata

func (s *Schedule) GetMetadata(metric string, subset opentsdb.TagSet) ([]metadata.Metasend, error)

func (*Schedule) GetOpenStates

func (s *Schedule) GetOpenStates() (States, error)

func (*Schedule) GetQuiet

func (s *Schedule) GetQuiet() bool

func (*Schedule) GetSilence

func (s *Schedule) GetSilence(T miniprofiler.Timer, ak models.AlertKey) *models.Silence

func (*Schedule) GetUnknownAndUnevaluatedAlertKeys

func (s *Schedule) GetUnknownAndUnevaluatedAlertKeys(alert string) (unknown, uneval []models.AlertKey)

func (*Schedule) Host

func (s *Schedule) Host(filter string) (map[string]*HostData, error)

func (*Schedule) Init

func (s *Schedule) Init(name string, systemConf conf.SystemConfProvider, ruleConf conf.RuleConfProvider, dataAccess database.DataAccess, annotate backend.Backend, skipLast, quiet bool) error

func (*Schedule) Lock

func (s *Schedule) Lock(method string)

func (*Schedule) MarshalGroups

func (s *Schedule) MarshalGroups(T miniprofiler.Timer, filter string) (*StateGroups, error)

func (*Schedule) MetadataMetrics

func (s *Schedule) MetadataMetrics(metric string) (*database.MetricMetadata, error)

func (*Schedule) NewRunHistory

func (s *Schedule) NewRunHistory(start time.Time, cache *cache.Cache) *RunHistory

func (*Schedule) Notify

Notify puts a rendered notification in the schedule's pendingNotifications queue

func (*Schedule) PutMetadata

func (s *Schedule) PutMetadata(k metadata.Metakey, v interface{}) error

func (*Schedule) QueueNotification

func (s *Schedule) QueueNotification(ak models.AlertKey, n *conf.Notification, time time.Time) error

QueueNotification persists a notification to the datastore to be sent in the future. This happens when there are notification chains or an alert is unevaluated due to a dependency.

func (*Schedule) Reset

func (s *Schedule) Reset()

func (*Schedule) Run

func (s *Schedule) Run() error

Run should be called once (and only once) to start all schedule activity.

func (*Schedule) RunHistory

func (s *Schedule) RunHistory(r *RunHistory)

RunHistory processes an event history and triggers notifications if needed.

func (*Schedule) Silenced

func (s *Schedule) Silenced() SilenceTester

Silenced returns a function that will determine if the given alert key is silenced at the current time. A function is returned to avoid needing to enumerate all alert keys unneccesarily.

func (*Schedule) Unlock

func (s *Schedule) Unlock()

type ServiceStatus

type ServiceStatus struct {
	Running            bool
	RunningLastUpdated int64
}

type SilenceTester

type SilenceTester func(models.AlertKey) *models.Silence

type StateGroup

type StateGroup struct {
	Active        bool `json:",omitempty"`
	Status        models.Status
	CurrentStatus models.Status
	Silenced      bool
	IsError       bool                  `json:",omitempty"`
	Subject       string                `json:",omitempty"`
	Alert         string                `json:",omitempty"`
	AlertKey      models.AlertKey       `json:",omitempty"`
	Ago           string                `json:",omitempty"`
	State         *models.IncidentState `json:",omitempty"`
	Children      []*StateGroup         `json:",omitempty"`
}

type StateGroups

type StateGroups struct {
	Groups struct {
		NeedAck      []*StateGroup `json:",omitempty"`
		Acknowledged []*StateGroup `json:",omitempty"`
	}
	TimeAndDate                   []int
	FailingAlerts, UnclosedErrors int
}

type StateTuple

type StateTuple struct {
	NeedAck       bool
	Active        bool
	Status        models.Status
	CurrentStatus models.Status
	Silenced      bool
}

type States

type States map[models.AlertKey]*models.IncidentState

func (States) GroupSets

func (states States) GroupSets(minGroup int) map[string]models.AlertKeys

GroupSets returns slices of TagSets, grouped by most common ancestor. Those with no shared ancestor are grouped by alert name.

func (States) GroupStates

func (states States) GroupStates(silenced SilenceTester) map[StateTuple]States

GroupStates groups by NeedAck, Active, Status, and Silenced.

type Temp

type Temp struct {
	Celsius            float64
	Status             string
	StatusLastUpdated  int64
	CelsiusLastUpdated int64
}

type VM

type VM struct {
	Host                  string `json:",omitempty"`
	PowerState            string `json:",omitempty"`
	PowerStateLastUpdated int64  `json:",omitempty"`
}

type VirtualDisk

type VirtualDisk struct {
	Status            string
	StatusLastUpdated int64
}

Directories

Path Synopsis
Package slack is for creating slack notifications inside of Bosun templates
Package slack is for creating slack notifications inside of Bosun templates

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL