fix(inputs.opcua): Make sure to always create a request (#15178)

This commit is contained in:
Sven Rebhan 2024-04-22 09:25:32 -04:00 committed by GitHub
parent 2de80263d5
commit a3ec8e86f3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 12 additions and 12 deletions

View File

@ -30,8 +30,8 @@ type ReadClient struct {
Workarounds ReadClientWorkarounds Workarounds ReadClientWorkarounds
// internal values // internal values
req *ua.ReadRequest reqIDs []*ua.ReadValueID
ctx context.Context ctx context.Context
} }
func (rc *ReadClientConfig) CreateReadClient(log telegraf.Logger) (*ReadClient, error) { 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) 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 { if o.Workarounds.UseUnregisteredReads {
for _, nid := range o.NodeIDs { for _, nid := range o.NodeIDs {
readValueIDs = append(readValueIDs, &ua.ReadValueID{NodeID: nid}) o.reqIDs = append(o.reqIDs, &ua.ReadValueID{NodeID: nid})
} }
} else { } else {
regResp, err := o.Client.RegisterNodes(o.ctx, &ua.RegisterNodesRequest{ regResp, err := o.Client.RegisterNodes(o.ctx, &ua.RegisterNodesRequest{
@ -79,16 +79,10 @@ func (o *ReadClient) Connect() error {
} }
for _, v := range regResp.RegisteredNodeIDs { 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 { if err := o.read(); err != nil {
return fmt.Errorf("get data failed: %w", err) return fmt.Errorf("get data failed: %w", err)
} }
@ -136,7 +130,13 @@ func (o *ReadClient) CurrentValues() ([]telegraf.Metric, error) {
} }
func (o *ReadClient) read() 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 { if err != nil {
o.ReadError.Incr(1) o.ReadError.Incr(1)
return fmt.Errorf("RegisterNodes Read failed: %w", err) return fmt.Errorf("RegisterNodes Read failed: %w", err)