sched

package
v0.0.0-...-a19e79c Latest Latest
Warning

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

Go to latest
Published: Oct 6, 2015 License: MIT Imports: 50 Imported by: 0

Documentation

Index

Constants

View Source
const (
	Separator = filepath.Separator
)

Variables

View Source
var DefaultSched = &Schedule{}
View Source
var ErrBadPattern = errors.New("syntax error in pattern")

ErrBadPattern indicates a globbing pattern was malformed.

Functions

func Autostyle

func Autostyle(i int) chart.Style

Autostyle styles a chart series.

func Close

func Close()

func Load

func Load(c *conf.Conf) error

Load loads a configuration into the default schedule.

func Match

func Match(pattern, name string) (matched bool, err error)

Match returns true if name matches any of the patterns. The pattern syntax is:

pattern:
	{ term } [ '|' { term } '|' ... ]
term:
	'*'         matches any sequence of non-Separator characters
	'?'         matches any single non-Separator character
	'[' [ '^' ] { character-range } ']'
	            character class (must be non-empty)
	c           matches character c (c != '*', '?', '\\', '[')
	'\\' c      matches character c

character-range:
	c           matches character c (c != '\\', '-', ']')
	'\\' c      matches character c
	lo '-' hi   matches character c for lo <= c <= hi

Match requires pattern to match all of name, not just a substring. The only possible returned error is ErrBadPattern, when pattern is malformed.

func Run

func Run() error

Run runs the default schedule.

Types

type Action

type Action struct {
	User    string
	Message string
	Time    time.Time
	Type    ActionType
}

type ActionType

type ActionType int
const (
	ActionNone ActionType = iota
	ActionAcknowledge
	ActionClose
	ActionForget
)

func (ActionType) MarshalJSON

func (a ActionType) MarshalJSON() ([]byte, error)

func (ActionType) String

func (a ActionType) String() string

type AlertError

type AlertError struct {
	FirstTime, LastTime time.Time
	Count               int
	Message             string
}

type AlertStatus

type AlertStatus struct {
	Success bool
	Errors  []*AlertError
}

Alert Status is the current state of a single alert

type Context

type Context struct {
	*State
	Alert   *conf.Alert
	IsEmail bool

	Attachments []*conf.Attachment
	// contains filtered or unexported fields
}

func (*Context) Ack

func (c *Context) Ack() string

Ack returns the URL to acknowledge an alert.

func (*Context) Eval

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

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{}, error)

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) GetMeta

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

func (*Context) Graph

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

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{}, error)

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, error)

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) LSQuery

func (c *Context) LSQuery(index_root, filter, sduration, eduration string, size int) (interface{}, error)

func (*Context) LSQueryAll

func (c *Context) LSQueryAll(index_root, keystring, filter, sduration, eduration string, size int) (interface{}, error)

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, error)

Lookup returns the value for a key in the lookup table for the context's tagset.

func (*Context) LookupAll

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

func (*Context) Rule

func (c *Context) Rule() (string, error)

type Event

type Event struct {
	Warn, Crit  *Result
	Status      Status
	Time        time.Time
	Unevaluated bool
	IncidentId  uint64
}

type HostData

type HostData struct {
	CPU struct {
		Logical    int64             `json:",omitempty"`
		Physical   int64             `json:",omitempty"`
		Used       float64           `json:",omitempty"`
		Processors map[string]string `json:",omitempty"`
	}
	OpenIncidentIDs []IncidentStatus
	Interfaces      map[string]*HostInterface
	LastBoot        int64  `json:",omitempty"`
	LastUpdate      int64  `json:",omitempty"`
	Manufacturer    string `json:",omitempty"`
	Memory          struct {
		Modules map[string]string `json:",omitempty"`
		Total   int64             `json:",omitempty"`
		Used    int64             `json:",omitempty"`
	}
	Model string `json:",omitempty"`
	Name  string `json:",omitempty"`
	OS    struct {
		Caption string `json:",omitempty"`
		Version string `json:",omitempty"`
	}
	SerialNumber string `json:",omitempty"`
}

type HostInterface

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

type Incident

type Incident struct {
	Id       uint64
	Start    time.Time
	End      *time.Time
	AlertKey expr.AlertKey
}

type IncidentStatus

