From 368839c2b123c0949a3bf04c66118004d63dccab Mon Sep 17 00:00:00 2001 From: Thomas Hunter II Date: Wed, 8 May 2024 13:12:57 -0700 Subject: [PATCH] doc, test: tracing channel hasSubscribers getter follow up work for https://github.com/nodejs/node/pull/51915 --- doc/api/diagnostics_channel.md | 38 ++++++++++++++ ...el-tracing-channel-has-subscribers.spec.js | 51 +++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 test/parallel/test-diagnostics-channel-tracing-channel-has-subscribers.spec.js diff --git a/doc/api/diagnostics_channel.md b/doc/api/diagnostics_channel.md index e27c55eedf3a618..a6a47d5921a5cb8 100644 --- a/doc/api/diagnostics_channel.md +++ b/doc/api/diagnostics_channel.md @@ -977,6 +977,44 @@ channels.asyncStart.bindStore(myStore, (data) => { }); ``` +#### `tracingChannel.hasSubscribers` + + + +> Stability: 1 - Experimental + +* Returns: {boolean} `true` if any of the individual channels has a subscriber, + `false` if not. + +This is a helper method available on a [`TracingChannel`][] instance to check if +any of the [TracingChannel Channels][] have subscribers. A `true` is returned if +any of them have at least one subscriber, a `false` is returned otherwise. + +```mjs +import diagnostics_channel from 'node:diagnostics_channel'; + +const channels = diagnostics_channel.tracingChannel('my-channel'); + +if (channels.hasSubscribers) { + // Do something +} +``` + +```cjs +const diagnostics_channel = require('node:diagnostics_channel'); + +const channels = diagnostics_channel.tracingChannel('my-channel'); + +if (channels.hasSubscribers) { + // Do something +} +``` + + ### TracingChannel Channels A TracingChannel is a collection of several diagnostics\_channels representing diff --git a/test/parallel/test-diagnostics-channel-tracing-channel-has-subscribers.spec.js b/test/parallel/test-diagnostics-channel-tracing-channel-has-subscribers.spec.js new file mode 100644 index 000000000000000..3b75b3f8a16821a --- /dev/null +++ b/test/parallel/test-diagnostics-channel-tracing-channel-has-subscribers.spec.js @@ -0,0 +1,51 @@ +'use strict'; + +const assert = require('assert'); +const common = require('../common'); +const dc = require('../dc-polyfill.js'); + +const handler = common.mustNotCall(); + +{ + const handlers = { + start: common.mustNotCall() + }; + + const channel = dc.tracingChannel('test'); + + assert.strictEqual(channel.hasSubscribers, false); + + channel.subscribe(handlers); + assert.strictEqual(channel.hasSubscribers, true); + + channel.unsubscribe(handlers); + assert.strictEqual(channel.hasSubscribers, false); + + channel.start.subscribe(handler); + assert.strictEqual(channel.hasSubscribers, true); + + channel.start.unsubscribe(handler); + assert.strictEqual(channel.hasSubscribers, false); +} + +{ + const handlers = { + asyncEnd: common.mustNotCall() + }; + + const channel = dc.tracingChannel('test'); + + assert.strictEqual(channel.hasSubscribers, false); + + channel.subscribe(handlers); + assert.strictEqual(channel.hasSubscribers, true); + + channel.unsubscribe(handlers); + assert.strictEqual(channel.hasSubscribers, false); + + channel.asyncEnd.subscribe(handler); + assert.strictEqual(channel.hasSubscribers, true); + + channel.asyncEnd.unsubscribe(handler); + assert.strictEqual(channel.hasSubscribers, false); +}