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 }