master
go 196 lines 8.13 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package pihole
4
5 import (
6 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
7 )
8
9 const (
10 prioDNSQueriesTotal = collectorapi.Priority + iota
11 prioDNSQueriesBlockedPercent
12 prioDNSQueriesByDestination
13 prioDNSQueriesByType
14 prioDNSQueriesByStatus
15 prioDNSRepliesByType
16
17 prioActiveClients
18
19 prioGravityListBlockedDomains
20 prioGravityListLastUpdateTimeAgo
21 )
22
23 var summaryCharts = collectorapi.Charts{
24 chartDNSQueriesTotal.Copy(),
25 chartDNSQueriesBlockedPercent.Copy(),
26 chartDNSQueriesByDestination.Copy(),
27 chartDNSQueriesByType.Copy(),
28 chartDNSQueriesByStatus.Copy(),
29
30 chartDNSRepliesByType.Copy(),
31
32 chartActiveClients.Copy(),
33
34 chartGravityListBlockedDomains.Copy(),
35 chartGravityListLastUpdateTimeAgo.Copy(),
36 }
37
38 var (
39 chartDNSQueriesTotal = collectorapi.Chart{
40 ID: "dns_queries_total",
41 Title: "Pi-hole DNS Queries Total (Cached, Blocked and Forwarded)",
42 Units: "queries/s",
43 Fam: "queries",
44 Ctx: "pihole.dns_queries_total",
45 Priority: prioDNSQueriesTotal,
46 Dims: collectorapi.Dims{
47 {ID: "queries_total", Name: "queries", Algo: collectorapi.Incremental},
48 },
49 }
50 chartDNSQueriesBlockedPercent = collectorapi.Chart{
51 ID: "dns_queries_blocked_percent",
52 Title: "Pi-hole DNS Queries Blocked Percent",
53 Units: "percent",
54 Fam: "queries",
55 Ctx: "pihole.dns_queries_blocked_percent",
56 Priority: prioDNSQueriesBlockedPercent,
57 Dims: collectorapi.Dims{
58 {ID: "queries_percent_blocked", Name: "blocked", Div: precision},
59 },
60 }
61 chartDNSQueriesByDestination = collectorapi.Chart{
62 ID: "dns_queries_by_destination",
63 Title: "Pi-hole DNS Queries by Destination",
64 Units: "queries/s",
65 Fam: "queries",
66 Ctx: "pihole.dns_queries_by_destination",
67 Type: collectorapi.Stacked,
68 Priority: prioDNSQueriesByDestination,
69 Dims: collectorapi.Dims{
70 {ID: "queries_cached", Name: "cached", Algo: collectorapi.Incremental},
71 {ID: "queries_blocked", Name: "blocked", Algo: collectorapi.Incremental},
72 {ID: "queries_forwarded", Name: "forwarded", Algo: collectorapi.Incremental},
73 },
74 }
75 chartDNSQueriesByType = collectorapi.Chart{
76 ID: "dns_queries_by_type",
77 Title: "Pi-hole DNS Queries by Type",
78 Units: "queries/s",
79 Fam: "queries",
80 Ctx: "pihole.dns_queries_by_type",
81 Type: collectorapi.Stacked,
82 Priority: prioDNSQueriesByType,
83 Dims: collectorapi.Dims{
84 {ID: "queries_types_A", Name: "A", Algo: collectorapi.Incremental},
85 {ID: "queries_types_AAAA", Name: "AAAA", Algo: collectorapi.Incremental},
86 {ID: "queries_types_ANY", Name: "ANY", Algo: collectorapi.Incremental},
87 {ID: "queries_types_SRV", Name: "SRV", Algo: collectorapi.Incremental},
88 {ID: "queries_types_SOA", Name: "SOA", Algo: collectorapi.Incremental},
89 {ID: "queries_types_PTR", Name: "PTR", Algo: collectorapi.Incremental},
90 {ID: "queries_types_TXT", Name: "TXT", Algo: collectorapi.Incremental},
91 {ID: "queries_types_NAPTR", Name: "NAPTR", Algo: collectorapi.Incremental},
92 {ID: "queries_types_MX", Name: "MX", Algo: collectorapi.Incremental},
93 {ID: "queries_types_DS", Name: "DS", Algo: collectorapi.Incremental},
94 {ID: "queries_types_RRSIG", Name: "RRSIG", Algo: collectorapi.Incremental},
95 {ID: "queries_types_DNSKEY", Name: "DNSKEY", Algo: collectorapi.Incremental},
96 {ID: "queries_types_NS", Name: "NS", Algo: collectorapi.Incremental},
97 {ID: "queries_types_SVCB", Name: "SVCB", Algo: collectorapi.Incremental},
98 {ID: "queries_types_HTTPS", Name: "HTTPS", Algo: collectorapi.Incremental},
99 {ID: "queries_types_OTHER", Name: "OTHER", Algo: collectorapi.Incremental},
100 },
101 }
102 chartDNSQueriesByStatus = collectorapi.Chart{
103 ID: "dns_queries_by_status",
104 Title: "Pi-hole DNS Queries by Status",
105 Units: "queries/s",
106 Fam: "queries",
107 Ctx: "pihole.dns_queries_by_status",
108 Type: collectorapi.Stacked,
109 Priority: prioDNSQueriesByStatus,
110 Dims: collectorapi.Dims{
111 {ID: "queries_status_UNKNOWN", Name: "UNKNOWN", Algo: collectorapi.Incremental},
112 {ID: "queries_status_GRAVITY", Name: "GRAVITY", Algo: collectorapi.Incremental},
113 {ID: "queries_status_FORWARDED", Name: "FORWARDED", Algo: collectorapi.Incremental},
114 {ID: "queries_status_CACHE", Name: "CACHE", Algo: collectorapi.Incremental},
115 {ID: "queries_status_REGEX", Name: "REGEX", Algo: collectorapi.Incremental},
116 {ID: "queries_status_DENYLIST", Name: "DENYLIST", Algo: collectorapi.Incremental},
117 {ID: "queries_status_EXTERNAL_BLOCKED_IP", Name: "EXTERNAL_BLOCKED_IP", Algo: collectorapi.Incremental},
118 {ID: "queries_status_EXTERNAL_BLOCKED_NULL", Name: "EXTERNAL_BLOCKED_NULL", Algo: collectorapi.Incremental},
119 {ID: "queries_status_EXTERNAL_BLOCKED_NXRA", Name: "EXTERNAL_BLOCKED_NXRA", Algo: collectorapi.Incremental},
120 {ID: "queries_status_GRAVITY_CNAME", Name: "GRAVITY_CNAME", Algo: collectorapi.Incremental},
121 {ID: "queries_status_REGEX_CNAME", Name: "REGEX_CNAME", Algo: collectorapi.Incremental},
122 {ID: "queries_status_DENYLIST_CNAME", Name: "DENYLIST_CNAME", Algo: collectorapi.Incremental},
123 {ID: "queries_status_RETRIED", Name: "RETRIED", Algo: collectorapi.Incremental},
124 {ID: "queries_status_RETRIED_DNSSEC", Name: "RETRIED_DNSSEC", Algo: collectorapi.Incremental},
125 {ID: "queries_status_IN_PROGRESS", Name: "IN_PROGRESS", Algo: collectorapi.Incremental},
126 {ID: "queries_status_DBBUSY", Name: "DBBUSY", Algo: collectorapi.Incremental},
127 {ID: "queries_status_SPECIAL_DOMAIN", Name: "SPECIAL_DOMAIN", Algo: collectorapi.Incremental},
128 {ID: "queries_status_CACHE_STALE", Name: "CACHE_STALE", Algo: collectorapi.Incremental},
129 {ID: "queries_status_EXTERNAL_BLOCKED_EDE15", Name: "EXTERNAL_BLOCKED_EDE15", Algo: collectorapi.Incremental},
130 },
131 }
132
133 chartDNSRepliesByType = collectorapi.Chart{
134 ID: "dns_replies_by_type",
135 Title: "Pi-hole DNS Replies by Type",
136 Units: "replies/s",
137 Fam: "replies",
138 Ctx: "pihole.dns_replies_by_type",
139 Type: collectorapi.Stacked,
140 Priority: prioDNSRepliesByType,
141 Dims: collectorapi.Dims{
142 {ID: "queries_replies_UNKNOWN", Name: "UNKNOWN", Algo: collectorapi.Incremental},
143 {ID: "queries_replies_NODATA", Name: "NODATA", Algo: collectorapi.Incremental},
144 {ID: "queries_replies_NXDOMAIN", Name: "NXDOMAIN", Algo: collectorapi.Incremental},
145 {ID: "queries_replies_CNAME", Name: "CNAME", Algo: collectorapi.Incremental},
146 {ID: "queries_replies_IP", Name: "IP", Algo: collectorapi.Incremental},
147 {ID: "queries_replies_DOMAIN", Name: "DOMAIN", Algo: collectorapi.Incremental},
148 {ID: "queries_replies_RRNAME", Name: "RRNAME", Algo: collectorapi.Incremental},
149 {ID: "queries_replies_SERVFAIL", Name: "SERVFAIL", Algo: collectorapi.Incremental},
150 {ID: "queries_replies_REFUSED", Name: "REFUSED", Algo: collectorapi.Incremental},
151 {ID: "queries_replies_NOTIMP", Name: "NOTIMP", Algo: collectorapi.Incremental},
152 {ID: "queries_replies_DNSSEC", Name: "DNSSEC", Algo: collectorapi.Incremental},
153 {ID: "queries_replies_NONE", Name: "NONE", Algo: collectorapi.Incremental},
154 {ID: "queries_replies_OTHER", Name: "OTHER", Algo: collectorapi.Incremental},
155 },
156 }
157 )
158
159 var (
160 chartActiveClients = collectorapi.Chart{
161 ID: "active_clients",
162 Title: "Pi-hole Active Clients (Seen in the Last 24 Hours)",
163 Units: "clients",
164 Fam: "clients",
165 Ctx: "pihole.active_clients",
166 Priority: prioActiveClients,
167 Dims: collectorapi.Dims{
168 {ID: "clients_active", Name: "active"},
169 },
170 }
171 )
172
173 var (
174 chartGravityListBlockedDomains = collectorapi.Chart{
175 ID: "gravity_list_blocked_domains",
176 Title: "Pi-hole Gravity List Blocked Domains",
177 Units: "domains",
178 Fam: "blocklist",
179 Ctx: "pihole.gravity_list_blocked_domains",
180 Priority: prioGravityListBlockedDomains,
181 Dims: collectorapi.Dims{
182 {ID: "gravity_domains_being_blocked", Name: "blocked"},
183 },
184 }
185 chartGravityListLastUpdateTimeAgo = collectorapi.Chart{
186 ID: "gravity_list_last_update_time_ago",
187 Title: "Pi-hole Gravity List Time Since Last Update",
188 Units: "seconds",
189 Fam: "blocklist",
190 Ctx: "pihole.gravity_list_last_update_time_ago",
191 Priority: prioGravityListLastUpdateTimeAgo,
192 Dims: collectorapi.Dims{
193 {ID: "gravity_last_update_seconds_ago", Name: "last_update_ago"},
194 },
195 }
196 )