Repository URL to install this package:
|
Version:
0.9.2-rc0 ▾
|
// (c) Copyright 2023 Supertenant Ltd. - all rights reserved.
// See LICENSE file in project root for license terms.
'use strict';
const log = require('./logger');
const normalizeConfig = require('./util/normalizeConfig');
const sdk = require('./sdk');
// Require this first to ensure that we have non-instrumented http available.
const uninstrumentedHttp = require('./uninstrumentedHttp');
const secrets = require('./secrets');
const tracing = require('./tracing');
const util = require('./util');
const { superbrain } = require('@supertenant/superbrain');
/**
* @typedef {{
h?: string,
e?: string,
hl?: boolean,
cp?: string,
}} PIDData
*/
/**
* @typedef {Object} CoreModule
* @property {import('./secrets')} secrets
* @property {import('./tracing/index')} tracing
*/
/**
* @param {Array.<import('./tracing/index').InstrumentedModule>} additionalInstrumentationModules
*/
function registerAdditionalInstrumentations(additionalInstrumentationModules) {
tracing.registerAdditionalInstrumentations(additionalInstrumentationModules);
}
function preInit() {
const preliminaryConfig = normalizeConfig();
util.hasThePackageBeenInitializedTooLate();
util.requireHook.init(preliminaryConfig);
tracing.preInit(preliminaryConfig);
// Initialize secrets as early as possible, in particular for env var collection in fargate/google-cloud-run when
// the config comes from SUPERTENANT_SUPERMETER_SECRETS.
secrets.init(/** @type {secrets.SecretOption} */ (preliminaryConfig));
}
/**
*
* @param {import('./util/normalizeConfig').Config} config
* @param {import('../../collector/src/pidStore')} processIdentityProvider
*/
function init(config, processIdentityProvider) {
log.init(/** @type {log.LoggerConfig} */ (config));
util.hasThePackageBeenInitializedTooLate();
config = normalizeConfig(config);
secrets.init(/** @type {secrets.SecretOption} */ (config));
util.requireHook.init(config);
tracing.init(config, processIdentityProvider);
const skipSuperbrainInit = process.env.SUPERTENANT_SUPERMETER_SKIP_SUPERBRAIN_INIT === 'true';
if (!skipSuperbrainInit) {
// @ts-ignore typescript complains it can't find the package.
const pkg = require('../package.json');
if (!superbrain.init(null, pkg.version)) {
log.getLogger('init').error('Failed to initialize superbrain, supermeter will not work');
}
} else {
log.getLogger('init').warn('Skipping superbrain init');
}
}
module.exports = {
logger: log,
superbrainLogger: superbrain.log.bind(superbrain),
secrets,
tracing,
uninstrumentedHttp,
util,
init,
preInit,
registerAdditionalInstrumentations,
sdk
};