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  }