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