1 | ;
|
2 |
|
3 | Object.defineProperty(exports, "__esModule", {
|
4 | value: true
|
5 | });
|
6 | exports.default = void 0;
|
7 |
|
8 | var _os = _interopRequireDefault(require("os"));
|
9 |
|
10 | var _stringUtils = require("./stringUtils");
|
11 |
|
12 | var _InfluxDBClient = _interopRequireDefault(require("./InfluxDBClient"));
|
13 |
|
14 | var _S3Logger = _interopRequireDefault(require("./S3Logger"));
|
15 |
|
16 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
17 |
|
18 | function _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 |
|
20 | function _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 |
|
22 | const ORDERED_LOG_LEVELS = ['debug', 'info', 'warn', 'error'];
|
23 |
|
24 | const HOSTNAME = _os.default.hostname();
|
25 |
|
26 | class 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 |
|
100 | exports.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 |