Read durations as string from json config

This commit is contained in:
Holger Obermaier 2022-07-22 17:48:11 +02:00
parent aedc1be277
commit f818bf4c11

View File

@ -25,12 +25,14 @@ type RedfishReceiver struct {
// Maximum number of simultaneous redfish connections (default: 64) // Maximum number of simultaneous redfish connections (default: 64)
Fanout int `json:"fanout,omitempty"` Fanout int `json:"fanout,omitempty"`
// How often the redfish power metrics should be read and send to the sink (default: 30 s) // How often the redfish power metrics should be read and send to the sink (default: 30 s)
Interval int `json:"interval,omitempty"` IntervalString string `json:"interval,omitempty"`
Interval time.Duration
// Control whether a client verifies the server's certificate (default: true) // Control whether a client verifies the server's certificate (default: true)
HttpInsecure bool `json:"http_insecure,omitempty"` HttpInsecure bool `json:"http_insecure,omitempty"`
// Time limit for requests made by this HTTP client (default: 10 s) // Time limit for requests made by this HTTP client (default: 10 s)
HttpTimeout time.Duration `json:"http_timeout,omitempty"` HttpTimeoutString string `json:"http_timeout,omitempty"`
HttpTimeout time.Duration
// Client config for each redfish service // Client config for each redfish service
ClientConfigs []struct { ClientConfigs []struct {
@ -120,15 +122,19 @@ func (r *RedfishReceiver) Start() {
tags := map[string]string{ tags := map[string]string{
"hostname": *clientConfig.Hostname, "hostname": *clientConfig.Hostname,
"type": "node", "type": "node",
// ChassisType shall indicate the physical form factor for the type of chassis
"chassis_typ": string(chassis.ChassisType),
// Chassis name
"chassis_name": chassis.Name,
// ID uniquely identifies the resource // ID uniquely identifies the resource
"id": pc.ID, "power_control_id": pc.ID,
// MemberID shall uniquely identify the member within the collection. For // MemberID shall uniquely identify the member within the collection. For
// services supporting Redfish v1.6 or higher, this value shall be the // services supporting Redfish v1.6 or higher, this value shall be the
// zero-based array index. // zero-based array index.
"member_id": pc.MemberID, "power_control_member_id": pc.MemberID,
// PhysicalContext shall be a description of the affected device(s) or region // PhysicalContext shall be a description of the affected device(s) or region
// within the chassis to which this power control applies. // within the chassis to which this power control applies.
"physical_context": string(pc.PhysicalContext), "power_control_physical_context": string(pc.PhysicalContext),
// Name // Name
"power_control_name": pc.Name, "power_control_name": pc.Name,
} }
@ -231,7 +237,7 @@ func (r *RedfishReceiver) Start() {
defer r.wg.Done() defer r.wg.Done()
// Create ticker // Create ticker
ticker := time.NewTicker(time.Duration(r.config.Interval) * time.Second) ticker := time.NewTicker(r.config.Interval)
defer ticker.Stop() defer ticker.Stop()
for { for {
@ -276,8 +282,8 @@ func NewRedfishReceiver(name string, config json.RawMessage) (Receiver, error) {
// Set defaults in r.config // Set defaults in r.config
// 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.IntervalString = "30s"
r.config.HttpTimeout = 10 * time.Second r.config.HttpTimeoutString = "10s"
r.config.HttpInsecure = true r.config.HttpInsecure = true
// Read the redfish receiver specific JSON config // Read the redfish receiver specific JSON config
@ -289,6 +295,31 @@ func NewRedfishReceiver(name string, config json.RawMessage) (Receiver, error) {
} }
} }
// interval duration
var err error
r.config.Interval, err = time.ParseDuration(r.config.IntervalString)
if err != nil {
err := fmt.Errorf(
"Failed to parse duration string interval='%s': %w",
r.config.IntervalString,
err,
)
cclog.Error(r.name, err)
return nil, err
}
// HTTP timeout duration
r.config.HttpTimeout, err = time.ParseDuration(r.config.HttpTimeoutString)
if err != nil {
err := fmt.Errorf(
"Failed to parse duration string http_timeout='%s': %w",
r.config.HttpTimeoutString,
err,
)
cclog.Error(r.name, err)
return nil, err
}
// Create new http client // Create new http client
customTransport := http.DefaultTransport.(*http.Transport).Clone() customTransport := http.DefaultTransport.(*http.Transport).Clone()
customTransport.TLSClientConfig = &tls.Config{ customTransport.TLSClientConfig = &tls.Config{