UNPKG

14.3 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _os = _interopRequireDefault(require("os"));
9
10var _stringUtils = require("./stringUtils");
11
12var _InfluxDBClient = _interopRequireDefault(require("./InfluxDBClient"));
13
14var _S3Logger = _interopRequireDefault(require("./S3Logger"));
15
16function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
17
18function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; var ownKeys = Object.keys(source); if (typeof Object.getOwnPropertySymbols === 'function') { ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { return Object.getOwnPropertyDescriptor(source, sym).enumerable; })); } ownKeys.forEach(function (key) { _defineProperty(target, key, source[key]); }); } return target; }
19
20function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
21
22const ORDERED_LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
23
24const HOSTNAME = _os.default.hostname();
25
26class System {
27 static async setConfig(systemConfig) {
28 System._config = _objectSpread({
29 // det default values
30 logLevel: 'info',
31 system: 'none'
32 }, systemConfig);
33 System.activeLogLevels = ORDERED_LOG_LEVELS.slice(ORDERED_LOG_LEVELS.indexOf(System._config.logLevel));
34 System.runId = `${(0, _stringUtils.pad)(Math.round((Date.now() - new Date(new Date().getFullYear(), 0, 1).getTime()) / 1000), 8)}-${(0, _stringUtils.pad)(Math.floor(Math.random() * 10000), 4)}`; // seconds since start of year
35 // init InfluxDBClient
36
37 System.influxDBClients = (System._config.influxDBs || []).map(idbConfig => new _InfluxDBClient.default(idbConfig.host, idbConfig.dbName, idbConfig.statNameMode, idbConfig.flushIntervalMS, {
38 system: System._config.system,
39 component: System._config.component,
40 hostname: HOSTNAME,
41 env: System._config.env
42 }));
43 System._s3logger = new _S3Logger.default({
44 noHTTPS: (System._config.s3Logging || {}).noHTTPS,
45 host: (System._config.s3Logging || {}).host,
46 dataFieldsToPromote: (System._config.s3Logging || {}).dataFieldsToPromote,
47 dataFieldsToRemove: (System._config.s3Logging || {}).dataFieldsToRemove,
48 systemMeta: {
49 hostname: HOSTNAME,
50 system: System._config.system,
51 component: System._config.component,
52 env: System._config.env,
53 run_id: System.runId,
54 ver: System._config.ver
55 }
56 }); // track 'start'
57
58 await Promise.all(System.influxDBClients.map(idbClient => idbClient.trackMetrics([{
59 statName: 'appStart',
60 dims: {
61 module: 'System'
62 },
63 value: 1
64 }])));
65 }
66
67 static getConfig() {
68 if (!System._config) {
69 throw new Error('System config accessed before set');
70 }
71
72 return System._config;
73 }
74
75 static setAWSClient(awsClient) {
76 System._awsClient = awsClient;
77 }
78
79 static queueLogRecord(logObj) {
80 if (System._s3logger) System._s3logger.queueLogRecord(logObj);
81 }
82
83 static async flush() {
84 await Promise.all([(async () => {
85 if (System._s3logger) await System._s3logger.flushLogs();
86 })(), ...System.influxDBClients.map(idbClient => (async () => {
87 await idbClient.trackMetrics([{
88 statName: 'appEnd',
89 dims: {
90 module: 'System'
91 },
92 value: 1
93 }]);
94 await idbClient.flushMetrics();
95 })())]);
96 }
97
98}
99
100exports.default = System;
101
102_defineProperty(System, "activeLogLevels", void 0);
103
104_defineProperty(System, "runId", void 0);
105
106_defineProperty(System, "influxDBClients", void 0);
107
108_defineProperty(System, "_s3logger", void 0);
109
110_defineProperty(System, "_config", void 0);
111
112_defineProperty(System, "_awsClient", void 0);
113//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TeXN0ZW0uanMiXSwibmFtZXMiOlsiT1JERVJFRF9MT0dfTEVWRUxTIiwiSE9TVE5BTUUiLCJvcyIsImhvc3RuYW1lIiwiU3lzdGVtIiwic2V0Q29uZmlnIiwic3lzdGVtQ29uZmlnIiwiX2NvbmZpZyIsImxvZ0xldmVsIiwic3lzdGVtIiwiYWN0aXZlTG9nTGV2ZWxzIiwic2xpY2UiLCJpbmRleE9mIiwicnVuSWQiLCJNYXRoIiwicm91bmQiLCJEYXRlIiwibm93IiwiZ2V0RnVsbFllYXIiLCJnZXRUaW1lIiwiZmxvb3IiLCJyYW5kb20iLCJpbmZsdXhEQkNsaWVudHMiLCJpbmZsdXhEQnMiLCJtYXAiLCJpZGJDb25maWciLCJJbmZsdXhEQkNsaWVudCIsImhvc3QiLCJkYk5hbWUiLCJzdGF0TmFtZU1vZGUiLCJmbHVzaEludGVydmFsTVMiLCJjb21wb25lbnQiLCJlbnYiLCJfczNsb2dnZXIiLCJTM0xvZ2dlciIsIm5vSFRUUFMiLCJzM0xvZ2dpbmciLCJkYXRhRmllbGRzVG9Qcm9tb3RlIiwiZGF0YUZpZWxkc1RvUmVtb3ZlIiwic3lzdGVtTWV0YSIsInJ1bl9pZCIsInZlciIsIlByb21pc2UiLCJhbGwiLCJpZGJDbGllbnQiLCJ0cmFja01ldHJpY3MiLCJzdGF0TmFtZSIsImRpbXMiLCJtb2R1bGUiLCJ2YWx1ZSIsImdldENvbmZpZyIsIkVycm9yIiwic2V0QVdTQ2xpZW50IiwiYXdzQ2xpZW50IiwiX2F3c0NsaWVudCIsInF1ZXVlTG9nUmVjb3JkIiwibG9nT2JqIiwiZmx1c2giLCJmbHVzaExvZ3MiLCJmbHVzaE1ldHJpY3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFHQTs7QUFLQTs7QUFDQTs7QUFDQTs7Ozs7Ozs7QUFFQSxNQUFNQSxrQkFBa0IsR0FBRyxDQUFDLE9BQUQsRUFBVSxNQUFWLEVBQWtCLE1BQWxCLEVBQTBCLE9BQTFCLENBQTNCOztBQUNBLE1BQU1DLFFBQVEsR0FBR0MsWUFBR0MsUUFBSCxFQUFqQjs7QUErQmUsTUFB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QUFBLE1BQU0sRUFBRTtBQUFWLFNBRnNCO0FBRzVCQyxRQUFBQSxLQUFLLEVBQUU7QUFIcUIsT0FBRCxDQUF2QixDQUFOO0FBTUEsWUFBTUwsU0FBUyxDQUFDZSxZQUFWLEVBQU47QUFDRCxLQVIwQyxHQUF4QyxDQVBhLENBQVosQ0FBTjtBQWtCRDs7QUFwR3lCOzs7O2dCQUFQdkQsTTs7Z0JBQUFBLE07O2dCQUFBQSxNOztnQkFBQUEsTTs7Z0JBQUFBLE07O2dCQUFBQSxNIiwic291cmNlc0NvbnRlbnQiOlsiLy8gQGZsb3dcblxuLy8gTk9URTogZG9udCB1c2UgTW9kdWxlIGhlcmUsIHRoaXMgY2xhc3MgaXMgdXNlZCBieSBNb2R1bGVcbmltcG9ydCBvcyBmcm9tICdvcydcblxuaW1wb3J0IHR5cGUgQVdTQ2xpZW50IGZyb20gJy4vQVdTQ2xpZW50J1xuaW1wb3J0IHR5cGUgeyBTdGF0TmFtZU1vZGUgfSBmcm9tICcuL0luZmx1eERCQ2xpZW50J1xuXG5pbXBvcnQgeyBwYWQgfSBmcm9tICcuL3N0cmluZ1V0aWxzJ1xuaW1wb3J0IEluZmx1eERCQ2xpZW50IGZyb20gJy4vSW5mbHV4REJDbGllbnQnXG5pbXBvcnQgUzNMb2dnZXIgZnJvbSAnLi9TM0xvZ2dlcidcblxuY29uc3QgT1JERVJFRF9MT0dfTEVWRUxTID0gWydkZWJ1ZycsICdpbmZvJywgJ3dhcm4nLCAnZXJyb3InXVxuY29uc3QgSE9TVE5BTUUgPSBvcy5ob3N0bmFtZSgpXG5cbnR5cGUgU3lzdGVtQ29uZmlnID0ge3xcbiAgZW52OiBzdHJpbmcsXG4gIGluZmx1eERCcz86ID9BcnJheTx7XG4gICAgc3RhdE5hbWVNb2RlOiBTdGF0TmFtZU1vZGUsXG4gICAgaG9zdDogc3RyaW5nLFxuICAgIGRiTmFtZTogc3RyaW5nLFxuICAgIGZsdXNoSW50ZXJ2YWxNUz86ID9udW1iZXIsXG4gIH0+LFxuICBsaWZlc2lnbkludGVydmFsTVM/OiA/bnVtYmVyLFxuICBsb2dMZXZlbD86ICdkZWJ1ZycgfCAnaW5mbycgfCAnd2FybicgfCAnZXJyb3InLFxuICBhd3M6IHtcbiAgICBhY2NvdW50SWQ6IHN0cmluZyxcbiAgICBkZWZhdWx0UmVnaW9uOiBzdHJpbmcsXG4gICAgcHJvZmlsZT86ID9zdHJpbmcsXG4gIH0sXG4gIHN5c3RlbTogc3RyaW5nLFxuICBjb21wb25lbnQ6IHN0cmluZyxcbiAgdmVyOiBzdHJpbmcsXG4gIHMzTG9nZ2luZz86ID97XG4gICAgbm9IVFRQUz86IGJvb2xlYW4sXG4gICAgaG9zdDogc3RyaW5nLFxuICAgIGRhdGFGaWVsZHNUb1Byb21vdGU/OiA/eyBbaWQ6IHN0cmluZ106IHN0cmluZyB9LCBcbiAgICBkYXRhRmllbGRzVG9SZW1vdmU/OiA/QXJyYXk8c3RyaW5nPiwgXG4gIH0sXG4gIHRyYWNrVml0YWxzSW50ZXJ2YWxNUz86ID9udW1iZXIsXG4gIC8vIHRyYWNraW5nU2NoZW1hPzogP251bWJlcixcbnx9XG5cblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3lzdGVtIHtcblxuICBzdGF0aWMgYWN0aXZlTG9nTGV2ZWxzOiBBcnJheTxzdHJpbmc+XG4gIHN0YXRpYyBydW5JZDogc3RyaW5nXG4gIHN0YXRpYyBpbmZsdXhEQkNsaWVudHM6IEFycmF5PEluZmx1eERCQ2xpZW50PlxuXG4gIHN0YXRpYyBfczNsb2dnZXI6ID9TM0xvZ2dlclxuICBzdGF0aWMgX2NvbmZpZzogU3lzdGVtQ29uZmlnXG4gIHN0YXRpYyBfYXdzQ2xpZW50OiBBV1NDbGllbnRcbiBcbiAgXG4gIHN0YXRpYyBhc3luYyBzZXRDb25maWcoc3lzdGVtQ29uZmlnOiBTeXN0ZW1Db25maWcpIHtcbiAgICBTeXN0ZW0uX2NvbmZpZyA9IHtcblxuICAgICAgLy8gZGV0IGRlZmF1bHQgdmFsdWVzXG4gICAgICBsb2dMZXZlbDogJ2luZm8nLFxuICAgICAgc3lzdGVtOiAnbm9uZScsXG5cbiAgICAgIC4uLnN5c3RlbUNvbmZpZyxcblxuICAgIH1cbiAgICBTeXN0ZW0uYWN0aXZlTG9nTGV2ZWxzID0gT1JERVJFRF9MT0dfTEVWRUxTLnNsaWNlKE9SREVSRURfTE9HX0xFVkVMUy5pbmRleE9mKFN5c3RlbS5fY29uZmlnLmxvZ0xldmVsKSlcbiAgICBTeXN0ZW0ucnVuSWQgPSBgJHtwYWQoTWF0aC5yb3VuZCgoRGF0ZS5ub3coKSAtIG5ldyBEYXRlKChuZXcgRGF0ZSgpKS5nZXRGdWxsWWVhcigpLCAwLCAxKS5nZXRUaW1lKCkpIC8gMTAwMCksIDgpfS0ke3BhZChNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMDAwMCksIDQpfWAgLy8gc2Vjb25kcyBzaW5jZSBzdGFydCBvZiB5ZWFyXG5cbiAgICAvLyBpbml0IEluZmx1eERCQ2xpZW50XG4gICAgU3lzdGVtLmluZmx1eERCQ2xpZW50cyA9IChTeXN0ZW0uX2NvbmZpZy5pbmZsdXhEQnMgfHwgW10pLm1hcChpZGJDb25maWcgPT4gbmV3IEluZmx1eERCQ2xpZW50KFxuICAgICAgaWRiQ29uZmlnLmhvc3QsIFxuICAgICAgaWRiQ29uZmlnLmRiTmFtZSxcbiAgICAgIGlkYkNvbmZpZy5zdGF0TmFtZU1vZGUsXG4gICAgICBpZGJDb25maWcuZmx1c2hJbnRlcnZhbE1TLFxuICAgICAge1xuICAgICAgICBzeXN0ZW06IFN5c3RlbS5fY29uZmlnLnN5c3RlbSxcbiAgICAgICAgY29tcG9uZW50OiBTeXN0ZW0uX2NvbmZpZy5jb21wb25lbnQsXG4gICAgICAgIGhvc3RuYW1lOiBIT1NUTkFNRSxcbiAgICAgICAgZW52OiBTeXN0ZW0uX2NvbmZpZy5lbnYsXG4gICAgICB9KVxuICAgIClcblxuICAgIFN5c3RlbS5fczNsb2dnZXIgPSBuZXcgUzNMb2dnZXIoe1xuICAgICAgbm9IVFRQUzogKFN5c3RlbS5fY29uZmlnLnMzTG9nZ2luZyB8fCB7fSkubm9IVFRQUyxcbiAgICAgIGhvc3Q6IChTeXN0ZW0uX2NvbmZpZy5zM0xvZ2dpbmcgfHwge30pLmhvc3QsXG4gICAgICBkYXRhRmllbGRzVG9Qcm9tb3RlOiAoU3lzdGVtLl9jb25maWcuczNMb2dnaW5nIHx8IHt9KS5kYXRhRmllbGRzVG9Qcm9tb3RlLFxuICAgICAgZGF0YUZpZWxkc1RvUmVtb3ZlOiAoU3lzdGVtLl9jb25maWcuczNMb2dnaW5nIHx8IHt9KS5kYXRhRmllbGRzVG9SZW1vdmUsXG4gICAgICBzeXN0ZW1NZXRhOiB7XG4gICAgICAgIGhvc3RuYW1lOiBIT1NUTkFNRSxcbiAgICAgICAgc3lzdGVtOiBTeXN0ZW0uX2NvbmZpZy5zeXN0ZW0sXG4gICAgICAgIGNvbXBvbmVudDogU3lzdGVtLl9jb25maWcuY29tcG9uZW50LFxuICAgICAgICBlbnY6IFN5c3RlbS5fY29uZmlnLmVudixcbiAgICAgICAgcnVuX2lkOiBTeXN0ZW0ucnVuSWQsXG4gICAgICAgIHZlcjogU3lzdGVtLl9jb25maWcudmVyLFxuICAgICAgfSxcbiAgICB9KVxuXG4gICAgLy8gdHJhY2sgJ3N0YXJ0J1xuICAgIGF3YWl0IFByb21pc2UuYWxsKFN5c3RlbS5pbmZsdXhEQkNsaWVudHMubWFwKGlkYkNsaWVudCA9PiBpZGJDbGllbnQudHJhY2tNZXRyaWNzKFt7XG4gICAgICBzdGF0TmFtZTogJ2FwcFN0YXJ0JyxcbiAgICAgIGRpbXM6IHtcbiAgICAgICAgbW9kdWxlOiAnU3lzdGVtJyxcbiAgICAgIH0sXG4gICAgICB2YWx1ZTogMSxcbiAgICB9XSkpKVxuICAgIFxuICB9XG5cbiAgc3RhdGljIGdldENvbmZpZygpOiBTeXN0ZW1Db25maWcge1xuICAgIGlmICghU3lzdGVtLl9jb25maWcpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignU3lzdGVtIGNvbmZpZyBhY2Nlc3NlZCBiZWZvcmUgc2V0JylcbiAgICB9XG4gICAgcmV0dXJuIFN5c3RlbS5fY29uZmlnXG4gIH1cblxuXG4gIHN0YXRpYyBzZXRBV1NDbGllbnQoYXdzQ2xpZW50OiBBV1NDbGllbnQpIHtcbiAgICBTeXN0ZW0uX2F3c0NsaWVudCA9IGF3c0NsaWVudFxuICB9XG5cbiAgc3RhdGljIHF1ZXVlTG9nUmVjb3JkKGxvZ09iajogT2JqZWN0KTogdm9pZCB7XG4gICAgaWYgKFN5c3RlbS5fczNsb2dnZXIpXG4gICAgICBTeXN0ZW0uX3MzbG9nZ2VyLnF1ZXVlTG9nUmVjb3JkKGxvZ09iailcbiAgfVxuXG4gIHN0YXRpYyBhc3luYyBmbHVzaCgpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBhd2FpdCBQcm9taXNlLmFsbChbXG5cbiAgICAgIChhc3luYyAoKSA9PiB7XG4gICAgICAgIGlmIChTeXN0ZW0uX3MzbG9nZ2VyKVxuICAgICAgICAgIGF3YWl0IFN5c3RlbS5fczNsb2dnZXIuZmx1c2hMb2dzKClcbiAgICAgIH0pKCksXG5cbiAgICAgIC4uLlN5c3RlbS5pbmZsdXhEQkNsaWVudHMubWFwKGlkYkNsaWVudCA9PiAoYXN5bmMgKCkgPT4ge1xuICAgICAgICBhd2FpdCBpZGJDbGllbnQudHJhY2tNZXRyaWNzKFt7XG4gICAgICAgICAgc3RhdE5hbWU6ICdhcHBFbmQnLFxuICAgICAgICAgIGRpbXM6IHsgbW9kdWxlOiAnU3lzdGVtJyB9LFxuICAgICAgICAgIHZhbHVlOiAxLFxuICAgICAgICB9XSlcblxuICAgICAgICBhd2FpdCBpZGJDbGllbnQuZmx1c2hNZXRyaWNzKClcbiAgICAgIH0pKCkpLFxuXG4gICAgXSlcbiAgfVxufVxuIl19
\No newline at end of file