summaryrefslogtreecommitdiffstats
path: root/src/go/collectors/go.d.plugin/modules/dnsquery/init.go
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/go/collectors/go.d.plugin/modules/dnsquery/init.go98
1 files changed, 98 insertions, 0 deletions
diff --git a/src/go/collectors/go.d.plugin/modules/dnsquery/init.go b/src/go/collectors/go.d.plugin/modules/dnsquery/init.go
new file mode 100644
index 000000000..05dad4ac1
--- /dev/null
+++ b/src/go/collectors/go.d.plugin/modules/dnsquery/init.go
@@ -0,0 +1,98 @@
+// SPDX-License-Identifier: GPL-3.0-or-later
+
+package dnsquery
+
+import (
+ "errors"
+ "fmt"
+ "github.com/netdata/netdata/go/go.d.plugin/agent/module"
+
+ "github.com/miekg/dns"
+)
+
+func (d *DNSQuery) verifyConfig() error {
+ if len(d.Domains) == 0 {
+ return errors.New("no domains specified")
+ }
+
+ if len(d.Servers) == 0 {
+ return errors.New("no servers specified")
+ }
+
+ if !(d.Network == "" || d.Network == "udp" || d.Network == "tcp" || d.Network == "tcp-tls") {
+ return fmt.Errorf("wrong network transport : %s", d.Network)
+ }
+
+ if d.RecordType != "" {
+ d.Warning("'record_type' config option is deprecated, use 'record_types' instead")
+ d.RecordTypes = append(d.RecordTypes, d.RecordType)
+ }
+
+ if len(d.RecordTypes) == 0 {
+ return errors.New("no record types specified")
+ }
+
+ return nil
+}
+
+func (d *DNSQuery) initRecordTypes() (map[string]uint16, error) {
+ types := make(map[string]uint16)
+ for _, v := range d.RecordTypes {
+ rtype, err := parseRecordType(v)
+ if err != nil {
+ return nil, err
+ }
+ types[v] = rtype
+
+ }
+
+ return types, nil
+}
+
+func (d *DNSQuery) initCharts() (*module.Charts, error) {
+ var charts module.Charts
+
+ for _, srv := range d.Servers {
+ for _, rtype := range d.RecordTypes {
+ cs := newDNSServerCharts(srv, d.Network, rtype)
+ if err := charts.Add(*cs...); err != nil {
+ return nil, err
+ }
+ }
+ }
+
+ return &charts, nil
+}
+
+func parseRecordType(recordType string) (uint16, error) {
+ var rtype uint16
+
+ switch recordType {
+ case "A":
+ rtype = dns.TypeA
+ case "AAAA":
+ rtype = dns.TypeAAAA
+ case "ANY":
+ rtype = dns.TypeANY
+ case "CNAME":
+ rtype = dns.TypeCNAME
+ case "MX":
+ rtype = dns.TypeMX
+ case "NS":
+ rtype = dns.TypeNS
+ case "PTR":
+ rtype = dns.TypePTR
+ case "SOA":
+ rtype = dns.TypeSOA
+ case "SPF":
+ rtype = dns.TypeSPF
+ case "SRV":
+ rtype = dns.TypeSRV
+ case "TXT":
+ rtype = dns.TypeTXT
+ default:
+ return 0, fmt.Errorf("unknown record type : %s", recordType)
+ }
+
+ return rtype, nil
+}