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) {
|
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())
|
||||||
|
|
|
||||||
|
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue