sched

package
v0.0.0-...-7afe134 Latest Latest
Warning

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

Go to latest
Published: Nov 13, 2014 License: MIT Imports: 39 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 Load

func Load(c *conf.Conf)

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

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 Context

type Context struct {
	*State
	Alert *conf.Alert

	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 executes the given expression and returns a value with corresponding tags 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.

func (*Context) Expr

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

func (*Context) GetMeta

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

func (*Context) Graph

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

func (*Context) GraphAll

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

func (*Context) HostView

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

HostView returns the URL to the host view page.

func (*Context) IsEmail

func (c *Context) IsEmail() bool

func (*Context) LeftJoin

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

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, Error *Result
	Status            Status
	Time              time.Time
}

type HostData

type HostData struct {
	CPU struct {
		Logical    int64             `json:",omitempty"`
		Physical   int64             `json:",omitempty"`
		Processors map[string]string `json:",omitempty"`
	}
	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"`
	}
	Metrics []string
	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"`
	Name        string   `json:",omitempty"`
	Outbps      int64    `json:",omitempty"`
}

type MetadataDescription

type MetadataDescription struct {
	Tags opentsdb.TagSet `json:",omitempty"`
	Text string
}

type MetadataMetric

type MetadataMetric struct {
	Unit        string `json:",omitempty"`
	Type        string `json:",omitempty"`
	Description []*MetadataDescription
}

type Metavalue

type Metavalue struct {
	Time  time.Time
	Value interface{}
}

type Metavalues

type Metavalues []Metavalue

func (Metavalues) Last

func (m Metavalues) Last() *Metavalue

type Result

type Result struct {
	*expr.Result
	Expr string
}

type RunHistory

type RunHistory struct {
	Start   time.Time
	Context opentsdb.Context
	Events  map[expr.AlertKey]*Event
}

type Schedule

type Schedule struct {
	sync.Mutex

	Conf *conf.Conf

	Notifications map[expr.AlertKey]map[string]time.Time
	Silence       map[string]*Silence
	Group         map[time.Time]expr.AlertKeys
	Metadata      map[metadata.Metakey]Metavalues
	Search        *search.Search
	Lookups       map[string]*expr.Lookup

	LastCheck time.Time
	// contains filtered or unexported fields
}

func (*Schedule) Action

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

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, confirm bool, edit string) (map[expr.AlertKey]bool, error)

func (*Schedule) Check

func (s *Schedule) Check(T miniprofiler.Timer, now time.Time) (time.Duration, error)

Check evaluates all critical and warning alert rules. An error is returned if the check could not be performed.

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(rh *RunHistory) time.Duration

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

func (*Schedule) CheckUnknown

func (s *Schedule) CheckUnknown()

CheckUnknown checks for unknown alerts.

func (*Schedule) ClearSilence

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

func (*Schedule) Data

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

func (*Schedule) ExecuteBody

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

func (*Schedule) ExecuteSubject

func (s *Schedule) ExecuteSubject(w io.Writer, rh *RunHistory, a *conf.Alert, st *State) error

func (*Schedule) ExprGraph

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

func (*Schedule) ExprPNG

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

func (*Schedule) ExprSVG

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

func (*Schedule) GetMetadata

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

func (*Schedule) Host

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

func (*Schedule) Init

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

func (*Schedule) Load

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

func (*Schedule) MarshalGroups

func (s *Schedule) MarshalGroups(filter string) (*StateGroups, error)

func (*Schedule) MetadataMetrics

func (s *Schedule) MetadataMetrics() map[string]*MetadataMetric

func (*Schedule) NewRunHistory

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

func (*Schedule) Notify

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

func (*Schedule) PingHosts

func (s *Schedule) PingHosts()

func (*Schedule) Poll

func (s *Schedule) Poll()

Poll dispatches notification checks when needed.

func (*Schedule) PutMetadata

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

func (*Schedule) RestoreState

func (s *Schedule) RestoreState()

Restores notification and alert state from the file on disk.

func (*Schedule) Run

func (s *Schedule) Run() error

func (*Schedule) RunHistory

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

RunHistory processes an event history and trisggers notifications if needed.

func (*Schedule) Save

func (s *Schedule) Save()

func (*Schedule) Silenced

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

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

func (*Schedule) Status

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

func (*Schedule) URL

func (s *Schedule) URL() *url.URL

URL returns a prepopulated URL for external access, with path and query empty.

type Silence

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

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
	NeedAck   bool
	Open      bool
	Forgotten bool
}

func (*State) AbnormalStatus

func (s *State) AbnormalStatus() Status

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

func (*State) AlertKey

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

func (*State) Append

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

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

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
	Subject  string        `json:",omitempty"`
	Len      int           `json:",omitempty"`
	Alert    string        `json:",omitempty"`
	AlertKey expr.AlertKey `json:",omitempty"`
	Ago      string        `json:",omitempty"`
	Children []*StateGroup `json:",omitempty"`
}

type StateGroups

type StateGroups struct {
	Groups struct {
		NeedAck      []*StateGroup `json:",omitempty"`
		Acknowledged []*StateGroup `json:",omitempty"`
	}
	TimeAndDate []int
	Silenced    map[expr.AlertKey]time.Time
}

type StateTuple

type StateTuple struct {
	NeedAck bool
	Active  bool
	Status  Status
}

type States

type States map[expr.AlertKey]*State

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 (s States) GroupStates() map[StateTuple]States

GroupStates groups by NeedAck, Active, and Status.

type Status

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

func (Status) IsCritical

func (s Status) IsCritical() bool

func (Status) IsError

func (s Status) IsError() 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