From a3ec8e86f3a1196e17b048fc62088f305e29313f Mon Sep 17 00:00:00 2001 From: Sven Rebhan <36194019+srebhan@users.noreply.github.com> Date: Mon, 22 Apr 2024 09:25:32 -0400 Subject: [PATCH] fix(inputs.opcua): Make sure to always create a request (#15178) --- plugins/inputs/opcua/read_client.go | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/plugins/inputs/opcua/read_client.go b/plugins/inputs/opcua/read_client.go index e52e03bba..b6f2a0d5a 100644 --- a/plugins/inputs/opcua/read_client.go +++ b/plugins/inputs/opcua/read_client.go @@ -30,8 +30,8 @@ type ReadClient struct { Workarounds ReadClientWorkarounds // internal values - req *ua.ReadRequest - ctx context.Context + reqIDs []*ua.ReadValueID + ctx context.Context } func (rc *ReadClientConfig) CreateReadClient(log telegraf.Logger) (*ReadClient, error) { @@ -65,10 +65,10 @@ func (o *ReadClient) Connect() error { return fmt.Errorf("initializing node IDs failed: %w", err) } - readValueIDs := make([]*ua.ReadValueID, 0, len(o.NodeIDs)) + o.reqIDs = make([]*ua.ReadValueID, 0, len(o.NodeIDs)) if o.Workarounds.UseUnregisteredReads { for _, nid := range o.NodeIDs { - readValueIDs = append(readValueIDs, &ua.ReadValueID{NodeID: nid}) + o.reqIDs = append(o.reqIDs, &ua.ReadValueID{NodeID: nid}) } } else { regResp, err := o.Client.RegisterNodes(o.ctx, &ua.RegisterNodesRequest{ @@ -79,16 +79,10 @@ func (o *ReadClient) Connect() error { } for _, v := range regResp.RegisteredNodeIDs { - readValueIDs = append(readValueIDs, &ua.ReadValueID{NodeID: v}) + o.reqIDs = append(o.reqIDs, &ua.ReadValueID{NodeID: v}) } } - o.req = &ua.ReadRequest{ - MaxAge: 2000, - TimestampsToReturn: ua.TimestampsToReturnBoth, - NodesToRead: readValueIDs, - } - if err := o.read(); err != nil { return fmt.Errorf("get data failed: %w", err) } @@ -136,7 +130,13 @@ func (o *ReadClient) CurrentValues() ([]telegraf.Metric, error) { } func (o *ReadClient) read() error { - resp, err := o.Client.Read(o.ctx, o.req) + req := &ua.ReadRequest{ + MaxAge: 2000, + TimestampsToReturn: ua.TimestampsToReturnBoth, + NodesToRead: o.reqIDs, + } + + resp, err := o.Client.Read(o.ctx, req) if err != nil { o.ReadError.Incr(1) return fmt.Errorf("RegisterNodes Read failed: %w", err)