github.com/netdata/go.d.plugin@v0.58.1/modules/dnsdist/dnsdist.go (about)

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package dnsdist
     4  
     5  import (
     6  	_ "embed"
     7  	"net/http"
     8  	"time"
     9  
    10  	"github.com/netdata/go.d.plugin/agent/module"
    11  	"github.com/netdata/go.d.plugin/pkg/web"
    12  )
    13  
    14  //go:embed "config_schema.json"
    15  var configSchema string
    16  
    17  func init() {
    18  	module.Register("dnsdist", module.Creator{
    19  		JobConfigSchema: configSchema,
    20  		Defaults: module.Defaults{
    21  			UpdateEvery: 1,
    22  		},
    23  		Create: func() module.Module { return New() },
    24  	})
    25  }
    26  
    27  type Config struct {
    28  	web.HTTP `yaml:",inline"`
    29  }
    30  
    31  type DNSdist struct {
    32  	module.Base
    33  	Config `yaml:",inline"`
    34  
    35  	httpClient *http.Client
    36  	charts     *module.Charts
    37  }
    38  
    39  func New() *DNSdist {
    40  	return &DNSdist{
    41  		Config: Config{
    42  			HTTP: web.HTTP{
    43  				Request: web.Request{
    44  					URL: "http://127.0.0.1:8083",
    45  				},
    46  				Client: web.Client{
    47  					Timeout: web.Duration{Duration: time.Second},
    48  				},
    49  			},
    50  		},
    51  	}
    52  }
    53  
    54  func (d *DNSdist) Init() bool {
    55  	err := d.validateConfig()
    56  	if err != nil {
    57  		d.Errorf("config validation: %v", err)
    58  		return false
    59  	}
    60  
    61  	client, err := d.initHTTPClient()
    62  	if err != nil {
    63  		d.Errorf("init HTTP client: %v", err)
    64  		return false
    65  	}
    66  	d.httpClient = client
    67  
    68  	cs, err := d.initCharts()
    69  	if err != nil {
    70  		d.Errorf("init charts: %v", err)
    71  		return false
    72  	}
    73  	d.charts = cs
    74  
    75  	return true
    76  }
    77  
    78  func (d *DNSdist) Check() bool {
    79  	return len(d.Collect()) > 0
    80  }
    81  
    82  func (d *DNSdist) Charts() *module.Charts {
    83  	return d.charts
    84  }
    85  
    86  func (d *DNSdist) Collect() map[string]int64 {
    87  	ms, err := d.collect()
    88  	if err != nil {
    89  		d.Error(err)
    90  	}
    91  
    92  	if len(ms) == 0 {
    93  		return nil
    94  	}
    95  
    96  	return ms
    97  }
    98  
    99  func (d *DNSdist) Cleanup() {
   100  	if d.httpClient == nil {
   101  		return
   102  	}
   103  
   104  	d.httpClient.CloseIdleConnections()
   105  }