@instana/collector
Version:
The Instana Node.js metrics and trace data collector
58 lines (48 loc) • 1.4 kB
JavaScript
/*
* (c) Copyright IBM Corp. 2021
* (c) Copyright Instana Inc. and contributors 2016
*/
;
const { uninstrumentedFs: fs } = require('@instana/core');
/** @type {import('@instana/core/src/core').GenericLogger} */
let logger;
const validFileRequests = /\.(js|ts|jsx)$|(^|\/)package\.json$/i;
/**
* @param {import('@instana/core/src/util/normalizeConfig').InstanaConfig} config
*/
exports.init = function init(config) {
logger = config.logger;
};
/**
* @param {import('../agent/requestHandler').AnnounceRequest} request
* @param {(data: Object.<string, *>) => void} multiCb
*/
exports.getSourceFile = (request, multiCb) => {
if (!request.args.file.match(validFileRequests)) {
multiCb({
error: 'File does not seem to be a JavaScript file.'
});
return;
}
readFile(request, multiCb);
};
/**
* @param {import('../agent/requestHandler').AnnounceRequest} request
* @param {(data: Object.<string, *>) => void} multiCb
*/
function readFile(request, multiCb) {
fs.readFile(request.args.file, { encoding: 'utf8' }, (error, content) => {
if (error) {
logger.debug(
`Failed to retrieve source file for user request: ${request.args.file}. ${error?.message} ${error?.stack}`
);
multiCb({
error: `Could not load file. Error: ${error.message}`
});
return;
}
multiCb({
data: content
});
});
}