fix(inputs.opcua): Register node IDs again on reconnect (#13682)

This commit is contained in:
Sven Rebhan 2023-08-07 22:48:47 +02:00 committed by GitHub
parent 393d1b8b3a
commit 424283f138
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 13 deletions

View File

@ -79,8 +79,7 @@ func (o *InputClientConfig) Validate() error {
}
func (o *InputClientConfig) CreateInputClient(log telegraf.Logger) (*OpcUAInputClient, error) {
err := o.Validate()
if err != nil {
if err := o.Validate(); err != nil {
return nil, err
}
@ -97,15 +96,13 @@ func (o *InputClientConfig) CreateInputClient(log telegraf.Logger) (*OpcUAInputC
}
log.Debug("Initialising node to metric mapping")
err = c.InitNodeMetricMapping()
if err != nil {
if err := c.InitNodeMetricMapping(); err != nil {
return nil, err
}
c.initLastReceivedValues()
err = c.initNodeIDs()
return c, err
return c, nil
}
// NodeMetricMapping mapping from a single node to a metric
@ -327,7 +324,7 @@ func (o *OpcUAInputClient) InitNodeMetricMapping() error {
return nil
}
func (o *OpcUAInputClient) initNodeIDs() error {
func (o *OpcUAInputClient) InitNodeIDs() error {
o.NodeIDs = make([]*ua.NodeID, 0, len(o.NodeMetricMapping))
for _, node := range o.NodeMetricMapping {
nid, err := ua.ParseNodeID(node.Tag.NodeID())

View File

@ -52,9 +52,14 @@ func (rc *ReadClientConfig) CreateReadClient(log telegraf.Logger) (*ReadClient,
}
func (o *ReadClient) Connect() error {
err := o.OpcUAClient.Connect()
if err != nil {
return err
if err := o.OpcUAClient.Connect(); err != nil {
return fmt.Errorf("connect failed: %w", err)
}
// Make sure we setup the node-ids correctly after reconnect
// as the server might be restarted and IDs changed
if err := o.OpcUAInputClient.InitNodeIDs(); err != nil {
return fmt.Errorf("initializing node IDs failed: %w", err)
}
readValueIds := make([]*ua.ReadValueID, 0, len(o.NodeIDs))
@ -67,7 +72,7 @@ func (o *ReadClient) Connect() error {
NodesToRegister: o.NodeIDs,
})
if err != nil {
return fmt.Errorf("registerNodes failed: %w", err)
return fmt.Errorf("registering nodes failed: %w", err)
}
for _, v := range regResp.RegisteredNodeIDs {
@ -81,8 +86,7 @@ func (o *ReadClient) Connect() error {
NodesToRead: readValueIds,
}
err = o.read()
if err != nil {
if err := o.read(); err != nil {
return fmt.Errorf("get data failed: %w", err)
}

View File

@ -37,6 +37,11 @@ func (sc *SubscribeClientConfig) CreateSubscribeClient(log telegraf.Logger) (*Su
if err != nil {
return nil, err
}
if err := client.InitNodeIDs(); err != nil {
return nil, err
}
subClient := &SubscribeClient{
OpcUAInputClient: client,
Config: *sc,