master
go 77 lines 1.69 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 //go:build linux
4
5 package fail2ban
6
7 import (
8 "fmt"
9 "strings"
10
11 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
12 )
13
14 const (
15 prioJailBannedIPs = collectorapi.Priority + iota
16 prioJailActiveFailures
17 )
18
19 var jailChartsTmpl = collectorapi.Charts{
20 jailCurrentBannedIPs.Copy(),
21 jailActiveFailures.Copy(),
22 }
23
24 var (
25 jailCurrentBannedIPs = collectorapi.Chart{
26 ID: "jail_%s_banned_ips",
27 Title: "Fail2Ban Jail banned IPs",
28 Units: "addresses",
29 Fam: "bans",
30 Ctx: "fail2ban.jail_banned_ips",
31 Type: collectorapi.Line,
32 Priority: prioJailBannedIPs,
33 Dims: collectorapi.Dims{
34 {ID: "jail_%s_currently_banned", Name: "banned"},
35 },
36 }
37 jailActiveFailures = collectorapi.Chart{
38 ID: "jail_%s_active_failures",
39 Title: "Fail2Ban Jail active failures",
40 Units: "failures",
41 Fam: "failures",
42 Ctx: "fail2ban.jail_active_failures",
43 Type: collectorapi.Line,
44 Priority: prioJailActiveFailures,
45 Dims: collectorapi.Dims{
46 {ID: "jail_%s_currently_failed", Name: "active_failures"},
47 },
48 }
49 )
50
51 func (c *Collector) addJailCharts(jail string) {
52 charts := jailChartsTmpl.Copy()
53
54 for _, chart := range *charts {
55 chart.ID = fmt.Sprintf(chart.ID, jail)
56 chart.Labels = []collectorapi.Label{
57 {Key: "jail", Value: jail},
58 }
59 for _, dim := range chart.Dims {
60 dim.ID = fmt.Sprintf(dim.ID, jail)
61 }
62 }
63
64 if err := c.Charts().Add(*charts...); err != nil {
65 c.Warning(err)
66 }
67 }
68
69 func (c *Collector) removeJailCharts(jail string) {
70 px := fmt.Sprintf("jail_%s_", jail)
71 for _, chart := range *c.Charts() {
72 if strings.HasPrefix(chart.ID, px) {
73 chart.MarkRemove()
74 chart.MarkNotCreated()
75 }
76 }
77 }