node-opcua-client 2.127.1 → 2.129.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client_base.d.ts +5 -1
- package/dist/client_base.js.map +1 -1
- package/dist/opcua_client.d.ts +6 -0
- package/dist/opcua_client.js.map +1 -1
- package/dist/private/client_base_impl.d.ts +2 -2
- package/dist/private/client_base_impl.js +6 -6
- package/dist/private/client_base_impl.js.map +1 -1
- package/dist/private/client_publish_engine.js +7 -5
- package/dist/private/client_publish_engine.js.map +1 -1
- package/dist/private/client_session_impl.d.ts +12 -6
- package/dist/private/client_session_impl.js +49 -40
- package/dist/private/client_session_impl.js.map +1 -1
- package/dist/private/opcua_client_impl.d.ts +2 -4
- package/dist/private/opcua_client_impl.js +2 -4
- package/dist/private/opcua_client_impl.js.map +1 -1
- package/dist/private/reconnection/reconnection.js +22 -9
- package/dist/private/reconnection/reconnection.js.map +1 -1
- package/package.json +43 -46
- package/source/client_base.ts +5 -1
- package/source/opcua_client.ts +8 -0
- package/source/private/client_base_impl.ts +11 -9
- package/source/private/client_publish_engine.ts +7 -6
- package/source/private/client_session_impl.ts +33 -40
- package/source/private/opcua_client_impl.ts +5 -4
- package/source/private/reconnection/reconnection.ts +35 -23
- package/dist/alarms_and_conditions/client_alarm.d.ts +0 -49
- package/dist/alarms_and_conditions/client_alarm.js +0 -97
- package/dist/alarms_and_conditions/client_alarm.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_list.d.ts +0 -25
- package/dist/alarms_and_conditions/client_alarm_list.js +0 -98
- package/dist/alarms_and_conditions/client_alarm_list.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.d.ts +0 -18
- package/dist/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.js +0 -175
- package/dist/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_tools_dump_event.d.ts +0 -9
- package/dist/alarms_and_conditions/client_alarm_tools_dump_event.js +0 -60
- package/dist/alarms_and_conditions/client_alarm_tools_dump_event.js.map +0 -1
- package/dist/alarms_and_conditions/client_alarm_tools_extractConditionFields.d.ts +0 -3
- package/dist/alarms_and_conditions/client_alarm_tools_extractConditionFields.js +0 -15
- package/dist/alarms_and_conditions/client_alarm_tools_extractConditionFields.js.map +0 -1
- package/dist/reconnection.d.ts +0 -9
- package/dist/reconnection.js +0 -453
- package/dist/reconnection.js.map +0 -1
|
@@ -55,6 +55,7 @@ import { repair_client_sessions } from "./reconnection/reconnection";
|
|
|
55
55
|
import { ClientBaseImpl } from "./client_base_impl";
|
|
56
56
|
import { ClientSessionImpl } from "./client_session_impl";
|
|
57
57
|
import { IClientBase } from "./i_private_client";
|
|
58
|
+
import { DataTypeExtractStrategy } from "node-opcua-client-dynamic-extension-object";
|
|
58
59
|
|
|
59
60
|
interface TokenAndSignature {
|
|
60
61
|
userIdentityToken: UserIdentityToken | null;
|
|
@@ -370,10 +371,6 @@ function _adjustRevisedSessionTimeout(revisedSessionTimeout: number, requestedTi
|
|
|
370
371
|
return revisedSessionTimeout;
|
|
371
372
|
}
|
|
372
373
|
|
|
373
|
-
/***
|
|
374
|
-
* @constructor
|
|
375
|
-
* @internal
|
|
376
|
-
*/
|
|
377
374
|
export class OPCUAClientImpl extends ClientBaseImpl implements OPCUAClient {
|
|
378
375
|
public static minimumRevisedSessionTimeout = 100.0;
|
|
379
376
|
private _retryCreateSessionTimer?: NodeJS.Timeout;
|
|
@@ -390,10 +387,14 @@ export class OPCUAClientImpl extends ClientBaseImpl implements OPCUAClient {
|
|
|
390
387
|
private serverUri?: string;
|
|
391
388
|
private clientNonce?: Nonce;
|
|
392
389
|
|
|
390
|
+
public dataTypeExtractStrategy: DataTypeExtractStrategy;
|
|
391
|
+
|
|
393
392
|
constructor(options?: OPCUAClientOptions) {
|
|
394
393
|
options = options || {};
|
|
395
394
|
super(options);
|
|
396
395
|
|
|
396
|
+
this.dataTypeExtractStrategy = options.dataTypeExtractStrategy || DataTypeExtractStrategy.Auto;
|
|
397
|
+
|
|
397
398
|
// @property endpointMustExist {Boolean}
|
|
398
399
|
// if set to true , create Session will only accept connection from server which endpoint_url has been reported
|
|
399
400
|
// by GetEndpointsRequest.
|
|
@@ -216,19 +216,19 @@ function repair_client_session_by_recreating_a_new_session(
|
|
|
216
216
|
doDebug && debugLog(chalk.red(" => RECREATING SUBSCRIPTION "), subscriptionId);
|
|
217
217
|
assert(subscription.session === newSession, "must have the new session");
|
|
218
218
|
|
|
219
|
-
recreateSubscriptionAndMonitoredItem(subscription)
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
219
|
+
recreateSubscriptionAndMonitoredItem(subscription)
|
|
220
|
+
.then(() => {
|
|
221
|
+
doDebug &&
|
|
222
|
+
debugLog(
|
|
223
|
+
chalk.cyan(" => RECREATING SUBSCRIPTION AND MONITORED ITEM DONE subscriptionId="),
|
|
224
|
+
subscriptionId
|
|
225
|
+
);
|
|
226
|
+
next();
|
|
227
|
+
})
|
|
228
|
+
.catch((err) => {
|
|
229
|
+
doDebug && debugLog("_recreateSubscription failed !" + (err as Error).message);
|
|
230
|
+
next();
|
|
231
|
+
});
|
|
232
232
|
},
|
|
233
233
|
(err1?: Error | null) => {
|
|
234
234
|
// prettier-ignore
|
|
@@ -310,18 +310,25 @@ function repair_client_session_by_recreating_a_new_session(
|
|
|
310
310
|
if (!client.beforeSubscriptionRecreate) {
|
|
311
311
|
innerCallback();
|
|
312
312
|
return;
|
|
313
|
-
|
|
314
313
|
}
|
|
315
|
-
client
|
|
314
|
+
client
|
|
315
|
+
.beforeSubscriptionRecreate(newSession)
|
|
316
316
|
.then((err) => {
|
|
317
|
-
{
|
|
317
|
+
{
|
|
318
|
+
const err = _shouldNotContinue(session);
|
|
319
|
+
if (err) {
|
|
320
|
+
return innerCallback(err);
|
|
321
|
+
}
|
|
322
|
+
}
|
|
318
323
|
if (!err) {
|
|
319
324
|
innerCallback();
|
|
320
325
|
} else {
|
|
321
326
|
innerCallback(err);
|
|
322
327
|
}
|
|
323
328
|
})
|
|
324
|
-
.catch((err) => {
|
|
329
|
+
.catch((err) => {
|
|
330
|
+
innerCallback(err);
|
|
331
|
+
});
|
|
325
332
|
},
|
|
326
333
|
|
|
327
334
|
function attempt_subscription_transfer(innerCallback: ErrorCallback) {
|
|
@@ -506,7 +513,7 @@ export function repair_client_session(client: IClientBase, session: ClientSessio
|
|
|
506
513
|
privateSession._reconnecting.reconnecting = true;
|
|
507
514
|
|
|
508
515
|
// get old transaction queue ...
|
|
509
|
-
const transactionQueue =
|
|
516
|
+
const transactionQueue = privateSession._reconnecting.pendingTransactions.splice(0);
|
|
510
517
|
|
|
511
518
|
const repeatedAction = (callback: EmptyCallback) => {
|
|
512
519
|
// prettier-ignore
|
|
@@ -527,6 +534,10 @@ export function repair_client_session(client: IClientBase, session: ClientSessio
|
|
|
527
534
|
const delay = 2000;
|
|
528
535
|
errorLog(chalk.red(`... will retry session repair... in ${delay} ms`));
|
|
529
536
|
setTimeout(() => {
|
|
537
|
+
{ const err = _shouldNotContinue(session); if (err) {
|
|
538
|
+
warningLog("cancelling session repair");
|
|
539
|
+
return callback(err);
|
|
540
|
+
} }
|
|
530
541
|
errorLog(chalk.red("Retrying session repair..."));
|
|
531
542
|
repeatedAction(callback);
|
|
532
543
|
}, delay);
|
|
@@ -547,13 +558,14 @@ export function repair_client_session(client: IClientBase, session: ClientSessio
|
|
|
547
558
|
};
|
|
548
559
|
repeatedAction((err) => {
|
|
549
560
|
privateSession._reconnecting.reconnecting = false;
|
|
550
|
-
|
|
551
|
-
const otherCallbacks = privateSession._reconnecting.pendingCallbacks;
|
|
552
|
-
privateSession._reconnecting.pendingCallbacks = [];
|
|
561
|
+
const otherCallbacks = privateSession._reconnecting.pendingCallbacks.splice(0);
|
|
553
562
|
// re-inject element in queue
|
|
563
|
+
|
|
554
564
|
// istanbul ignore next
|
|
555
|
-
|
|
556
|
-
|
|
565
|
+
if (transactionQueue.length > 0) {
|
|
566
|
+
doDebug && debugLog(chalk.yellow("re-injecting transaction queue"), transactionQueue.length);
|
|
567
|
+
transactionQueue.forEach((e: any) => privateSession._reconnecting.pendingTransactions.push(e));
|
|
568
|
+
}
|
|
557
569
|
otherCallbacks.forEach((c: EmptyCallback) => c(err));
|
|
558
570
|
callback(err);
|
|
559
571
|
});
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
/// <reference types="node" />
|
|
3
|
-
import { EventEmitter } from "events";
|
|
4
|
-
import { NodeId } from "node-opcua-nodeid";
|
|
5
|
-
import { StatusCode } from "node-opcua-status-code";
|
|
6
|
-
import { Variant } from "node-opcua-variant";
|
|
7
|
-
import { ClientSession } from "../client_session";
|
|
8
|
-
export interface TVariant<T> extends Variant {
|
|
9
|
-
value: T;
|
|
10
|
-
}
|
|
11
|
-
export interface TTwoStateStatus extends TVariant<string> {
|
|
12
|
-
id: TVariant<boolean>;
|
|
13
|
-
}
|
|
14
|
-
export interface EventStuff {
|
|
15
|
-
conditionId: TVariant<NodeId>;
|
|
16
|
-
eventType: TVariant<NodeId>;
|
|
17
|
-
eventId: TVariant<Buffer>;
|
|
18
|
-
retain: TVariant<boolean>;
|
|
19
|
-
activeState: TTwoStateStatus;
|
|
20
|
-
ackedState: TTwoStateStatus;
|
|
21
|
-
confirmedState: TTwoStateStatus;
|
|
22
|
-
conditionName?: TVariant<string>;
|
|
23
|
-
}
|
|
24
|
-
export interface ClientAlarm {
|
|
25
|
-
conditionId: NodeId;
|
|
26
|
-
eventType: NodeId;
|
|
27
|
-
fields: EventStuff;
|
|
28
|
-
on(eventName: "changed", eventHandler: () => void): this;
|
|
29
|
-
acknowledge(session: ClientSession, comment: string): Promise<StatusCode>;
|
|
30
|
-
getField(fieldName: string): Variant | null;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* describes a OPCUA Alarm as seen in the client side
|
|
34
|
-
*/
|
|
35
|
-
export declare class ClientAlarm extends EventEmitter {
|
|
36
|
-
conditionId: NodeId;
|
|
37
|
-
eventType: NodeId;
|
|
38
|
-
eventId: Buffer;
|
|
39
|
-
fields: EventStuff;
|
|
40
|
-
constructor(eventFields: EventStuff);
|
|
41
|
-
confirm(session: ClientSession, comment: string): Promise<StatusCode>;
|
|
42
|
-
update(eventFields: EventStuff): void;
|
|
43
|
-
getRetain(): boolean;
|
|
44
|
-
toString(): string;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* @private
|
|
48
|
-
*/
|
|
49
|
-
export declare function fieldsToJson(fields: string[], eventFields: Variant[], flat?: boolean): EventStuff;
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.fieldsToJson = exports.ClientAlarm = void 0;
|
|
4
|
-
const events_1 = require("events");
|
|
5
|
-
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
6
|
-
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
7
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
8
|
-
const node_opcua_utils_1 = require("node-opcua-utils");
|
|
9
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
10
|
-
const warningLog = (0, node_opcua_debug_1.make_warningLog)(__filename);
|
|
11
|
-
/**
|
|
12
|
-
* describes a OPCUA Alarm as seen in the client side
|
|
13
|
-
*/
|
|
14
|
-
class ClientAlarm extends events_1.EventEmitter {
|
|
15
|
-
constructor(eventFields) {
|
|
16
|
-
super();
|
|
17
|
-
this.conditionId = (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.conditionId.value);
|
|
18
|
-
this.eventType = (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.eventType.value);
|
|
19
|
-
this.eventId = eventFields.eventId.value;
|
|
20
|
-
this.fields = eventFields;
|
|
21
|
-
this.update(eventFields);
|
|
22
|
-
}
|
|
23
|
-
async acknowledge(session, comment) {
|
|
24
|
-
return await session.acknowledgeCondition(this.conditionId, this.eventId, comment);
|
|
25
|
-
}
|
|
26
|
-
async confirm(session, comment) {
|
|
27
|
-
return await session.confirmCondition(this.conditionId, this.eventId, comment);
|
|
28
|
-
}
|
|
29
|
-
update(eventFields) {
|
|
30
|
-
(0, node_opcua_assert_1.assert)(this.conditionId.toString() === (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.conditionId.value).toString());
|
|
31
|
-
(0, node_opcua_assert_1.assert)(this.eventType.toString() === (0, node_opcua_nodeid_1.resolveNodeId)(eventFields.eventType.value).toString());
|
|
32
|
-
this.eventId = eventFields.eventId.value;
|
|
33
|
-
this.fields = eventFields;
|
|
34
|
-
}
|
|
35
|
-
getRetain() {
|
|
36
|
-
return this.fields.retain.value;
|
|
37
|
-
}
|
|
38
|
-
toString() {
|
|
39
|
-
return (this.constructor.name +
|
|
40
|
-
": " +
|
|
41
|
-
this.conditionId.toString() +
|
|
42
|
-
" " +
|
|
43
|
-
this.eventType.toString() +
|
|
44
|
-
" " +
|
|
45
|
-
Object.entries(this.fields)
|
|
46
|
-
.filter(([key, value]) => value.dataType !== node_opcua_variant_1.DataType.Null)
|
|
47
|
-
.map(([key, value]) => key.padEnd(30) + "=" + value.toString())
|
|
48
|
-
.join("\n") +
|
|
49
|
-
"\n\n");
|
|
50
|
-
}
|
|
51
|
-
getField(fieldName) {
|
|
52
|
-
return this.fields[fieldName] || null;
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
exports.ClientAlarm = ClientAlarm;
|
|
56
|
-
/**
|
|
57
|
-
* @private
|
|
58
|
-
*/
|
|
59
|
-
function fieldsToJson(fields, eventFields, flat) {
|
|
60
|
-
function setProperty(_data, fieldName, value) {
|
|
61
|
-
let name;
|
|
62
|
-
if (!fieldName || value === null) {
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
if (!flat) {
|
|
66
|
-
const f = fieldName.split(".");
|
|
67
|
-
if (f.length === 1) {
|
|
68
|
-
fieldName = (0, node_opcua_utils_1.lowerFirstLetter)(fieldName);
|
|
69
|
-
_data[fieldName] = value;
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
for (let i = 0; i < f.length - 1; i++) {
|
|
73
|
-
name = (0, node_opcua_utils_1.lowerFirstLetter)(f[i]);
|
|
74
|
-
_data[name] = _data[name] || {};
|
|
75
|
-
_data = _data[name];
|
|
76
|
-
}
|
|
77
|
-
name = (0, node_opcua_utils_1.lowerFirstLetter)(f[f.length - 1]);
|
|
78
|
-
_data[name] = value;
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
else {
|
|
82
|
-
const name = fieldName.split(".").map(node_opcua_utils_1.lowerFirstLetter).join(".");
|
|
83
|
-
_data[name] = value;
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
if (fields.length > eventFields.length) {
|
|
87
|
-
warningLog("warning fields.length !== eventFields.length", fields.length, eventFields.length);
|
|
88
|
-
}
|
|
89
|
-
const data = {};
|
|
90
|
-
for (let index = 0; index < fields.length; index++) {
|
|
91
|
-
const variant = eventFields[index];
|
|
92
|
-
setProperty(data, fields[index], variant);
|
|
93
|
-
}
|
|
94
|
-
return data;
|
|
95
|
-
}
|
|
96
|
-
exports.fieldsToJson = fieldsToJson;
|
|
97
|
-
//# sourceMappingURL=client_alarm.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
/// <reference types="node" />
|
|
2
|
-
import { EventEmitter } from "events";
|
|
3
|
-
import { ClientAlarm, EventStuff } from "./client_alarm";
|
|
4
|
-
export interface ClientAlarmList {
|
|
5
|
-
on(eventName: "alarmChanged", handler: (alarm: ClientAlarm) => void): this;
|
|
6
|
-
on(eventName: "alarmDeleted", handler: (alarm: ClientAlarm) => void): this;
|
|
7
|
-
on(eventName: "newAlarm", handler: (alarm: ClientAlarm) => void): this;
|
|
8
|
-
emit(eventName: "alarmChanged", alarm: ClientAlarm): boolean;
|
|
9
|
-
emit(eventName: "newAlarm", alarm: ClientAlarm): boolean;
|
|
10
|
-
emit(eventName: "alarmDeleted", alarm: ClientAlarm): boolean;
|
|
11
|
-
}
|
|
12
|
-
export declare class ClientAlarmList extends EventEmitter implements Iterable<ClientAlarm> {
|
|
13
|
-
private _map;
|
|
14
|
-
constructor();
|
|
15
|
-
[Symbol.iterator](): Iterator<ClientAlarm>;
|
|
16
|
-
alarms(): ClientAlarm[];
|
|
17
|
-
update(eventField: EventStuff): void;
|
|
18
|
-
removeAlarm(eventField: EventStuff): void;
|
|
19
|
-
get length(): number;
|
|
20
|
-
purgeUnusedAlarms(): void;
|
|
21
|
-
private _removeAlarm;
|
|
22
|
-
private makeKey;
|
|
23
|
-
private findAlarm;
|
|
24
|
-
private deleteAlarm;
|
|
25
|
-
}
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.ClientAlarmList = void 0;
|
|
4
|
-
const events_1 = require("events");
|
|
5
|
-
const node_opcua_assert_1 = require("node-opcua-assert");
|
|
6
|
-
const client_alarm_1 = require("./client_alarm");
|
|
7
|
-
// maintain a set of alarm list for a client
|
|
8
|
-
class ClientAlarmList extends events_1.EventEmitter {
|
|
9
|
-
constructor() {
|
|
10
|
-
super();
|
|
11
|
-
this._map = {};
|
|
12
|
-
}
|
|
13
|
-
[Symbol.iterator]() {
|
|
14
|
-
let pointer = 0;
|
|
15
|
-
const components = Object.values(this._map);
|
|
16
|
-
return {
|
|
17
|
-
next() {
|
|
18
|
-
if (pointer >= components.length) {
|
|
19
|
-
return {
|
|
20
|
-
done: true,
|
|
21
|
-
value: components[pointer++]
|
|
22
|
-
};
|
|
23
|
-
}
|
|
24
|
-
else {
|
|
25
|
-
return {
|
|
26
|
-
done: false,
|
|
27
|
-
value: components[pointer++]
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
alarms() {
|
|
34
|
-
return Object.values(this._map);
|
|
35
|
-
}
|
|
36
|
-
update(eventField) {
|
|
37
|
-
// Spec says:
|
|
38
|
-
// Clients shall check for multiple Event Notifications for a ConditionBranch to avoid
|
|
39
|
-
// overwriting a new state delivered together with an older state from the Refresh
|
|
40
|
-
// process.
|
|
41
|
-
const { conditionId, eventType } = eventField;
|
|
42
|
-
(0, node_opcua_assert_1.assert)(conditionId, "must have a valid conditionId ( verify that event is a acknodweldgeable type");
|
|
43
|
-
const alarm = this.findAlarm(conditionId.value, eventType.value);
|
|
44
|
-
if (!alarm) {
|
|
45
|
-
const key = this.makeKey(conditionId.value, eventType.value);
|
|
46
|
-
const newAlarm = new client_alarm_1.ClientAlarm(eventField);
|
|
47
|
-
this._map[key] = newAlarm;
|
|
48
|
-
this.emit("newAlarm", newAlarm);
|
|
49
|
-
this.emit("alarmChanged", newAlarm);
|
|
50
|
-
}
|
|
51
|
-
else {
|
|
52
|
-
alarm.update(eventField);
|
|
53
|
-
this.emit("alarmChanged", alarm);
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
removeAlarm(eventField) {
|
|
57
|
-
const { conditionId, eventType } = eventField;
|
|
58
|
-
const alarm = this.findAlarm(conditionId.value, eventType.value);
|
|
59
|
-
if (alarm) {
|
|
60
|
-
alarm.update(eventField);
|
|
61
|
-
this._removeAlarm(alarm);
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
get length() {
|
|
65
|
-
return Object.keys(this._map).length;
|
|
66
|
-
}
|
|
67
|
-
purgeUnusedAlarms() {
|
|
68
|
-
const alarms = this.alarms();
|
|
69
|
-
for (const alarm of alarms) {
|
|
70
|
-
if (!alarm.getRetain()) {
|
|
71
|
-
this._removeAlarm(alarm);
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
_removeAlarm(alarm) {
|
|
76
|
-
this.emit("alarmDeleted", alarm);
|
|
77
|
-
this.deleteAlarm(alarm.conditionId, alarm.eventType);
|
|
78
|
-
}
|
|
79
|
-
makeKey(conditionId, eventType) {
|
|
80
|
-
return conditionId.toString() + "|" + eventType.toString();
|
|
81
|
-
}
|
|
82
|
-
findAlarm(conditionId, eventType) {
|
|
83
|
-
const key = this.makeKey(conditionId, eventType);
|
|
84
|
-
const _c = this._map[key];
|
|
85
|
-
return _c || null;
|
|
86
|
-
}
|
|
87
|
-
deleteAlarm(conditionId, eventType) {
|
|
88
|
-
const key = this.makeKey(conditionId, eventType);
|
|
89
|
-
const _c = this._map[key];
|
|
90
|
-
if (_c) {
|
|
91
|
-
delete this._map[key];
|
|
92
|
-
return true;
|
|
93
|
-
}
|
|
94
|
-
return false;
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
exports.ClientAlarmList = ClientAlarmList;
|
|
98
|
-
//# sourceMappingURL=client_alarm_list.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm_list.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm_list.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { StatusCode } from "node-opcua-status-code";
|
|
2
|
-
import { ClientSession } from "../client_session";
|
|
3
|
-
import { EventStuff } from "./client_alarm";
|
|
4
|
-
/**
|
|
5
|
-
*
|
|
6
|
-
* @param session
|
|
7
|
-
* @param eventStuff
|
|
8
|
-
* @param comment
|
|
9
|
-
*/
|
|
10
|
-
export declare function acknowledgeCondition(session: ClientSession, eventStuff: EventStuff, comment: string): Promise<StatusCode>;
|
|
11
|
-
export declare function confirmCondition(session: ClientSession, eventStuff: EventStuff, comment: string): Promise<StatusCode>;
|
|
12
|
-
/**
|
|
13
|
-
* Enumerate all events
|
|
14
|
-
* @param session
|
|
15
|
-
*/
|
|
16
|
-
export declare function findActiveConditions(session: ClientSession): Promise<EventStuff[]>;
|
|
17
|
-
export declare function acknowledgeAllConditions(session: ClientSession, message: string): Promise<void>;
|
|
18
|
-
export declare function confirmAllConditions(session: ClientSession, message: string): Promise<void>;
|
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.confirmAllConditions = exports.acknowledgeAllConditions = exports.findActiveConditions = exports.confirmCondition = exports.acknowledgeCondition = void 0;
|
|
4
|
-
const node_opcua_nodeid_1 = require("node-opcua-nodeid");
|
|
5
|
-
const node_opcua_service_filter_1 = require("node-opcua-service-filter");
|
|
6
|
-
const node_opcua_service_read_1 = require("node-opcua-service-read");
|
|
7
|
-
const node_opcua_status_code_1 = require("node-opcua-status-code");
|
|
8
|
-
const node_opcua_variant_1 = require("node-opcua-variant");
|
|
9
|
-
const node_opcua_debug_1 = require("node-opcua-debug");
|
|
10
|
-
const client_alarm_1 = require("./client_alarm");
|
|
11
|
-
const client_alarm_tools_extractConditionFields_1 = require("./client_alarm_tools_extractConditionFields");
|
|
12
|
-
const client_tools_1 = require("./client_tools");
|
|
13
|
-
const doDebug = (0, node_opcua_debug_1.checkDebugFlag)(__filename);
|
|
14
|
-
const debugLog = (0, node_opcua_debug_1.make_debugLog)(__filename);
|
|
15
|
-
const errorLog = (0, node_opcua_debug_1.make_errorLog)(__filename);
|
|
16
|
-
/**
|
|
17
|
-
*
|
|
18
|
-
* @param session
|
|
19
|
-
* @param eventStuff
|
|
20
|
-
* @param comment
|
|
21
|
-
*/
|
|
22
|
-
async function acknowledgeCondition(session, eventStuff, comment) {
|
|
23
|
-
try {
|
|
24
|
-
const conditionId = eventStuff.conditionId.value;
|
|
25
|
-
const eventId = eventStuff.eventId.value;
|
|
26
|
-
return await session.acknowledgeCondition(conditionId, eventId, comment);
|
|
27
|
-
}
|
|
28
|
-
catch (err) {
|
|
29
|
-
errorLog("Acknowledging alarm has failed !", err);
|
|
30
|
-
return node_opcua_status_code_1.StatusCodes.BadInternalError;
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
exports.acknowledgeCondition = acknowledgeCondition;
|
|
34
|
-
async function confirmCondition(session, eventStuff, comment) {
|
|
35
|
-
try {
|
|
36
|
-
const conditionId = eventStuff.conditionId.value;
|
|
37
|
-
const eventId = eventStuff.eventId.value;
|
|
38
|
-
return await session.confirmCondition(conditionId, eventId, comment);
|
|
39
|
-
}
|
|
40
|
-
catch (err) {
|
|
41
|
-
errorLog("Acknowledging alarm has failed !", err);
|
|
42
|
-
return node_opcua_status_code_1.StatusCodes.BadInternalError;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.confirmCondition = confirmCondition;
|
|
46
|
-
/**
|
|
47
|
-
* Enumerate all events
|
|
48
|
-
* @param session
|
|
49
|
-
*/
|
|
50
|
-
async function findActiveConditions(session) {
|
|
51
|
-
const request = {
|
|
52
|
-
maxNotificationsPerPublish: 10000,
|
|
53
|
-
priority: 6,
|
|
54
|
-
publishingEnabled: true,
|
|
55
|
-
requestedLifetimeCount: 1000,
|
|
56
|
-
requestedMaxKeepAliveCount: 100,
|
|
57
|
-
requestedPublishingInterval: 100
|
|
58
|
-
};
|
|
59
|
-
const subscription = await session.createSubscription2(request);
|
|
60
|
-
const itemToMonitor = {
|
|
61
|
-
attributeId: node_opcua_service_read_1.AttributeIds.EventNotifier,
|
|
62
|
-
nodeId: (0, node_opcua_nodeid_1.resolveNodeId)("Server") // i=2253
|
|
63
|
-
};
|
|
64
|
-
const fields = await (0, client_alarm_tools_extractConditionFields_1.extractConditionFields)(session, "AcknowledgeableConditionType");
|
|
65
|
-
// note: we may want to have this select clause
|
|
66
|
-
// Or(OfType("AcknowledgeableConditionType"), OfType("RefreshStartEventType"), OfType("RefreshEndEventType"))
|
|
67
|
-
const eventFilter = (0, node_opcua_service_filter_1.constructEventFilter)(fields);
|
|
68
|
-
const monitoringParameters = {
|
|
69
|
-
discardOldest: false,
|
|
70
|
-
filter: eventFilter,
|
|
71
|
-
queueSize: 100,
|
|
72
|
-
samplingInterval: 0
|
|
73
|
-
};
|
|
74
|
-
const event_monitoringItem = await subscription.monitor(itemToMonitor, monitoringParameters, node_opcua_service_read_1.TimestampsToReturn.Both);
|
|
75
|
-
const acknowledgeableConditions = [];
|
|
76
|
-
let refreshStartEventHasBeenReceived = false;
|
|
77
|
-
let RefreshEndEventHasBeenReceived = false;
|
|
78
|
-
const RefreshStartEventType = (0, node_opcua_nodeid_1.resolveNodeId)("RefreshStartEventType").toString();
|
|
79
|
-
const RefreshEndEventType = (0, node_opcua_nodeid_1.resolveNodeId)("RefreshEndEventType").toString();
|
|
80
|
-
const promise = new Promise((resolve, reject) => {
|
|
81
|
-
// now create a event monitored Item
|
|
82
|
-
event_monitoringItem.on("changed", (_eventFields) => {
|
|
83
|
-
const eventFields = _eventFields;
|
|
84
|
-
try {
|
|
85
|
-
if (RefreshEndEventHasBeenReceived) {
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
// dumpEvent(session, fields, eventFields);
|
|
89
|
-
const pojo = (0, client_alarm_1.fieldsToJson)(fields, eventFields);
|
|
90
|
-
// make sure we only start recording event after the RefreshStartEvent has been received
|
|
91
|
-
if (!refreshStartEventHasBeenReceived) {
|
|
92
|
-
if (pojo.eventType.value.toString() === RefreshStartEventType) {
|
|
93
|
-
refreshStartEventHasBeenReceived = true;
|
|
94
|
-
}
|
|
95
|
-
return;
|
|
96
|
-
}
|
|
97
|
-
if (pojo.eventType.value.toString() === RefreshEndEventType) {
|
|
98
|
-
RefreshEndEventHasBeenReceived = true;
|
|
99
|
-
resolve();
|
|
100
|
-
return;
|
|
101
|
-
}
|
|
102
|
-
if (!pojo.conditionId.value) {
|
|
103
|
-
// not a Acknowledgeable condition
|
|
104
|
-
return;
|
|
105
|
-
}
|
|
106
|
-
if (pojo.ackedState.id.dataType === node_opcua_variant_1.DataType.Boolean) {
|
|
107
|
-
acknowledgeableConditions.push(pojo);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
catch (err) {
|
|
111
|
-
errorLog("Error !!", err);
|
|
112
|
-
}
|
|
113
|
-
});
|
|
114
|
-
// async call without waiting !
|
|
115
|
-
try {
|
|
116
|
-
(0, client_tools_1.callConditionRefresh)(subscription);
|
|
117
|
-
}
|
|
118
|
-
catch (err) {
|
|
119
|
-
// it is possible that server do not implement conditionRefresh ...
|
|
120
|
-
debugLog("Server may not implement conditionRefresh", err);
|
|
121
|
-
}
|
|
122
|
-
});
|
|
123
|
-
await promise;
|
|
124
|
-
// now shut down subscription
|
|
125
|
-
await subscription.terminate();
|
|
126
|
-
return acknowledgeableConditions;
|
|
127
|
-
}
|
|
128
|
-
exports.findActiveConditions = findActiveConditions;
|
|
129
|
-
async function acknowledgeAllConditions(session, message) {
|
|
130
|
-
try {
|
|
131
|
-
let conditions = await findActiveConditions(session);
|
|
132
|
-
if (conditions.length === 0) {
|
|
133
|
-
debugLog("Warning: cannot find conditions ");
|
|
134
|
-
}
|
|
135
|
-
// filter acknowledgeable conditions (no acked yet)
|
|
136
|
-
conditions = conditions.filter((pojo) => pojo.ackedState.id.value === false);
|
|
137
|
-
const promises = [];
|
|
138
|
-
for (const eventStuff of conditions) {
|
|
139
|
-
promises.push(acknowledgeCondition(session, eventStuff, message));
|
|
140
|
-
}
|
|
141
|
-
const result = await Promise.all(promises);
|
|
142
|
-
// istanbul ignore next
|
|
143
|
-
if (doDebug) {
|
|
144
|
-
debugLog("Acked all results: ", result.map((e) => e.toString()).join(" "));
|
|
145
|
-
}
|
|
146
|
-
}
|
|
147
|
-
catch (err) {
|
|
148
|
-
errorLog("Error", err);
|
|
149
|
-
}
|
|
150
|
-
}
|
|
151
|
-
exports.acknowledgeAllConditions = acknowledgeAllConditions;
|
|
152
|
-
async function confirmAllConditions(session, message) {
|
|
153
|
-
try {
|
|
154
|
-
let conditions = await findActiveConditions(session);
|
|
155
|
-
if (conditions.length === 0) {
|
|
156
|
-
debugLog("Warning: cannot find conditions ");
|
|
157
|
-
}
|
|
158
|
-
// filter acknowledgeable conditions (no acked yet)
|
|
159
|
-
conditions = conditions.filter((pojo) => pojo.confirmedState.id.value === false);
|
|
160
|
-
const promises = [];
|
|
161
|
-
for (const eventStuff of conditions) {
|
|
162
|
-
promises.push(confirmCondition(session, eventStuff, message));
|
|
163
|
-
}
|
|
164
|
-
const result = await Promise.all(promises);
|
|
165
|
-
// istanbul ignore next
|
|
166
|
-
if (doDebug) {
|
|
167
|
-
debugLog("Confirm all results: ", result.map((e) => e.toString()).join(" "));
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
catch (err) {
|
|
171
|
-
errorLog("Error", err);
|
|
172
|
-
}
|
|
173
|
-
}
|
|
174
|
-
exports.confirmAllConditions = confirmAllConditions;
|
|
175
|
-
//# sourceMappingURL=client_alarm_tools_acknowledge_all_conditions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"client_alarm_tools_acknowledge_all_conditions.js","sourceRoot":"","sources":["../../source/alarms_and_conditions/client_alarm_tools_acknowledge_all_conditions.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { IBasicSessionReadAsyncSimple } from "node-opcua-pseudo-session";
|
|
2
|
-
import { Variant } from "node-opcua-variant";
|
|
3
|
-
/**
|
|
4
|
-
*
|
|
5
|
-
* @param session
|
|
6
|
-
* @param fields
|
|
7
|
-
* @param eventFields
|
|
8
|
-
*/
|
|
9
|
-
export declare function dumpEvent(session: IBasicSessionReadAsyncSimple, fields: string[], eventFields: Variant[]): Promise<void>;
|