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) { func (o *InputClientConfig) CreateInputClient(log telegraf.Logger) (*OpcUAInputClient, error) {
err := o.Validate() if err := o.Validate(); err != nil {
if err != nil {
return nil, err return nil, err
} }
@ -97,15 +96,13 @@ func (o *InputClientConfig) CreateInputClient(log telegraf.Logger) (*OpcUAInputC
} }
log.Debug("Initialising node to metric mapping") log.Debug("Initialising node to metric mapping")
err = c.InitNodeMetricMapping() if err := c.InitNodeMetricMapping(); err != nil {
if err != nil {
return nil, err return nil, err
} }
c.initLastReceivedValues() c.initLastReceivedValues()
err = c.initNodeIDs() return c, nil
return c, err
} }
// NodeMetricMapping mapping from a single node to a metric // NodeMetricMapping mapping from a single node to a metric
@ -327,7 +324,7 @@ func (o *OpcUAInputClient) InitNodeMetricMapping() error {
return nil return nil
} }
func (o *OpcUAInputClient) initNodeIDs() error { func (o *OpcUAInputClient) InitNodeIDs() error {
o.NodeIDs = make([]*ua.NodeID, 0, len(o.NodeMetricMapping)) o.NodeIDs = make([]*ua.NodeID, 0, len(o.NodeMetricMapping))
for _, node := range o.NodeMetricMapping { for _, node := range o.NodeMetricMapping {
nid, err := ua.ParseNodeID(node.Tag.NodeID()) 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 { func (o *ReadClient) Connect() error {
err := o.OpcUAClient.Connect() if err := o.OpcUAClient.Connect(); err != nil {
if err != nil { return fmt.Errorf("connect failed: %w", err)
return 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)) readValueIds := make([]*ua.ReadValueID, 0, len(o.NodeIDs))
@ -67,7 +72,7 @@ func (o *ReadClient) Connect() error {
NodesToRegister: o.NodeIDs, NodesToRegister: o.NodeIDs,
}) })
if err != nil { if err != nil {
return fmt.Errorf("registerNodes failed: %w", err) return fmt.Errorf("registering nodes failed: %w", err)
} }
for _, v := range regResp.RegisteredNodeIDs { for _, v := range regResp.RegisteredNodeIDs {
@ -81,8 +86,7 @@ func (o *ReadClient) Connect() error {
NodesToRead: readValueIds, NodesToRead: readValueIds,
} }
err = o.read() if err := o.read(); err != nil {
if err != nil {
return fmt.Errorf("get data failed: %w", err) 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 { if err != nil {
return nil, err return nil, err
} }
if err := client.InitNodeIDs(); err != nil {
return nil, err
}
subClient := &SubscribeClient{ subClient := &SubscribeClient{
OpcUAInputClient: client, OpcUAInputClient: client,
Config: *sc, Config: *sc,