type IncidentStatus struct {
	IncidentID uint64
	AlertKey   expr.AlertKey
	Status     Status
	Subject    string
	Silenced   bool
}

type Result

type Result struct {
	*expr.Result
	Expr string
}

func (*Result) Copy

func (r *Result) Copy() *Result

type RunHistory

type RunHistory struct {
	Cache           *cache.Cache
	Start           time.Time
	Context         opentsdb.Context
	GraphiteContext graphite.Context
	InfluxConfig    client.Config
	Logstash        expr.LogstashElasticHosts
	Events          map[expr.AlertKey]*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.

func (*RunHistory) GetUnknownAndUnevaluatedAlertKeys

func (r *RunHistory) GetUnknownAndUnevaluatedAlertKeys(alert string) (unknown, uneval []expr.AlertKey)

type Schedule

type Schedule struct {
	Conf *conf.Conf

	Silence map[string]*Silence
	Group   map[time.Time]expr.AlertKeys

	Incidents map[uint64]*Incident
	Search    *search.Search

	AlertStatuses map[string]*AlertStatus

	//notifications we are currently tracking, potentially with future or repeated actions.
	Notifications map[expr.AlertKey]map[string]time.Time

	LastCheck time.Time

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

func (*Schedule) Action

func (s *Schedule) Action(user, message string, t ActionType, ak expr.AlertKey) error

func (*Schedule) ActionNotify

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

func (*Schedule) AddNotification

func (s *Schedule) AddNotification(ak expr.AlertKey, n *conf.Notification, started time.Time)

func (*Schedule) AddSilence

func (s *Schedule) AddSilence(start, end time.Time, alert, tagList string, forget, confirm bool, edit, user, message string) (map[expr.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)

func (*Schedule) CheckExpr

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

func (*Schedule) CheckNotifications

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

CheckNotifications processes past notification events. It returns the duration until the soonest notification triggers.

func (*Schedule) ClearErrorLine

func (s *Schedule) ClearErrorLine(alert string, startTime time.Time)

func (*Schedule) ClearSilence

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

func (*Schedule) Close

func (s *Schedule) Close()

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 *State, a *conf.Alert, isEmail bool) *Context

func (*Schedule) DeleteMetadata

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

func (*Schedule) ExecuteBadTemplate

func (s *Schedule) ExecuteBadTemplate(s_err, b_err error, rh *RunHistory, a *conf.Alert, st *State) (subject, body []byte, err error)

func (*Schedule) ExecuteBody

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

func (*Schedule) ExecuteSubject

func (s *Schedule) ExecuteSubject(rh *RunHistory, a *conf.Alert, st *State, isEmail bool) ([]byte, 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) GetErrorHistory

func (s *Schedule) GetErrorHistory() map[string]*AlertStatus

func (*Schedule) GetIncident

func (s *Schedule) GetIncident(id uint64) (*Incident, error)

func (*Schedule) GetIncidentEvents

func (s *Schedule) GetIncidentEvents(id uint64) (*Incident, []Event, []Action, error)

func (*Schedule) GetIncidents

func (s *Schedule) GetIncidents(alert string, from, to time.Time) []*Incident

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

func (*Schedule) GetOrCreateStatus

func (s *Schedule) GetOrCreateStatus(ak expr.AlertKey) *State

func (*Schedule) GetStateFileBackup

func (s *Schedule) GetStateFileBackup() ([]byte, error)

func (*Schedule) GetStatus

func (s *Schedule) GetStatus(ak expr.AlertKey) *State

Get a copy of the status for the specified alert key

func (*Schedule) Host

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

func (*Schedule) Init

func (s *Schedule) Init(c *conf.Conf) error

func (*Schedule) Load

func (s *Schedule) Load(c *conf.Conf) error

func (*Schedule) LoadTempConfig

func (s *Schedule) LoadTempConfig(hash string) (text string, err error)

Retreive the specified config text from state file.

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

func (s *Schedule) Notify(st *State, n *conf.Notification)

func (*Schedule) PingHosts

func (s *Schedule) PingHosts()

func (*Schedule) PutMetadata

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

func (*Schedule) RestoreState

func (s *Schedule) RestoreState() error

RestoreState restores notification and alert state from the file on disk.

func (*Schedule) Run

func (s *Schedule) Run() error

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

func (*Schedule) RunAlert

func (s *Schedule) RunAlert(a *conf.Alert)

func (*Schedule) RunHistory

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

RunHistory processes an event history and triggers notifications if needed.

func (*Schedule) SaveTempConfig

func (s *Schedule) SaveTempConfig(text string) (hash string, err error)

Saves the provided config text in state file for later access. Returns a hash of the file to be used as a retreival key.

func (*Schedule) SetStatus

func (s *Schedule) SetStatus(ak expr.AlertKey, st *State)

func (*Schedule) Silenced

func (s *Schedule) Silenced() map[expr.AlertKey]Silence

Silenced returns all currently silenced AlertKeys and the time they will be unsilenced.

func (*Schedule) Unlock

func (s *Schedule) Unlock()

type Silence

type Silence struct {
	Start, End time.Time
	Alert      string
	Tags       opentsdb.TagSet
	Forget     bool
	User       string
	Message    string
}

func (*Silence) ActiveAt

func (s *Silence) ActiveAt(now time.Time) bool

func (Silence) ID

func (s Silence) ID() string

func (*Silence) MarshalJSON

func (s *Silence) MarshalJSON() ([]byte, error)

func (*Silence) Matches

func (s *Silence) Matches(alert string, tags opentsdb.TagSet) bool

func (*Silence) Silenced

func (s *Silence) Silenced(now time.Time, alert string, tags opentsdb.TagSet) bool

type State

type State struct {
	*Result

	// Most recent last.
	History      []Event  `json:",omitempty"`
	Actions      []Action `json:",omitempty"`
	Touched      time.Time
	Alert        string // helper data since AlertKeys don't serialize to JSON well
	Tags         string // string representation of Group
	Group        opentsdb.TagSet
	Subject      string
	Body         string
	EmailBody    []byte             `json:"-"`
	EmailSubject []byte             `json:"-"`
	Attachments  []*conf.Attachment `json:"-"`
	NeedAck      bool
	Open         bool
	Forgotten    bool
	Unevaluated  bool
	LastLogTime  time.Time
}

func NewStatus

func NewStatus(ak expr.AlertKey) *State

func (*State) AbnormalEvent

func (s *State) AbnormalEvent() *Event

AbnormalEvent returns the most recent non-normal event, or nil if none found.

func (*State) AbnormalStatus

func (s *State) AbnormalStatus() Status

AbnormalStatus returns the most recent non-normal status, or StNone if none found.

func (*State) Action

func (s *State) Action(user, message string, t ActionType, timestamp time.Time)

func (*State) AlertKey

func (s *State) AlertKey() expr.AlertKey

func (*State) Append

func (s *State) Append(event *Event) Status

Append appends status to the history if the status is different than the latest status. Returns the previous status.

func (*State) Copy

func (s *State) Copy() *State

func (*State) IsActive

func (s *State) IsActive() bool

func (*State) Last

func (s *State) Last() Event

func (*State) Status

func (s *State) Status() Status

func (*State) Touch

func (s *State) Touch()

type StateGroup

type StateGroup struct {
	Active   bool `json:",omitempty"`
	Status   Status
	Silenced bool
	IsError  bool          `json:",omitempty"`
	Subject  string        `json:",omitempty"`
	Alert    string        `json:",omitempty"`
	AlertKey expr.AlertKey `json:",omitempty"`
	Ago      string        `json:",omitempty"`
	State    *State        `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   Status
	Silenced bool
}

type States

type States map[expr.AlertKey]*State

func (States) Copy

func (states States) Copy() States

func (States) GroupSets

func (states States) GroupSets() map[string]expr.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 map[expr.AlertKey]Silence) map[StateTuple]States

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

type Status

type Status int
const (
	StNone Status = iota
	StNormal
	StWarning
	StCritical
	StUnknown
)

func (Status) IsCritical

func (s Status) IsCritical() bool

func (Status) IsNormal

func (s Status) IsNormal() bool

func (Status) IsUnknown

func (s Status) IsUnknown() bool

func (Status) IsWarning

func (s Status) IsWarning() bool

func (Status) MarshalJSON

func (s Status) MarshalJSON() ([]byte, error)

func (Status) String

func (s Status) String() string

Jump to

Keyboard shortcuts

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