From dece1ac2dc4554f66f8ec194269cd91d330edae1 Mon Sep 17 00:00:00 2001 From: Gibheer Date: Tue, 11 Dec 2018 12:37:30 +0100 Subject: add level mappings This allows to map the command exit codes to any other output level which can then be reported by the notification plugin. With the provided colors, the frontend will show them accordingly. --- cmd/monfront/main.go | 96 ++++++++++++++++++++++++++++++++++++++++++---------- 1 file changed, 78 insertions(+), 18 deletions(-) (limited to 'cmd/monfront/main.go') diff --git a/cmd/monfront/main.go b/cmd/monfront/main.go index eaf1d94..7d80c65 100644 --- a/cmd/monfront/main.go +++ b/cmd/monfront/main.go @@ -26,6 +26,29 @@ type ( DB string `json:"db"` Listen string `json:"listen"` } + + Context struct { + Mappings map[int]map[int]MapEntry + Checks []check + } + + MapEntry struct { + Title string + Color string + } + + check struct { + NodeName string + CommandName string + CheckID int64 + MappingId int + State int + Notify bool + Enabled bool + Notice sql.NullString + NextTime time.Time + Msg string + } ) func main() { @@ -149,21 +172,10 @@ func showChecks(w http.ResponseWriter, r *http.Request) { return } - type check struct { - NodeName string - CommandName string - CheckID int64 - State int - Notify bool - Enabled bool - Notice sql.NullString - NextTime time.Time - Msg string - } checks := []check{} for rows.Next() { c := check{} - err := rows.Scan(&c.CheckID, &c.NodeName, &c.CommandName, &c.State, &c.Notify, &c.Enabled, &c.Notice, &c.NextTime, &c.Msg) + err := rows.Scan(&c.CheckID, &c.NodeName, &c.CommandName, &c.MappingId, &c.State, &c.Notify, &c.Enabled, &c.Notice, &c.NextTime, &c.Msg) if err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("problems with the database")) @@ -181,8 +193,17 @@ func showChecks(w http.ResponseWriter, r *http.Request) { log.Printf("could not parse template: %s", err) return } + con := Context{ + Checks: checks, + } + if err := loadMappings(&con); err != nil { + w.WriteHeader(http.StatusInternalServerError) + w.Write([]byte("problem with the mappings")) + log.Printf("could not load mappings: %s", err) + return + } w.Header()["Content-Type"] = []string{"text/html"} - if err := tmpl.Execute(w, checks); err != nil { + if err := tmpl.Execute(w, con); err != nil { w.WriteHeader(http.StatusInternalServerError) w.Write([]byte("problem with a template")) log.Printf("could not execute template: %s", err) @@ -193,6 +214,7 @@ func showChecks(w http.ResponseWriter, r *http.Request) { func showUnhandledHosts(w http.ResponseWriter, r *http.Request) { } + func showUnhandledGroups(w http.ResponseWriter, r *http.Request) { rows, err := DB.Query(SQLShowUnhandledGroups) if err != nil { @@ -236,8 +258,40 @@ func showUnhandledGroups(w http.ResponseWriter, r *http.Request) { return } +func loadMappings(c *Context) error { + c.Mappings = map[int]map[int]MapEntry{} + rows, err := DB.Query(SQLShowMappings) + if err != nil { + return err + } + + for rows.Next() { + if rows.Err() != nil { + return rows.Err() + } + var ( + mapId int + target int + title string + color string + ) + if err := rows.Scan(&mapId, &target, &title, &color); err != nil { + return err + } + ma, found := c.Mappings[mapId] + if !found { + ma = map[int]MapEntry{} + c.Mappings[mapId] = ma + } + ma[target] = MapEntry{Title: title, Color: color} + } + return nil +} + var ( - SQLShowChecks = `select c.id, n.name, co.name, ac.states[1] as state, ac.notify, + SQLShowMappings = `select mapping_id, target, title, color + from mapping_level` + SQLShowChecks = `select c.id, n.name, co.name, ac.mapping_id, ac.states[1] as state, ac.notify, ac.enabled, ac.notice, ac.next_time, ac.msg from active_checks ac join checks c on ac.check_id = c.id @@ -280,10 +334,15 @@ var ( form nav { display: flex; flex-direction: column; } form nav > * { margin: 0.5em; } table td, table th { padding: 0.5em; } - td.state-0 { background: green; } + {{ range $mapId, $mapping := .Mappings }} + {{ range $target, $val := $mapping }} + td.state-{{ $mapId }}-{{ $target }} { background: {{ $val.Color }}; } + {{ end }} + {{ end }} + /* td.state-0 { background: green; } td.state-1 { background: orange; } td.state-2 { background: red; } - td.state-99 { background: gray; } + td.state-99 { background: gray; } */ @@ -321,11 +380,12 @@ var ( hoststatusnext checkmessage {{ $current := "" }} - {{ range . }} + {{ $mapping := .Mappings }} + {{ range .Checks }} {{ if ne $current .NodeName }}{{ $current = .NodeName }}{{ .NodeName }}{{ end }} - {{ .CommandName }} - {{ .State }} + {{ .CommandName }} - {{ (index $mapping .MappingId .State).Title }} {{ .NextTime.Format "2006.01.02 15:04:05" }}
{{ .Msg }}
-- cgit v1.2.3-70-g09d2