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  }