• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

node-opcua / node-opcua / 22636309940

03 Mar 2026 06:03PM UTC coverage: 92.756% (+1.9%) from 90.81%
22636309940

push

github

erossignon
test: disable ENOENT on overlapping trustCertificate invocations in test environments with concurrency tests

18684 of 22141 branches covered (84.39%)

23 of 37 new or added lines in 1 file covered. (62.16%)

5775 existing lines in 228 files now uncovered.

160668 of 173216 relevant lines covered (92.76%)

875869.8 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

85.86
/packages/node-opcua-server/source/node_sampler.ts
1
/**
62✔
2
 * @module node-opcua-server
4✔
3
 */
4✔
4
import { assert } from "node-opcua-assert";
4✔
5
import { checkDebugFlag, make_debugLog } from "node-opcua-debug";
4✔
6
import { MonitoringMode } from "node-opcua-types";
4✔
7
import { hrtime } from "node-opcua-utils";
4✔
8

4✔
9
const debugLog = make_debugLog(__filename);
4✔
10
const doDebug = checkDebugFlag(__filename);
4✔
11

4✔
12
import { MonitoredItem } from "./monitored_item";
4✔
13

4✔
14
interface ITimer {
4✔
15
    _samplingId: NodeJS.Timeout | false,
4✔
16
    monitoredItems: Record<string,any>,
4✔
17
    monitoredItemsCount: number;
4✔
18
    }
4✔
19
const timers: Record<string,ITimer> = {};
4✔
20
const NS_PER_SEC = 1e9;
4✔
21

4✔
22
interface MonitoredItemPriv {
4✔
23
    _on_sampling_timer(): void;
4✔
24
}
4✔
25
function sampleMonitoredItem(monitoredItem: MonitoredItem) {
626,871✔
26
    const _monitoredItem = monitoredItem as unknown as MonitoredItemPriv;
626,871✔
27
    
626,871✔
28
    if (monitoredItem.monitoringMode === MonitoringMode.Disabled) {
626,871!
29
        return;
×
UNCOV
30
    }
×
31

626,871✔
32
    setImmediate(() => {
626,871✔
33
        _monitoredItem._on_sampling_timer();
626,845✔
34
    });
626,871✔
35
}
626,871✔
36

4✔
37
export function appendToTimer(monitoredItem: MonitoredItem): string {
41,840✔
38
    const samplingInterval = monitoredItem.samplingInterval;
41,898✔
39
    const key = samplingInterval.toString();
41,898✔
40
    assert(samplingInterval > 0);
41,898✔
41
    let _t = timers[key];
41,898✔
42
    if (!_t) {
41,898✔
43
        _t = {
520✔
44
            _samplingId: false,
520✔
45
            monitoredItems: {},
520✔
46
            monitoredItemsCount: 0
520✔
47
        };
520✔
48

520✔
49
        _t._samplingId = setInterval(() => {
520✔
50
            const start = doDebug ? hrtime() : undefined;
2,414!
51
            let counter = 0;
2,414✔
52
            for (const m in _t.monitoredItems) {
2,414✔
53
                if (Object.prototype.hasOwnProperty.call(_t.monitoredItems, m)) {
626,871✔
54
                    sampleMonitoredItem(_t.monitoredItems[m]);
626,871✔
55
                    counter++;
626,871✔
56
                }
626,871✔
57
            }
626,871✔
58
            // c8 ignore next
2,414✔
59
            if (doDebug) {
2,414!
UNCOV
60
                const elapsed = hrtime(start);
×
UNCOV
61
                debugLog(
×
UNCOV
62
                    `Sampler ${samplingInterval}  ms : Benchmark took ${(
×
UNCOV
63
                        (elapsed[0] * NS_PER_SEC + elapsed[1]) /
×
UNCOV
64
                        1000 /
×
UNCOV
65
                        1000.0
×
UNCOV
66
                    ).toFixed(3)} milliseconds for ${counter} elements`
×
UNCOV
67
                );
×
UNCOV
68
            }
×
69
        }, samplingInterval);
520✔
70
        timers[key] = _t;
520✔
71
    }
520✔
72
    assert(!_t.monitoredItems[monitoredItem.monitoredItemId]);
41,898✔
73
    _t.monitoredItems[monitoredItem.monitoredItemId] = monitoredItem;
41,898✔
74
    _t.monitoredItemsCount++;
41,898✔
75
    return key;
41,898✔
76
}
41,898✔
77

4✔
78
export function removeFromTimer(monitoredItem: MonitoredItem): void {
41,840✔
79
    const samplingInterval = monitoredItem.samplingInterval;
41,898✔
80
    assert(samplingInterval > 0);
41,898✔
81
    assert(typeof monitoredItem._samplingId === "string");
41,898✔
82
    const key = monitoredItem._samplingId as string;
41,898✔
83
    const _t = timers[key];
41,898✔
84
    if (!_t) {
41,898!
85
        debugLog("cannot find common timer for samplingInterval", key);
×
86
        return;
×
UNCOV
87
    }
×
88
    assert(_t);
41,898✔
89
    assert(_t.monitoredItems[monitoredItem.monitoredItemId]);
41,898✔
90
    delete _t.monitoredItems[monitoredItem.monitoredItemId];
41,898✔
91
    _t.monitoredItemsCount--;
41,898✔
92
    assert(_t.monitoredItemsCount >= 0);
41,898✔
93
    if (_t.monitoredItemsCount === 0) {
41,898✔
94
        if (_t._samplingId !==false) {
520✔
95
            clearInterval(_t._samplingId);
520✔
96
        }
520✔
97
        delete timers[key];
520✔
98
    }
520✔
99
}
41,898✔
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc