master
go 64 lines 1.65 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package dnsquery
4
5 import (
6 "fmt"
7 "strings"
8
9 "github.com/netdata/netdata/go/plugins/plugin/framework/collectorapi"
10 )
11
12 const (
13 prioDNSQueryStatus = collectorapi.Priority + iota
14 prioDNSQueryTime
15 )
16
17 var (
18 dnsChartsTmpl = collectorapi.Charts{
19 dnsQueryStatusChartTmpl.Copy(),
20 dnsQueryTimeChartTmpl.Copy(),
21 }
22 dnsQueryStatusChartTmpl = collectorapi.Chart{
23 ID: "server_%s_record_%s_query_status",
24 Title: "DNS Query Status",
25 Units: "status",
26 Fam: "query status",
27 Ctx: "dns_query.query_status",
28 Priority: prioDNSQueryStatus,
29 Dims: collectorapi.Dims{
30 {ID: "server_%s_record_%s_query_status_success", Name: "success"},
31 {ID: "server_%s_record_%s_query_status_network_error", Name: "network_error"},
32 {ID: "server_%s_record_%s_query_status_dns_error", Name: "dns_error"},
33 },
34 }
35 dnsQueryTimeChartTmpl = collectorapi.Chart{
36 ID: "server_%s_record_%s_query_time",
37 Title: "DNS Query Time",
38 Units: "seconds",
39 Fam: "query time",
40 Ctx: "dns_query.query_time",
41 Priority: prioDNSQueryTime,
42 Dims: collectorapi.Dims{
43 {ID: "server_%s_record_%s_query_time", Name: "query_time", Div: 1e9},
44 },
45 }
46 )
47
48 func newDNSServerCharts(server, network, rtype string) *collectorapi.Charts {
49 charts := dnsChartsTmpl.Copy()
50
51 for _, chart := range *charts {
52 chart.ID = fmt.Sprintf(chart.ID, strings.ReplaceAll(server, ".", "_"), rtype)
53 chart.Labels = []collectorapi.Label{
54 {Key: "server", Value: server},
55 {Key: "network", Value: network},
56 {Key: "record_type", Value: rtype},
57 }
58 for _, d := range chart.Dims {
59 d.ID = fmt.Sprintf(d.ID, server, rtype)
60 }
61 }
62
63 return charts
64 }