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

     1  // SPDX-License-Identifier: GPL-3.0-or-later
     2  
     3  package powerdns_recursor
     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("powerdns_recursor", module.Creator{
    19  		JobConfigSchema: configSchema,
    20  		Create:          func() module.Module { return New() },
    21  	})
    22  }
    23  
    24  func New() *Recursor {
    25  	return &Recursor{
    26  		Config: Config{
    27  			HTTP: web.HTTP{
    28  				Request: web.Request{
    29  					URL: "http://127.0.0.1:8081",
    30  				},
    31  				Client: web.Client{
    32  					Timeout: web.Duration{Duration: time.Second},
    33  				},
    34  			},
    35  		},
    36  	}
    37  }
    38  
    39  type Config struct {
    40  	web.HTTP `yaml:",inline"`
    41  }
    42  
    43  type Recursor struct {
    44  	module.Base
    45  	Config `yaml:",inline"`
    46  
    47  	httpClient *http.Client
    48  	charts     *module.Charts
    49  }
    50  
    51  func (r *Recursor) Init() bool {
    52  	err := r.validateConfig()
    53  	if err != nil {
    54  		r.Errorf("config validation: %v", err)
    55  		return false
    56  	}
    57  
    58  	client, err := r.initHTTPClient()
    59  	if err != nil {
    60  		r.Errorf("init HTTP client: %v", err)
    61  		return false
    62  	}
    63  	r.httpClient = client
    64  
    65  	cs, err := r.initCharts()
    66  	if err != nil {
    67  		r.Errorf("init charts: %v", err)
    68  		return false
    69  	}
    70  	r.charts = cs
    71  
    72  	return true
    73  }
    74  
    75  func (r *Recursor) Check() bool {
    76  	return len(r.Collect()) > 0
    77  }
    78  
    79  func (r *Recursor) Charts() *module.Charts {
    80  	return r.charts
    81  }
    82  
    83  func (r *Recursor) Collect() map[string]int64 {
    84  	ms, err := r.collect()
    85  	if err != nil {
    86  		r.Error(err)
    87  	}
    88  
    89  	if len(ms) == 0 {
    90  		return nil
    91  	}
    92  	return ms
    93  }
    94  
    95  func (r *Recursor) Cleanup() {
    96  	if r.httpClient == nil {
    97  		return
    98  	}
    99  	r.httpClient.CloseIdleConnections()
   100  }