2021-12-02 17:54:14 +01:00
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"net/http"
|
|
|
|
"strings"
|
|
|
|
)
|
|
|
|
|
|
|
|
type (
|
|
|
|
group struct {
|
|
|
|
GroupId int
|
|
|
|
Name string
|
|
|
|
NodeId int
|
|
|
|
NodeName string
|
|
|
|
State int
|
|
|
|
MappingId int
|
|
|
|
}
|
|
|
|
)
|
|
|
|
|
|
|
|
func showGroups(con *Context) {
|
|
|
|
query := `select
|
|
|
|
group_id,
|
|
|
|
group_name,
|
|
|
|
node_id,
|
|
|
|
node_name,
|
|
|
|
mapping_id,
|
|
|
|
state
|
|
|
|
from (
|
|
|
|
select
|
|
|
|
g.id group_id,
|
|
|
|
g.name group_name,
|
|
|
|
n.id node_id,
|
|
|
|
n.name node_name,
|
|
|
|
ac.states[1] state,
|
|
|
|
ac.mapping_id,
|
|
|
|
ac.acknowledged,
|
|
|
|
row_number() over (partition by c.node_id order by ac.states[1] desc) maxstate
|
|
|
|
from groups g
|
|
|
|
join nodes_groups ng on g.id = ng.group_id
|
|
|
|
join nodes n on ng.node_id = n.id
|
|
|
|
join checks c on n.id = c.node_id
|
|
|
|
join active_checks ac on c.id = ac.check_id
|
|
|
|
%s
|
|
|
|
order by g.name, n.name
|
|
|
|
) groups
|
|
|
|
where maxstate = 1`
|
|
|
|
if strings.HasPrefix(con.r.URL.Path, "/unhandled") {
|
|
|
|
query = fmt.Sprintf(query, `where ac.states[1] != 0 and acknowledged = false`)
|
|
|
|
con.Unhandled = true
|
|
|
|
} else {
|
|
|
|
query = fmt.Sprintf(query, "")
|
|
|
|
}
|
|
|
|
|
|
|
|
rows, err := DB.Query(query)
|
|
|
|
if err != nil {
|
|
|
|
con.w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
con.w.Write([]byte("problems with the database"))
|
2023-08-17 22:05:46 +02:00
|
|
|
con.log.Info("could not get check list", "error", err)
|
2021-12-02 17:54:14 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
groups := []group{}
|
|
|
|
for rows.Next() {
|
|
|
|
g := group{}
|
|
|
|
err := rows.Scan(&g.GroupId, &g.Name, &g.NodeId, &g.NodeName, &g.MappingId, &g.State)
|
|
|
|
if err != nil {
|
|
|
|
con.w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
con.w.Write([]byte("problems with the database"))
|
2023-08-17 22:05:46 +02:00
|
|
|
con.log.Info("could not get check list", "error", err)
|
2021-12-02 17:54:14 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
groups = append(groups, g)
|
|
|
|
}
|
|
|
|
con.Groups = groups
|
|
|
|
if err := con.loadMappings(); err != nil {
|
|
|
|
con.w.WriteHeader(http.StatusInternalServerError)
|
|
|
|
con.w.Write([]byte("problem with the mappings"))
|
2023-08-17 22:05:46 +02:00
|
|
|
con.log.Info("could not load mappings", "error", err)
|
2021-12-02 17:54:14 +01:00
|
|
|
return
|
|
|
|
}
|
|
|
|
con.w.Header()["Content-Type"] = []string{"text/html"}
|
|
|
|
con.Render("grouplist")
|
|
|
|
return
|
|
|
|
}
|