UNPKG

13.4 kBJavaScriptView Raw
1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7
8var _jsonStringifySafe = _interopRequireDefault(require("json-stringify-safe"));
9
10var _lodash = _interopRequireDefault(require("lodash"));
11
12var _httpUtils = require("./httpUtils");
13
14var _stringUtils = require("./stringUtils");
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 _objectWithoutProperties(source, excluded) { if (source == null) return {}; var target = _objectWithoutPropertiesLoose(source, excluded); var key, i; if (Object.getOwnPropertySymbols) { var sourceSymbolKeys = Object.getOwnPropertySymbols(source); for (i = 0; i < sourceSymbolKeys.length; i++) { key = sourceSymbolKeys[i]; if (excluded.indexOf(key) >= 0) continue; if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue; target[key] = source[key]; } } return target; }
21
22function _objectWithoutPropertiesLoose(source, excluded) { if (source == null) return {}; var target = {}; var sourceKeys = Object.keys(source); var key, i; for (i = 0; i < sourceKeys.length; i++) { key = sourceKeys[i]; if (excluded.indexOf(key) >= 0) continue; target[key] = source[key]; } return target; }
23
24function _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; }
25
26const LOG_FLUSH_INTERVAL_MS = 5 * 1000;
27
28class S3Logger {
29 constructor(options) {
30 _defineProperty(this, "_logObjects", []);
31
32 _defineProperty(this, "_logRecordNum", 0);
33
34 _defineProperty(this, "_options", void 0);
35
36 _defineProperty(this, "queueLogRecord", logObj => {
37 try {
38 const nowMS = Date.now();
39
40 let {
41 data,
42 message
43 } = logObj,
44 restLogObj = _objectWithoutProperties(logObj, ["data", "message"]);
45
46 const objToPush = _objectSpread({
47 event: message
48 }, restLogObj, {
49 record_num: ++this._logRecordNum,
50 time_ms: nowMS,
51 time_ts: new Date(nowMS).toISOString()
52 });
53
54 if (data != null) {
55 // make sure data is a object
56 if (typeof data !== 'object') {
57 data = {
58 value: data.toString()
59 };
60 } // promote data fields
61
62
63 if (this._options.dataFieldsToPromote) {
64 Object.entries(this._options.dataFieldsToPromote).forEach(([logProp, dataPath]) => {
65 // $FlowIgnore
66 const dataVal = _lodash.default.get(data, dataPath);
67
68 if (dataVal !== undefined) {
69 objToPush[logProp] = dataVal;
70 }
71 });
72 } // remove data fields
73
74
75 if (this._options.dataFieldsToRemove) {
76 this._options.dataFieldsToRemove.forEach(dataProp => {
77 delete data[dataProp];
78 });
79 } // serialize data
80
81
82 if (Object.keys(data).length > 0) objToPush.data = (0, _jsonStringifySafe.default)(data);
83 } // log to console
84
85
86 console.log(`${objToPush.time_ts.substr(11, 12)}: ${(0, _stringUtils.padRight)(objToPush.level, 5, ' ')} [${objToPush.module}] ${objToPush.event} ${objToPush.data || ''}`); // eslint-disable-line no-console
87
88 this._logObjects.push(objToPush);
89 } catch (err) {
90 console.error('Failed to queue a log record', logObj, err); // eslint-disable-line no-console
91 }
92 });
93
94 _defineProperty(this, "flushLogs", async () => {
95 try {
96 if (!this._logObjects.length || !this._options.host) return;
97 const logsToFlush = this._logObjects;
98 this._logObjects = [];
99 await (0, _httpUtils.httpReq)(`${this._options.noHTTPS ? 'http' : 'https'}://${this._options.host}/p1`, {
100 method: 'POST',
101 body: {
102 beacons: logsToFlush,
103 common: this._options.systemMeta,
104 client_sending_time_ms: Date.now()
105 },
106 timeout: 10000
107 });
108 } catch (err) {
109 console.error('Failed to flush logs', new Date().toUTCString(), err); // eslint-disable-line no-console
110 }
111 });
112
113 this._options = options;
114
115 if (this._options.host) {
116 setInterval(this.flushLogs, LOG_FLUSH_INTERVAL_MS);
117 }
118 }
119
120}
121
122exports.default = S3Logger;
123//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9TM0xvZ2dlci5qcyJdLCJuYW1lcyI6WyJMT0dfRkxVU0hfSU5URVJWQUxfTVMiLCJTM0xvZ2dlciIsImNvbnN0cnVjdG9yIiwib3B0aW9ucyIsImxvZ09iaiIsIm5vd01TIiwiRGF0ZSIsIm5vdyIsImRhdGEiLCJtZXNzYWdlIiwicmVzdExvZ09iaiIsIm9ialRvUHVzaCIsImV2ZW50IiwicmVjb3JkX251bSIsIl9sb2dSZWNvcmROdW0iLCJ0aW1lX21zIiwidGltZV90cyIsInRvSVNPU3RyaW5nIiwidmFsdWUiLCJ0b1N0cmluZyIsIl9vcHRpb25zIiwiZGF0YUZpZWxkc1RvUHJvbW90ZSIsIk9iamVjdCIsImVudHJpZXMiLCJmb3JFYWNoIiwibG9nUHJvcCIsImRhdGFQYXRoIiwiZGF0YVZhbCIsIl8iLCJnZXQiLCJ1bmRlZmluZWQiLCJkYXRhRmllbGRzVG9SZW1vdmUiLCJkYXRhUHJvcCIsImtleXMiLCJsZW5ndGgiLCJjb25zb2xlIiwibG9nIiwic3Vic3RyIiwibGV2ZWwiLCJtb2R1bGUiLCJfbG9nT2JqZWN0cyIsInB1c2giLCJlcnIiLCJlcnJvciIsImhvc3QiLCJsb2dzVG9GbHVzaCIsIm5vSFRUUFMiLCJtZXRob2QiLCJib2R5IiwiYmVhY29ucyIsImNvbW1vbiIsInN5c3RlbU1ldGEiLCJjbGllbnRfc2VuZGluZ190aW1lX21zIiwidGltZW91dCIsInRvVVRDU3RyaW5nIiwic2V0SW50ZXJ2YWwiLCJmbHVzaExvZ3MiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7QUFJQTs7QUFDQTs7QUFFQTs7QUFDQTs7Ozs7Ozs7Ozs7O0FBRUEsTUFBTUEscUJBQXFCLEdBQUcsSUFBSSxJQUFsQzs7QUFVZSxNQUFNQyxRQUFOLENBQWU7QUFPNUJDLEVBQUFBLFdBQVcsQ0FBQ0MsT0FBRCxFQUF5QjtBQUFBLHlDQUxQLEVBS087O0FBQUEsMkNBSlosQ0FJWTs7QUFBQTs7QUFBQSw0Q0FTbEJDLE1BQUQsSUFBMEI7QUFDekMsVUFBSTtBQUNGLGNBQU1D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QUFLLEtBQUsxQixRQUFMLENBQWN3QixJQUFLLEtBQTVFLEVBQWtGO0FBQ3RGRyxVQUFBQSxNQUFNLEVBQUUsTUFEOEU7QUFFdEZDLFVBQUFBLElBQUksRUFBRTtBQUNKQyxZQUFBQSxPQUFPLEVBQUVKLFdBREw7QUFFSkssWUFBQUEsTUFBTSxFQUFFLEtBQUs5QixRQUFMLENBQWMrQixVQUZsQjtBQUdKQyxZQUFBQSxzQkFBc0IsRUFBRTlDLElBQUksQ0FBQ0MsR0FBTDtBQUhwQixXQUZnRjtBQU90RjhDLFVBQUFBLE9BQU8sRUFBRTtBQVA2RSxTQUFsRixDQUFOO0FBVUQsT0FqQkQsQ0FpQkUsT0FBT1gsR0FBUCxFQUFZO0FBQ1pQLFFBQUFBLE9BQU8sQ0FBQ1EsS0FBUixDQUFjLHNCQUFkLEVBQXVDLElBQUlyQyxJQUFKLEVBQUQsQ0FBYWdELFdBQWIsRUFBdEMsRUFBa0VaLEdBQWxFLEVBRFksQ0FDMkQ7QUFDeEU7QUFDRixLQXpGbUM7O0FBQ2xDLFNBQUt0QixRQUFMLEdBQWdCakIsT0FBaEI7O0FBRUEsUUFBSSxLQUFLaUIsUUFBTCxDQUFjd0IsSUFBbEIsRUFBd0I7QUFDdEJXLE1BQUFBLFdBQVcsQ0FBQyxLQUFLQyxTQUFOLEVBQWlCeEQscUJBQWpCLENBQVg7QUFDRDtBQUNGOztBQWIyQiIsInNvdXJjZXNDb250ZW50IjpbIi8vIEBmbG93XG5cbi8vIE5PVEU6IGRvbid0IHVzZSBNb2R1bGUgaGVyZSwgc2luY2UgTW9kdWxlIHVzZXMgdGhpcyBjbGFzc1xuXG5pbXBvcnQgc3RyaW5naWZ5IGZyb20gJ2pzb24tc3RyaW5naWZ5LXNhZmUnXG5pbXBvcnQgXyBmcm9tICdsb2Rhc2gnXG5cbmltcG9ydCB7IGh0dHBSZXEgfSBmcm9tICcuL2h0dHBVdGlscydcbmltcG9ydCB7IHBhZFJpZ2h0IH0gZnJvbSAnLi9zdHJpbmdVdGlscydcblxuY29uc3QgTE9HX0ZMVVNIX0lOVEVSVkFMX01TID0gNSAqIDEwMDBcblxudHlwZSBMb2dnZXJPcHRpb25zID0ge1xuICBub0hUVFBTPzogYm9vbGVhbixcbiAgaG9zdD86ID9zdHJpbmcsXG4gIGRhdGFGaWVsZHNUb1Byb21vdGU/OiA/eyBbaWQ6IHN0cmluZ106IHN0cmluZyB9LFxuICBkYXRhRmllbGRzVG9SZW1vdmU/OiA/QXJyYXk8c3RyaW5nPiwgXG4gIHN5c3RlbU1ldGE/OiA/e30sXG59XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFMzTG9nZ2VyIHtcblxuICBfbG9nT2JqZWN0czogQXJyYXk8T2JqZWN0PiA9IFtdXG4gIF9sb2dSZWNvcmROdW06IG51bWJlciA9IDBcbiAgX29wdGlvbnM6IExvZ2dlck9wdGlvbnNcblxuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM6IExvZ2dlck9wdGlvbnMpIHtcbiAgICB0aGlzLl9vcHRpb25zID0gb3B0aW9uc1xuXG4gICAgaWYgKHRoaXMuX29wdGlvbnMuaG9zdCkge1xuICAgICAgc2V0SW50ZXJ2YWwodGhpcy5mbHVzaExvZ3MsIExPR19GTFVTSF9JTlRFUlZBTF9NUylcbiAgICB9XG4gIH1cblxuXG4gIHF1ZXVlTG9nUmVjb3JkID0gKGxvZ09iajogT2JqZWN0KTogdm9pZCA9PiB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IG5vd01TID0gRGF0ZS5ub3coKVxuXG4gICAgICBsZXQgeyBkYXRhLCBtZXNzYWdlLCAuLi5yZXN0TG9nT2JqIH0gPSBsb2dPYmpcblxuICAgICAgY29uc3Qgb2JqVG9QdXNoID0ge1xuICAgICAgICBldmVudDogbWVzc2FnZSxcblxuICAgICAgICAuLi5yZXN0TG9nT2JqLFxuXG4gICAgICAgIHJlY29yZF9udW06ICsrdGhpcy5fbG9nUmVjb3JkTnVtLFxuICAgICAgICB0aW1lX21zOiBub3dNUyxcbiAgICAgICAgdGltZV90czogbmV3IERhdGUobm93TVMpLnRvSVNPU3RyaW5nKCksXG4gICAgICB9XG5cbiAgICAgIGlmIChkYXRhICE9IG51bGwpIHtcblxuICAgICAgICAvLyBtYWtlIHN1cmUgZGF0YSBpcyBhIG9iamVjdFxuICAgICAgICBpZiAodHlwZW9mIGRhdGEgIT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgZGF0YSA9IHtcbiAgICAgICAgICAgIHZhbHVlOiBkYXRhLnRvU3RyaW5nKClcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBwcm9tb3RlIGRhdGEgZmllbGRzXG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRhdGFGaWVsZHNUb1Byb21vdGUpIHtcbiAgICAgICAgICBPYmplY3QuZW50cmllcyh0aGlzLl9vcHRpb25zLmRhdGFGaWVsZHNUb1Byb21vdGUpLmZvckVhY2goKFtsb2dQcm9wLCBkYXRhUGF0aF0pID0+IHtcbiAgICAgICAgICAgIC8vICRGbG93SWdub3JlXG4gICAgICAgICAgICBjb25zdCBkYXRhVmFsID0gXy5nZXQoZGF0YSwgZGF0YVBhdGgpXG4gICAgICAgICAgICBpZiAoZGF0YVZhbCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICAgIG9ialRvUHVzaFtsb2dQcm9wXSA9IGRhdGFWYWxcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9KVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gcmVtb3ZlIGRhdGEgZmllbGRzXG4gICAgICAgIGlmICh0aGlzLl9vcHRpb25zLmRhdGFGaWVsZHNUb1JlbW92ZSkge1xuICAgICAgICAgIHRoaXMuX29wdGlvbnMuZGF0YUZpZWxkc1RvUmVtb3ZlLmZvckVhY2goZGF0YVByb3AgPT4ge1xuICAgICAgICAgICAgZGVsZXRlIGRhdGFbZGF0YVByb3BdXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIHNlcmlhbGl6ZSBkYXRhXG4gICAgICAgIGlmIChPYmplY3Qua2V5cyhkYXRhKS5sZW5ndGggPiAwKVxuICAgICAgICAgIG9ialRvUHVzaC5kYXRhID0gc3RyaW5naWZ5KGRhdGEpXG5cbiAgICAgIH1cblxuICAgICAgLy8gbG9nIHRvIGNvbnNvbGVcbiAgICAgIGNvbnNvbGUubG9nKGAke29ialRvUHVzaC50aW1lX3RzLnN1YnN0cigxMSwgMTIpfTogJHtwYWRSaWdodChvYmpUb1B1c2gubGV2ZWwsIDUsICcgJyl9IFske29ialRvUHVzaC5tb2R1bGV9XSAke29ialRvUHVzaC5ldmVudH0gJHtvYmpUb1B1c2guZGF0YSB8fCAnJ31gKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgXG4gICAgICB0aGlzLl9sb2dPYmplY3RzLnB1c2gob2JqVG9QdXNoKVxuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIHF1ZXVlIGEgbG9nIHJlY29yZCcsIGxvZ09iaiwgZXJyKSAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWNvbnNvbGVcbiAgICB9XG4gIH1cblxuXG4gIGZsdXNoTG9ncyA9IGFzeW5jICgpOiBQcm9taXNlPHZvaWQ+ID0+IHtcbiAgICB0cnkge1xuICAgICAgaWYgKCF0aGlzLl9sb2dPYmplY3RzLmxlbmd0aCB8fCAhdGhpcy5fb3B0aW9ucy5ob3N0KVxuICAgICAgICByZXR1cm5cblxuICAgICAgY29uc3QgbG9nc1RvRmx1c2ggPSB0aGlzLl9sb2dPYmplY3RzXG4gICAgICB0aGlzLl9sb2dPYmplY3RzID0gW11cblxuICAgICAgYXdhaXQgaHR0cFJlcShgJHt0aGlzLl9vcHRpb25zLm5vSFRUUFMgPyAnaHR0cCcgOiAnaHR0cHMnfTovLyR7dGhpcy5fb3B0aW9ucy5ob3N0fS9wMWAsIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsIFxuICAgICAgICBib2R5OiB7XG4gICAgICAgICAgYmVhY29uczogbG9nc1RvRmx1c2gsXG4gICAgICAgICAgY29tbW9uOiB0aGlzLl9vcHRpb25zLnN5c3RlbU1ldGEsXG4gICAgICAgICAgY2xpZW50X3NlbmRpbmdfdGltZV9tczogRGF0ZS5ub3coKSxcbiAgICAgICAgfSxcbiAgICAgICAgdGltZW91dDogMTAwMDAsXG4gICAgICB9KVxuXG4gICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZmx1c2ggbG9ncycsIChuZXcgRGF0ZSgpKS50b1VUQ1N0cmluZygpLCBlcnIpIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tY29uc29sZVxuICAgIH1cbiAgfVxufVxuIl19
\No newline at end of file