mirror of
https://github.com/ClusterCockpit/cc-metric-collector.git
synced 2024-12-26 07:29:04 +01:00
Set HTTP timeout for redfish device connections
This commit is contained in:
parent
c75d394e11
commit
aedc1be277
@ -1,8 +1,10 @@
|
|||||||
package receivers
|
package receivers
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"crypto/tls"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
|
"net/http"
|
||||||
"strconv"
|
"strconv"
|
||||||
"sync"
|
"sync"
|
||||||
"time"
|
"time"
|
||||||
@ -18,9 +20,17 @@ import (
|
|||||||
type RedfishReceiver struct {
|
type RedfishReceiver struct {
|
||||||
receiver
|
receiver
|
||||||
config struct {
|
config struct {
|
||||||
Type string `json:"type"`
|
Type string `json:"type"`
|
||||||
Fanout int `json:"fanout,omitempty"` // Default fanout: 64
|
|
||||||
Interval int `json:"interval,omitempty"` // Default interval: 30s
|
// Maximum number of simultaneous redfish connections (default: 64)
|
||||||
|
Fanout int `json:"fanout,omitempty"`
|
||||||
|
// How often the redfish power metrics should be read and send to the sink (default: 30 s)
|
||||||
|
Interval int `json:"interval,omitempty"`
|
||||||
|
|
||||||
|
// Control whether a client verifies the server's certificate (default: true)
|
||||||
|
HttpInsecure bool `json:"http_insecure,omitempty"`
|
||||||
|
// Time limit for requests made by this HTTP client (default: 10 s)
|
||||||
|
HttpTimeout time.Duration `json:"http_timeout,omitempty"`
|
||||||
|
|
||||||
// Client config for each redfish service
|
// Client config for each redfish service
|
||||||
ClientConfigs []struct {
|
ClientConfigs []struct {
|
||||||
@ -28,7 +38,6 @@ type RedfishReceiver struct {
|
|||||||
Username *string `json:"username"`
|
Username *string `json:"username"`
|
||||||
Password *string `json:"password"`
|
Password *string `json:"password"`
|
||||||
Endpoint *string `json:"endpoint"`
|
Endpoint *string `json:"endpoint"`
|
||||||
Insecure *bool `json:"insecure,omitempty"`
|
|
||||||
ExcludeMetrics []string `json:"exclude_metrics,omitempty"`
|
ExcludeMetrics []string `json:"exclude_metrics,omitempty"`
|
||||||
gofish gofish.ClientConfig
|
gofish gofish.ClientConfig
|
||||||
} `json:"client_config"`
|
} `json:"client_config"`
|
||||||
@ -42,7 +51,7 @@ type RedfishReceiver struct {
|
|||||||
func (r *RedfishReceiver) Start() {
|
func (r *RedfishReceiver) Start() {
|
||||||
cclog.ComponentDebug(r.name, "START")
|
cclog.ComponentDebug(r.name, "START")
|
||||||
|
|
||||||
// readPowerMetric reads readfish power metric from the endpoint configured in conf
|
// readPowerMetric reads redfish power metric from the endpoint configured in conf
|
||||||
readPowerMetric := func(clientConfigIndex int) error {
|
readPowerMetric := func(clientConfigIndex int) error {
|
||||||
|
|
||||||
clientConfig := &r.config.ClientConfigs[clientConfigIndex]
|
clientConfig := &r.config.ClientConfigs[clientConfigIndex]
|
||||||
@ -50,18 +59,14 @@ func (r *RedfishReceiver) Start() {
|
|||||||
// Connect to redfish service
|
// Connect to redfish service
|
||||||
c, err := gofish.Connect(clientConfig.gofish)
|
c, err := gofish.Connect(clientConfig.gofish)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c := struct {
|
return fmt.Errorf(
|
||||||
Username string
|
"readPowerMetric: gofish.Connect({Username: %v, Endpoint: %v, BasicAuth: %v, HttpTimeout: %v, HttpInsecure: %v}) failed: %v",
|
||||||
Endpoint string
|
clientConfig.gofish.Username,
|
||||||
BasicAuth bool
|
clientConfig.gofish.Endpoint,
|
||||||
Insecure bool
|
clientConfig.gofish.BasicAuth,
|
||||||
}{
|
clientConfig.gofish.HTTPClient.Timeout,
|
||||||
Username: clientConfig.gofish.Username,
|
clientConfig.gofish.HTTPClient.Transport.(*http.Transport).TLSClientConfig.InsecureSkipVerify,
|
||||||
Endpoint: clientConfig.gofish.Endpoint,
|
err)
|
||||||
BasicAuth: clientConfig.gofish.BasicAuth,
|
|
||||||
Insecure: clientConfig.gofish.Insecure,
|
|
||||||
}
|
|
||||||
return fmt.Errorf("readPowerMetric: gofish.Connect(%+v) failed: %v", c, err)
|
|
||||||
}
|
}
|
||||||
defer c.Logout()
|
defer c.Logout()
|
||||||
|
|
||||||
@ -272,6 +277,8 @@ func NewRedfishReceiver(name string, config json.RawMessage) (Receiver, error) {
|
|||||||
// Allow overwriting these defaults by reading config JSON
|
// Allow overwriting these defaults by reading config JSON
|
||||||
r.config.Fanout = 64
|
r.config.Fanout = 64
|
||||||
r.config.Interval = 30
|
r.config.Interval = 30
|
||||||
|
r.config.HttpTimeout = 10 * time.Second
|
||||||
|
r.config.HttpInsecure = true
|
||||||
|
|
||||||
// Read the redfish receiver specific JSON config
|
// Read the redfish receiver specific JSON config
|
||||||
if len(config) > 0 {
|
if len(config) > 0 {
|
||||||
@ -282,6 +289,16 @@ func NewRedfishReceiver(name string, config json.RawMessage) (Receiver, error) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Create new http client
|
||||||
|
customTransport := http.DefaultTransport.(*http.Transport).Clone()
|
||||||
|
customTransport.TLSClientConfig = &tls.Config{
|
||||||
|
InsecureSkipVerify: r.config.HttpInsecure,
|
||||||
|
}
|
||||||
|
httpClient := &http.Client{
|
||||||
|
Timeout: r.config.HttpTimeout,
|
||||||
|
Transport: customTransport,
|
||||||
|
}
|
||||||
|
|
||||||
// Create gofish client config
|
// Create gofish client config
|
||||||
for i := range r.config.ClientConfigs {
|
for i := range r.config.ClientConfigs {
|
||||||
clientConfig := &r.config.ClientConfigs[i]
|
clientConfig := &r.config.ClientConfigs[i]
|
||||||
@ -314,10 +331,7 @@ func NewRedfishReceiver(name string, config json.RawMessage) (Receiver, error) {
|
|||||||
}
|
}
|
||||||
gofishConfig.Password = *clientConfig.Password
|
gofishConfig.Password = *clientConfig.Password
|
||||||
|
|
||||||
gofishConfig.Insecure = true
|
gofishConfig.HTTPClient = httpClient
|
||||||
if clientConfig.Insecure != nil {
|
|
||||||
gofishConfig.Insecure = *clientConfig.Insecure
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return r, nil
|
return r, nil
|
||||||
|
Loading…
Reference in New Issue
Block a user