github.com/netdata/go.d.plugin@v0.58.1/modules/dnsquery/init.go (about) 1 // SPDX-License-Identifier: GPL-3.0-or-later 2 3 package dnsquery 4 5 import ( 6 "errors" 7 "fmt" 8 "github.com/netdata/go.d.plugin/agent/module" 9 10 "github.com/miekg/dns" 11 ) 12 13 func (d *DNSQuery) verifyConfig() error { 14 if len(d.Domains) == 0 { 15 return errors.New("no domains specified") 16 } 17 18 if len(d.Servers) == 0 { 19 return errors.New("no servers specified") 20 } 21 22 if !(d.Network == "" || d.Network == "udp" || d.Network == "tcp" || d.Network == "tcp-tls") { 23 return fmt.Errorf("wrong network transport : %s", d.Network) 24 } 25 26 if d.RecordType != "" { 27 d.Warning("'record_type' config option is deprecated, use 'record_types' instead") 28 d.RecordTypes = append(d.RecordTypes, d.RecordType) 29 } 30 31 if len(d.RecordTypes) == 0 { 32 return errors.New("no record types specified") 33 } 34 35 return nil 36 } 37 38 func (d *DNSQuery) initRecordTypes() (map[string]uint16, error) { 39 types := make(map[string]uint16) 40 for _, v := range d.RecordTypes { 41 rtype, err := parseRecordType(v) 42 if err != nil { 43 return nil, err 44 } 45 types[v] = rtype 46 47 } 48 49 return types, nil 50 } 51 52 func (d *DNSQuery) initCharts() (*module.Charts, error) { 53 var charts module.Charts 54 55 for _, srv := range d.Servers { 56 for _, rtype := range d.RecordTypes { 57 cs := newDNSServerCharts(srv, d.Network, rtype) 58 if err := charts.Add(*cs...); err != nil { 59 return nil, err 60 } 61 } 62 } 63 64 return &charts, nil 65 } 66 67 func parseRecordType(recordType string) (uint16, error) { 68 var rtype uint16 69 70 switch recordType { 71 case "A": 72 rtype = dns.TypeA 73 case "AAAA": 74 rtype = dns.TypeAAAA 75 case "ANY": 76 rtype = dns.TypeANY 77 case "CNAME": 78 rtype = dns.TypeCNAME 79 case "MX": 80 rtype = dns.TypeMX 81 case "NS": 82 rtype = dns.TypeNS 83 case "PTR": 84 rtype = dns.TypePTR 85 case "SOA": 86 rtype = dns.TypeSOA 87 case "SPF": 88 rtype = dns.TypeSPF 89 case "SRV": 90 rtype = dns.TypeSRV 91 case "TXT": 92 rtype = dns.TypeTXT 93 default: 94 return 0, fmt.Errorf("unknown record type : %s", recordType) 95 } 96 97 return rtype, nil 98 }