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