UNPKG

2.23 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const program = require('commander'),
4 EventEmitter = require('events'),
5 fetchAuthData = require('./lib/settings').fetchSettings,
6 notifier = require('node-notifier'),
7 logger = require('./lib/logger'),
8 Gateway = require('./lib/proxy'),
9 validate = require('./lib/validators');
10
11class LogStream extends EventEmitter {
12 constructor(authData) {
13 super();
14 this.authData = authData;
15 this.gateway = new Gateway(authData);
16 }
17
18 start() {
19 const t = this;
20 setInterval(() => t.fetchData(), process.env.INTERVAL);
21 logger.Info('Live logging is starting. \n');
22 }
23
24 fetchData() {
25 this.gateway.logs({ lastId: storage.lastId }).then(({ logs }) => {
26 for (let k in logs) {
27 let row = logs[k];
28
29 if (!storage.exists(row.id)) {
30 storage.add(row);
31 this.emit('message', row);
32 }
33 }
34 });
35 }
36}
37
38const storage = {
39 logs: {},
40 lastId: 0,
41 add: item => {
42 storage.logs[item.id] = item;
43 storage.lastId = item.id;
44 },
45 exists: key => storage.logs.hasOwnProperty(key)
46};
47
48const isError = msg => msg.error_type.match(/error/gi);
49
50program
51 .arguments('[environment]', 'name of environment. Example: staging')
52 .option('-c --config-file <config-file>', 'config file path', '.marketplace-kit')
53 .option('--interval <interval>', 'time to wait between updates in ms', 3000)
54 .action((environment, params) => {
55 process.env.CONFIG_FILE_PATH = params.configFile;
56 process.env.INTERVAL = program.interval;
57
58 const authData = fetchAuthData(environment, program);
59 const stream = new LogStream(authData);
60
61 stream.on('message', msg => {
62 if (!msg.message) {
63 return false;
64 }
65
66 const options = { exit: false, hideTimestamp: true };
67 const text = `[${msg.created_at.replace('T', ' ')}] - ${msg.error_type}: ${msg.message.replace(/\n$/, '')}`;
68
69 isError(msg) ? logger.Error(text, options) : logger.Info(text, options);
70 });
71
72 stream.on('message', msg => {
73 if (!msg.message) {
74 return false;
75 }
76
77 if (isError(msg)) {
78 notifier.notify({ title: msg.error_type, message: msg.message });
79 }
80 });
81
82 stream.start();
83 });
84
85program.parse(process.argv);