diff --git a/agents/grpc/src/grpc_agent.cc b/agents/grpc/src/grpc_agent.cc index 9b197a078c5..2ce36e55cc9 100644 --- a/agents/grpc/src/grpc_agent.cc +++ b/agents/grpc/src/grpc_agent.cc @@ -9,6 +9,7 @@ #include "absl/log/initialize.h" #include "opentelemetry/sdk/metrics/data/metric_data.h" #include "opentelemetry/sdk/metrics/export/metric_producer.h" +#include "opentelemetry/sdk/resource/semantic_conventions.h" #include "opentelemetry/exporters/otlp/otlp_grpc_client.h" #include "opentelemetry/exporters/otlp/otlp_grpc_client_factory.h" #include "opentelemetry/exporters/otlp/otlp_grpc_exporter.h" @@ -33,6 +34,7 @@ using opentelemetry::sdk::metrics::ResourceMetrics; using opentelemetry::sdk::metrics::ScopeMetrics; using opentelemetry::sdk::resource::Resource; using opentelemetry::sdk::resource::ResourceAttributes; +using opentelemetry::sdk::resource::SemanticConventions::kServiceName; using opentelemetry::sdk::trace::Recordable; using opentelemetry::v1::exporter::otlp::OtlpGrpcClient; using opentelemetry::v1::exporter::otlp::OtlpGrpcClientFactory; @@ -1110,6 +1112,18 @@ int GrpcAgent::config(const json& config) { setup_blocked_loop_hooks(); } + if (utils::find_any_fields_in_diff(diff, { "/app" })) { + auto it = config_.find("app"); + if (it != config_.end()) { + std::string app_name = it->get(); + ResourceAttributes attrs = { + { kServiceName, app_name }, + }; + + USE(otlp::UpdateResource(std::move(attrs))); + } + } + // Configure tracing flags if (trace_flags_ == 0 || utils::find_any_fields_in_diff(diff, tracing_fields)) { diff --git a/agents/otlp/src/otlp_agent.cc b/agents/otlp/src/otlp_agent.cc index cbbd17553d6..95637de53f3 100644 --- a/agents/otlp/src/otlp_agent.cc +++ b/agents/otlp/src/otlp_agent.cc @@ -30,6 +30,7 @@ namespace trace = OPENTELEMETRY_NAMESPACE::trace; namespace resource = sdk::resource; namespace instrumentationscope = sdk::instrumentationscope; namespace detail = trace::propagation::detail; +using resource::ResourceAttributes; using resource::SemanticConventions::kServiceName; using resource::SemanticConventions::kServiceInstanceId; using resource::SemanticConventions::kServiceVersion; @@ -170,6 +171,18 @@ int OTLPAgent::config(const nlohmann::json& config) { config_otlp_agent(config_); } + if (utils::find_any_fields_in_diff(diff, { "/app" })) { + auto it = config_.find("app"); + if (it != config_.end()) { + std::string app_name = it->get(); + ResourceAttributes attrs = { + { kServiceName, app_name }, + }; + + USE(otlp::UpdateResource(std::move(attrs))); + } + } + // Configure tracing flags if (span_collector_ == nullptr || utils::find_any_fields_in_diff(diff, tracing_fields)) { diff --git a/agents/otlp/src/otlp_common.cc b/agents/otlp/src/otlp_common.cc index ed84132b49c..e52d19e9095 100644 --- a/agents/otlp/src/otlp_common.cc +++ b/agents/otlp/src/otlp_common.cc @@ -170,7 +170,8 @@ Resource* UpdateResource(ResourceAttributes&& attrs) { // value "unknown_service". (See Resource::Create() method in the SDK). auto resource = GetResource(); auto attributes = resource->GetAttributes(); - if (attributes.find(kServiceName) != attributes.end()) { + if (attributes.find(kServiceName) != attributes.end() && + attrs.find(kServiceName) == attrs.end()) { attrs.SetAttribute(kServiceName, std::get(attributes[kServiceName])); } diff --git a/agents/zmq/src/zmq_agent.cc b/agents/zmq/src/zmq_agent.cc index fff069ece7a..dbf81ba50d8 100644 --- a/agents/zmq/src/zmq_agent.cc +++ b/agents/zmq/src/zmq_agent.cc @@ -78,6 +78,7 @@ constexpr size_t span_msg_q_min_size = 200; const char MSG_1[] = "{" "\"agentId\":\"%s\"" + ",\"app\":\"%s\"" ",\"requestId\": \"%s\"" ",\"command\":\"%s\"" ",\"recorded\":{\"seconds\":%" PRIu64",\"nanoseconds\":%" PRIu64"}" @@ -89,6 +90,7 @@ const char MSG_1[] = "{" const char MSG_2[] = "{" "\"agentId\":\"%s\"" + ",\"app\":\"%s\"" ",\"requestId\": null" ",\"command\":\"%s\"" ",\"recorded\":{\"seconds\":%" PRIu64",\"nanoseconds\":%" PRIu64"}" @@ -100,6 +102,7 @@ const char MSG_2[] = "{" const char MSG_3[] = "{" "\"agentId\":\"%s\"" + ",\"app\":\"%s\"" ",\"requestId\": \"%s\"" ",\"command\":\"%s\"" ",\"duration\":%" PRIu64 @@ -111,6 +114,7 @@ const char MSG_3[] = "{" const char MSG_4[] = "{" "\"agentId\":\"%s\"" + ",\"app\":\"%s\"" ",\"requestId\": \"%s\"" ",\"command\":\"%s\"" ",\"recorded\":{\"seconds\":%" PRIu64",\"nanoseconds\":%" PRIu64"}" @@ -120,6 +124,7 @@ const char MSG_4[] = "{" const char MSG_5[] = "{" "\"agentId\":\"%s\"" + ",\"app\":\"%s\"" ",\"recorded\":{\"seconds\":%" PRIu64",\"nanoseconds\":%" PRIu64"}" ",\"version\":%d" ",\"error\":{\"message\":\"%s\",\"code\":%d}" @@ -127,6 +132,7 @@ const char MSG_5[] = "{" const char MSG_6[] = "{" "\"agentId\":\"%s\"" + ",\"app\":\"%s\"" ",\"command\":\"exit\"" ",\"exit_code\":%d" ",\"version\":%d" @@ -136,6 +142,7 @@ const char MSG_6[] = "{" const char MSG_7[] = "{" "\"agentId\":\"%s\"" + ",\"app\":\"%s\"" ",\"command\":\"exit\"" ",\"exit_code\":%d" ",\"version\":%d" @@ -1077,6 +1084,7 @@ int ZmqAgent::send_command_message(const char* command, msg_size_, MSG_2, agent_id_.c_str(), + app_name_.c_str(), command, std::get<0>(recorded), std::get<1>(recorded), @@ -1090,6 +1098,7 @@ int ZmqAgent::send_command_message(const char* command, msg_size_, MSG_1, agent_id_.c_str(), + app_name_.c_str(), request_id, command, std::get<0>(recorded), @@ -1271,6 +1280,13 @@ int ZmqAgent::config(const json& config) { setup_blocked_loop_hooks(); } + if (utils::find_any_fields_in_diff(diff, { "/app" })) { + auto it = config_.find("app"); + if (it != config_.end()) { + app_name_ = it->get(); + } + } + // Don't config other endpoints if command handle is not to be configured if (command_handle_ != nullptr) { if (ZmqHandle::needs_reset(diff, ZmqDataHandle::restart_fields)) { @@ -1555,6 +1571,7 @@ void ZmqAgent::send_error_message(const std::string& msg, msg_size_, MSG_5, agent_id_.c_str(), + app_name_.c_str(), std::get<0>(recorded), std::get<1>(recorded), version_, @@ -1571,6 +1588,7 @@ void ZmqAgent::send_error_message(const std::string& msg, msg_size_, MSG_5, agent_id_.c_str(), + app_name_.c_str(), std::get<0>(recorded), std::get<1>(recorded), version_, @@ -1594,6 +1612,7 @@ int ZmqAgent::send_error_command_message(const std::string& req_id, msg_size_, MSG_4, agent_id_.c_str(), + app_name_.c_str(), req_id.c_str(), command.c_str(), std::get<0>(recorded), @@ -1612,6 +1631,7 @@ int ZmqAgent::send_error_command_message(const std::string& req_id, msg_size_, MSG_4, agent_id_.c_str(), + app_name_.c_str(), req_id.c_str(), command.c_str(), std::get<0>(recorded), @@ -1664,6 +1684,7 @@ void ZmqAgent::send_exit() { msg_size_, MSG_7, agent_id_.c_str(), + app_name_.c_str(), exit_code, version_, profile); @@ -1675,6 +1696,7 @@ void ZmqAgent::send_exit() { msg_size_, MSG_6, agent_id_.c_str(), + app_name_.c_str(), exit_code, version_, jmsg.dump().c_str(), @@ -2064,6 +2086,7 @@ void ZmqAgent::do_got_prof(ProfileType type, msg_size_, MSG_3, agent_id_.c_str(), + app_name_.c_str(), prof_stor.req_id.c_str(), cmd, uv_now(&loop_) - prof_stor.timestamp, diff --git a/agents/zmq/src/zmq_agent.h b/agents/zmq/src/zmq_agent.h index 901837c7865..eed1aa48b5c 100644 --- a/agents/zmq/src/zmq_agent.h +++ b/agents/zmq/src/zmq_agent.h @@ -682,6 +682,7 @@ class ZmqAgent { std::atomic exiting_; const std::string agent_id_; + std::string app_name_; // For Auth std::string auth_url_; diff --git a/test/agents/test-grpc-metrics.mjs b/test/agents/test-grpc-metrics.mjs index dd57e62e9bc..5960e260694 100644 --- a/test/agents/test-grpc-metrics.mjs +++ b/test/agents/test-grpc-metrics.mjs @@ -237,9 +237,10 @@ async function runTest({ getEnv }) { }; const child = new TestClient([], opts); const agentId = await child.id(); - const config = await child.config(); + const config = await child.config({ app: 'my_app_name', interval: 100 }); grpcServer.once('metrics', mustCall(async () => { const metrics = await child.metrics(); + assert.strictEqual(config.app, 'my_app_name'); const { data, requestId } = await grpcServer.metrics(agentId); checkMetricsData(data.msg, data.metadata, requestId, agentId, config, metrics); await child.shutdown(0); @@ -257,7 +258,7 @@ const testConfigs = [ NODE_DEBUG_NATIVE: 'nsolid_grpc_agent', NSOLID_GRPC_INSECURE: 1, NSOLID_GRPC: `localhost:${port}`, - NSOLID_INTERVAL: 100, + NSOLID_INTERVAL: 10000, }; }, }, diff --git a/test/agents/test-otlp-metrics.mjs b/test/agents/test-otlp-metrics.mjs index cbbb003df62..10245e6a03d 100644 --- a/test/agents/test-otlp-metrics.mjs +++ b/test/agents/test-otlp-metrics.mjs @@ -17,6 +17,7 @@ const { } = validators; const __filename = fileURLToPath(import.meta.url); +const appName = 'my_app_name'; if (process.argv[2] === 'child') { // Just to keep the worker alive. @@ -26,6 +27,7 @@ if (process.argv[2] === 'child') { if (isMainThread) { nsolid.start({ tracingEnabled: false, + app: appName, }); nsolid.setThreadName('main-thread'); @@ -601,6 +603,7 @@ if (process.argv[2] === 'child') { if (message.type === 'nsolid') { nsolidId = message.id; nsolidAppName = message.appName; + assert.strictEqual(nsolidAppName, appName); nsolidMetrics = message.metrics; } else if (message.type === 'workerThreadId') { context.threadList.push(message.id); diff --git a/test/agents/test-zmq-info.mjs b/test/agents/test-zmq-info.mjs index 4071590d7e9..2391c97376e 100644 --- a/test/agents/test-zmq-info.mjs +++ b/test/agents/test-zmq-info.mjs @@ -61,6 +61,7 @@ import { TestPlayground } from '../common/nsolid-zmq-agent/index.js'; function checkInfoData(info, requestId, agentId, nsolidConfig = {}) { assert.strictEqual(info.requestId, requestId); assert.strictEqual(info.agentId, agentId); + assert.strictEqual(info.app, nsolidConfig.appName || 'untitled application'); assert.strictEqual(info.command, 'info'); // From here check at least that all the fields are present assert.ok(info.recorded); diff --git a/test/agents/test-zmq-metrics.mjs b/test/agents/test-zmq-metrics.mjs index 368f65e0e0f..3c2f2ba8bf0 100644 --- a/test/agents/test-zmq-metrics.mjs +++ b/test/agents/test-zmq-metrics.mjs @@ -223,6 +223,7 @@ function checkMetricsData(metrics, requestId, agentId, threads) { console.dir(metrics, { depth: null }); assert.strictEqual(metrics.requestId, requestId); assert.strictEqual(metrics.agentId, agentId); + assert.strictEqual(metrics.app, 'untitled application'); assert.strictEqual(metrics.command, 'metrics'); // From here check at least that all the fields are present assert.ok(metrics.recorded); diff --git a/test/agents/test-zmq-packages.mjs b/test/agents/test-zmq-packages.mjs index 818197c5108..e3dfcacbedc 100644 --- a/test/agents/test-zmq-packages.mjs +++ b/test/agents/test-zmq-packages.mjs @@ -129,6 +129,7 @@ const expectedPackagesMains = [ function checkPackagesData(packages, requestId, agentId) { assert.strictEqual(packages.requestId, requestId); assert.strictEqual(packages.agentId, agentId); + assert.strictEqual(packages.app, 'untitled application'); assert.strictEqual(packages.command, 'packages'); // From here check at least that all the fields are present assert.ok(packages.recorded); diff --git a/test/agents/test-zmq-ping.mjs b/test/agents/test-zmq-ping.mjs index e0851c75c5b..1b8b5d944ee 100644 --- a/test/agents/test-zmq-ping.mjs +++ b/test/agents/test-zmq-ping.mjs @@ -29,6 +29,7 @@ function checkPingData(data, requestId, agentId) { console.dir(data, { depth: null }); assert.strictEqual(data.requestId, requestId); assert.strictEqual(data.agentId, agentId); + assert.strictEqual(data.app, 'untitled application'); assert.strictEqual(data.command, 'ping'); // From here check at least that all the fields are present validateObject(data.recorded, 'recorded'); diff --git a/test/agents/test-zmq-profile.mjs b/test/agents/test-zmq-profile.mjs index 62fc200828a..6c699aeeca1 100644 --- a/test/agents/test-zmq-profile.mjs +++ b/test/agents/test-zmq-profile.mjs @@ -22,6 +22,7 @@ import { function checkProfileData(requestId, options, agentId, data, complete, onExit = false) { assert.strictEqual(data.requestId, requestId); assert.strictEqual(data.agentId, agentId); + assert.strictEqual(data.app, 'untitled application'); assert.strictEqual(data.command, 'profile'); if (onExit) { assert.ok(data.duration < options.duration); diff --git a/test/agents/test-zmq-reconfigure.mjs b/test/agents/test-zmq-reconfigure.mjs index 03ac94b0793..5f577f05d86 100644 --- a/test/agents/test-zmq-reconfigure.mjs +++ b/test/agents/test-zmq-reconfigure.mjs @@ -44,6 +44,7 @@ const { function checkReconfigureData(reconfigure, requestId, agentId, nsolidConfig) { assert.strictEqual(reconfigure.requestId, requestId); assert.strictEqual(reconfigure.agentId, agentId); + assert.strictEqual(reconfigure.app, 'untitled application'); assert.strictEqual(reconfigure.command, 'reconfigure'); // From here check at least that all the fields are present validateObject(reconfigure.recorded, 'recorded'); diff --git a/test/agents/test-zmq-snapshot.mjs b/test/agents/test-zmq-snapshot.mjs index f32470db7eb..0d07f676e05 100644 --- a/test/agents/test-zmq-snapshot.mjs +++ b/test/agents/test-zmq-snapshot.mjs @@ -18,6 +18,7 @@ import { TestPlayground } from '../common/nsolid-zmq-agent/index.js'; function checkSnapshotData(requestId, options, agentId, data, complete) { assert.strictEqual(data.requestId, requestId); assert.strictEqual(data.agentId, agentId); + assert.strictEqual(data.app, 'untitled application'); assert.strictEqual(data.command, 'snapshot'); assert.strictEqual(data.complete, complete); assert.strictEqual(data.threadId, options.threadId); diff --git a/test/agents/test-zmq-startup-times.mjs b/test/agents/test-zmq-startup-times.mjs index e83a2aba819..9baf5dca17c 100644 --- a/test/agents/test-zmq-startup-times.mjs +++ b/test/agents/test-zmq-startup-times.mjs @@ -36,6 +36,7 @@ const { function checkStartupTimesData(data, requestId, agentId, additionalTimes = []) { assert.strictEqual(data.requestId, requestId); assert.strictEqual(data.agentId, agentId); + assert.strictEqual(data.app, 'untitled application'); assert.strictEqual(data.command, 'startup_times'); // From here check at least that all the fields are present validateObject(data.recorded, 'recorded'); diff --git a/test/agents/test-zmq-tracing.mjs b/test/agents/test-zmq-tracing.mjs index 3e91cb89e54..6916cf287d7 100644 --- a/test/agents/test-zmq-tracing.mjs +++ b/test/agents/test-zmq-tracing.mjs @@ -69,10 +69,11 @@ const { // timeNS: '1704988827304585184' // } -function checkTracingData(tracing, requestId, agentId, threadId) { +function checkTracingData(tracing, requestId, agentId, threadId, appName) { console.dir(tracing, { depth: null }); assert.strictEqual(tracing.requestId, requestId); assert.strictEqual(tracing.agentId, agentId); + assert.strictEqual(tracing.app, appName); assert.strictEqual(tracing.command, 'tracing'); // From here check at least that all the fields are present validateObject(tracing.recorded, 'recorded'); @@ -175,7 +176,12 @@ tests.push({ return new Promise((resolve) => { let totalSpans = 0; const opts = { - opts: { env: { NSOLID_TRACING_ENABLED: 1 } }, + opts: { + env: { + NSOLID_TRACING_ENABLED: 1, + NSOLID_APPNAME: 'myapp', + }, + }, }; playground.bootstrap(opts, mustSucceed(async (agentId) => { @@ -183,7 +189,7 @@ tests.push({ }), mustCallAtLeast((eventType, agentId, data) => { console.log(`${eventType}, ${agentId}`); assert.strictEqual(eventType, 'agent-tracing'); - checkTracingData(data, null, agentId, threadId); + checkTracingData(data, null, agentId, threadId, 'myapp'); const spanTypes = [ 'http_server', 'http_client']; for (const span of data.body.spans) { validateSpan(span, spanTypes[totalSpans], threadId); @@ -204,14 +210,19 @@ tests.push({ let totalSpans = 0; const opts = { args: [ '-t', 'http' ], - opts: { env: { NSOLID_TRACING_ENABLED: 1 } }, + opts: { + env: { + NSOLID_TRACING_ENABLED: 1, + NSOLID_APPNAME: 'myapp', + }, + }, }; playground.bootstrap(opts, mustSucceed(() => { }), mustCallAtLeast((eventType, agentId, data) => { console.log(`${eventType}, ${agentId}`); assert.strictEqual(eventType, 'agent-tracing'); - checkTracingData(data, null, agentId, threadId); + checkTracingData(data, null, agentId, threadId, 'myapp'); const spanTypes = [ 'http_server', 'http_client']; for (const span of data.body.spans) { validateSpan(span, spanTypes[totalSpans], threadId); @@ -233,7 +244,12 @@ tests.push({ let totalSpans = 0; const opts = { args: [ '-w', 1 ], - opts: { env: { NSOLID_TRACING_ENABLED: 1 } }, + opts: { + env: { + NSOLID_TRACING_ENABLED: 1, + NSOLID_APPNAME: 'myapp', + }, + }, }; playground.bootstrap(opts, mustSucceed(async (agentId) => { @@ -243,7 +259,7 @@ tests.push({ }), mustCallAtLeast((eventType, agentId, data) => { console.log(`${eventType}, ${agentId}`); assert.strictEqual(eventType, 'agent-tracing'); - checkTracingData(data, null, agentId, wid); + checkTracingData(data, null, agentId, wid, 'myapp'); const spanTypes = [ 'http_server', 'http_client']; for (const span of data.body.spans) { validateSpan(span, spanTypes[totalSpans], wid); @@ -263,7 +279,12 @@ tests.push({ return new Promise((resolve) => { let totalSpans = 0; const opts = { - opts: { env: { NSOLID_TRACING_ENABLED: 1 } }, + opts: { + env: { + NSOLID_TRACING_ENABLED: 1, + NSOLID_APPNAME: 'myapp', + }, + }, }; playground.bootstrap(opts, mustSucceed(async (agentId) => { @@ -271,7 +292,7 @@ tests.push({ }), mustCallAtLeast((eventType, agentId, data) => { console.log(`${eventType}, ${agentId}`); assert.strictEqual(eventType, 'agent-tracing'); - checkTracingData(data, null, agentId, threadId); + checkTracingData(data, null, agentId, threadId, 'myapp'); const spanTypes = [ 'dns_lookup', 'dns_lookup_service', 'dns_resolve']; for (const span of data.body.spans) { validateSpan(span, spanTypes[totalSpans], threadId); @@ -293,7 +314,12 @@ tests.push({ let totalSpans = 0; const opts = { args: [ '-w', 1 ], - opts: { env: { NSOLID_TRACING_ENABLED: 1 } }, + opts: { + env: { + NSOLID_TRACING_ENABLED: 1, + NSOLID_APPNAME: 'myapp', + }, + }, }; playground.bootstrap(opts, mustSucceed(async (agentId) => { @@ -303,7 +329,7 @@ tests.push({ }), mustCallAtLeast((eventType, agentId, data) => { console.log(`${eventType}, ${agentId}`); assert.strictEqual(eventType, 'agent-tracing'); - checkTracingData(data, null, agentId, wid); + checkTracingData(data, null, agentId, wid, 'myapp'); const spanTypes = [ 'dns_lookup', 'dns_lookup_service', 'dns_resolve']; for (const span of data.body.spans) { validateSpan(span, spanTypes[totalSpans], wid); @@ -318,19 +344,25 @@ tests.push({ }); tests.push({ - name: 'should work for custom traces', + name: 'should work for custom traces changing app name', test: async (playground) => { return new Promise((resolve) => { const opts = { - opts: { env: { NSOLID_TRACING_ENABLED: 1 } }, + opts: { + env: { + NSOLID_TRACING_ENABLED: 1, + NSOLID_APPNAME: 'myapp', + }, + }, }; playground.bootstrap(opts, mustSucceed(async (agentId) => { + await playground.client.config({ app: 'myotherapp' }); await playground.client.tracing('custom', threadId); }), mustCall((eventType, agentId, data) => { console.log(`${eventType}, ${agentId}`); assert.strictEqual(eventType, 'agent-tracing'); - checkTracingData(data, null, agentId, threadId); + checkTracingData(data, null, agentId, threadId, 'myotherapp'); assert.strictEqual(data.body.spans.length, 1); validateSpan(data.body.spans[0], 'custom', threadId); resolve(); @@ -346,7 +378,12 @@ tests.push({ let wid; const opts = { args: [ '-w', 1 ], - opts: { env: { NSOLID_TRACING_ENABLED: 1 } }, + opts: { + env: { + NSOLID_TRACING_ENABLED: 1, + NSOLID_APPNAME: 'myapp', + }, + }, }; playground.bootstrap(opts, mustSucceed(async (agentId) => { @@ -356,7 +393,7 @@ tests.push({ }), mustCall((eventType, agentId, data) => { console.log(`${eventType}, ${agentId}`); assert.strictEqual(eventType, 'agent-tracing'); - checkTracingData(data, null, agentId, wid); + checkTracingData(data, null, agentId, wid, 'myapp'); assert.strictEqual(data.body.spans.length, 1); validateSpan(data.body.spans[0], 'custom', wid); resolve(); diff --git a/test/common/nsolid-grpc-agent/client.js b/test/common/nsolid-grpc-agent/client.js index 5aef9633d6d..0145b52b504 100644 --- a/test/common/nsolid-grpc-agent/client.js +++ b/test/common/nsolid-grpc-agent/client.js @@ -110,6 +110,10 @@ if (isMainThread) { workers.get(msg.threadId).postMessage(msg); } } else if (msg.type === 'config') { + if (msg.config) { + nsolid.start(msg.config); + } + process.send({ type: 'config', config: nsolid.config }); } else if (msg.type === 'heap_profile') { nsolid.heapProfile(msg.duration); diff --git a/test/common/nsolid-grpc-agent/index.js b/test/common/nsolid-grpc-agent/index.js index eb2abcbc0fd..92ae6320956 100644 --- a/test/common/nsolid-grpc-agent/index.js +++ b/test/common/nsolid-grpc-agent/index.js @@ -315,15 +315,15 @@ class TestClient { }); } - async config() { + async config(config = null) { return new Promise((resolve) => { if (this.#child) { - this.#child.send({ type: 'config' }); - this.#child.once('message', common.mustCall((msg) => { + this.#child.send({ type: 'config', config }); + this.#child.on('message', (msg) => { if (msg.type === 'config') { resolve(msg.config); } - })); + }); } else { resolve(null); } diff --git a/test/common/nsolid-zmq-agent/client.js b/test/common/nsolid-zmq-agent/client.js index c09a3a3c5f3..60bb14db913 100644 --- a/test/common/nsolid-zmq-agent/client.js +++ b/test/common/nsolid-zmq-agent/client.js @@ -104,6 +104,10 @@ if (isMainThread) { workers.get(msg.threadId).postMessage(msg); } } else if (msg.type === 'config') { + if (msg.config) { + nsolid.start(msg.config); + } + process.send({ type: 'config', config: nsolid.config }); } else if (msg.type === 'shutdown') { clearInterval(interval); diff --git a/test/common/nsolid-zmq-agent/index.js b/test/common/nsolid-zmq-agent/index.js index 293ba805ef1..ce00672e957 100644 --- a/test/common/nsolid-zmq-agent/index.js +++ b/test/common/nsolid-zmq-agent/index.js @@ -75,10 +75,10 @@ class TestClient { }); } - async config() { + async config(config = null) { return new Promise((resolve) => { if (this.#child) { - this.#child.send({ type: 'config' }); + this.#child.send({ type: 'config', config }); this.#child.once('message', common.mustCall((msg) => { if (msg.type === 'config') { resolve(msg.config);