Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion packages/collector/src/announceCycle/agentready.js
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,11 @@ function enter(_ctx) {

if (isMainThread) {
uncaught.activate();
metrics.activate();

if (process.env.INSTANA_DISABLE_METRICS !== 'true') {
metrics.activate();
}

requestHandler.activate();
transmissionCycle.activate(
metrics,
Expand Down
7 changes: 6 additions & 1 deletion packages/collector/src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,12 @@ function init(userConfig = {}) {

if (isMainThread) {
uncaught.init(config, agentConnection, pidStore);
metrics.init(config, pidStore);

if (process.env.INSTANA_DISABLE_METRICS !== 'true') {
metrics.init(config, pidStore);
} else {
logger.info('Metrics collection is disabled via INSTANA_DISABLE_METRICS.');
}
}

logger.info(`@instana/collector module version: ${require(path.join(__dirname, '..', 'package.json')).version}`);
Expand Down
5 changes: 4 additions & 1 deletion packages/collector/src/metrics/transmissionCycle.js
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,10 @@ exports.activate = function activate(_metrics, _downstreamConnection, _onSuccess
isActive = true;

transmissionsSinceLastFullDataEmit = 0;
sendMetrics();

if (process.env.INSTANA_DISABLE_METRICS !== 'true') {
sendMetrics();
}
};

function sendMetrics() {
Expand Down
46 changes: 46 additions & 0 deletions packages/collector/test/tracing/misc/metrics_deactivated/app.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/*
* (c) Copyright IBM Corp. 2025
*/

'use strict';

// NOTE: c8 bug https://github.com/bcoe/c8/issues/166
process.on('SIGTERM', () => {
process.disconnect();
process.exit(0);
});

require('../../../..')();
const express = require('express');
const morgan = require('morgan');
const bodyParser = require('body-parser');
const port = require('../../../test_util/app-port')();
const app = express();
const logPrefix = `Metrics activation is off (${process.pid}):\t`;
const agentPort = process.env.INSTANA_AGENT_PORT;

if (process.env.WITH_STDOUT) {
app.use(morgan(`${logPrefix}:method :url :status`));
}

app.use(bodyParser.json());

app.get('/', (req, res) => {
res.sendStatus(200);
});

app.post('/create-spans', async (req, res) => {
await fetch(`http://localhost:${agentPort}/ping`);
res.json({ message: 'OK' });
});

app.listen(port, () => {
log(`Listening on port: ${port}`);
});

function log() {
/* eslint-disable no-console */
const args = Array.prototype.slice.call(arguments);
args[0] = logPrefix + args[0];
console.log.apply(console, args);
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/*
* (c) Copyright IBM Corp. 2025
*/

'use strict';

const expect = require('chai').expect;
const supportedVersion = require('@instana/core').tracing.supportedVersion;

const config = require('../../../../../core/test/config');
const testUtils = require('../../../../../core/test/test_util');
const ProcessControls = require('../../../test_util/ProcessControls');
const globalAgent = require('../../../globalAgent');

const mochaSuiteFn = supportedVersion(process.versions.node) ? describe : describe.skip;

mochaSuiteFn('tracing/metrics_deactivated', function () {
this.timeout(config.getTestTimeout() * 2);

globalAgent.setUpCleanUpHooks();
const agentControls = globalAgent.instance;

describe('when tracing is enabled', function () {
let controls;

before(async () => {
controls = new ProcessControls({
dirname: __dirname,
useGlobalAgent: true,
env: {
INSTANA_DISABLE_METRICS: 'true',
INSTANA_DEBUG: 'true'
}
});

await controls.startAndWaitForAgentConnection();
});

beforeEach(async () => {
await agentControls.clearReceivedData();
});

after(async () => {
await controls.stop();
});

it('should still trace spans', async () => {
const response = await controls.sendRequest({
method: 'POST',
path: '/create-spans'
});

expect(response.message).to.equal('OK');
await testUtils.retry(async () => {
const spans = await agentControls.getSpans();
expect(spans.length).to.equal(2);
});
});
});
});
4 changes: 2 additions & 2 deletions packages/core/src/util/iitmHook.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@

'use strict';

const iitmHook = require('import-in-the-middle');

/** @type {import('../core').GenericLogger} */
let logger;

Expand All @@ -27,6 +25,8 @@ exports.activate = function activate() {
if (applicableTransformers) {
applicableTransformers.forEach(transformerFn => {
if (typeof transformerFn === 'function') {
const iitmHook = require('import-in-the-middle');

// @ts-ignore
iitmHook([moduleName], (exports, name) => {
logger.debug(`iitm-hooking enabled for module ${name}`);
Expand Down