-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathlog.js
108 lines (98 loc) · 2.47 KB
/
log.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
'use strict';
var exec = require('child_process').exec;
var util = require('util');
// set the polling interval in milliseconds to your pleasure
// don't be too aggressive, Azure may think you're
// DOSing the API ;)
var pollingInterval = 10000;
var service = process.argv[2];
var lastLog = new Date(1,1,1970);
var isBusy = false;
var lastWrite = ".";
// console font
var red, blue, green, yellow, bold, reset;
bold = '\u001b[1m';
red = '\u001b[31m';
blue = '\u001b[34m';
yellow= '\u001b[33m';
green = '\u001b[32m';
reset = '\u001b[0m';
console.log(bold + 'LOG WATCHER');
console.log('Mobile Service name: ', service, reset);
// This little function can be used to help invoke the
// CLI on a child process. It always appends --json to the
// specified command and attempts to parse a non-error body
// into JavaScript objects to pass to the callback
function executeJsonCmd(cmd, callback) {
exec(cmd + " --json", function(err, stdout, stderror) {
if (err) {
callback(err);
}
else if (stderror) {
callback(stderror);
}
else {
if (stdout) {
callback(null, JSON.parse(stdout));
}
else {
callback(null, null);
}
}
});
}
function readLog() {
isBusy = true;
animate();
executeJsonCmd("azure mobile log " + service, function (err, response) {
isBusy = false;
process.stdout.write(" \r");
if (err) {
console.error(err);
}
else {
var color;
var logs = response.results.sort(function(l) {
return l.timeCreated
}).reverse();
response.results.forEach(function(l) {
switch (l.type.toUpperCase()){
case "ERROR":
color = red;
break;
case "WARNING":
color = yellow;
break;
case "INFORMATION":
color = green;
break;
default:
color = reset;
}
if (Date.parse(l.timeCreated) > lastLog) {
console.log("-----")
console.log(color + l.type.toUpperCase() + reset);
console.log(l.timeCreated);
console.log("source: ", l.source);
console.log(l.message);
}
})
}
process.stdout.write(reset);
try {lastLog = Date.parse(response.results[response.results.length-1].timeCreated);}catch(err){}
setTimeout(readLog, pollingInterval);
})
}
function animate() {
if (isBusy) {
lastWrite += ".";
if (lastWrite.length >= 6)
{
lastWrite = "";
}
process.stdout.write(" \r");
process.stdout.write(" polling" + lastWrite + "\r");
setTimeout(animate, 150)
}
}
readLog();