fix(inputs.opcua): Register node IDs again on reconnect (#13682)
This commit is contained in:
parent
393d1b8b3a
commit
424283f138
|
|
@ -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())
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue