-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy pathlog.js
66 lines (53 loc) · 1.95 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
'use strict'
var dwServer = require('dw-webdav')
var Tail = require('./helpers/Tail');
var formatter = require('./helpers/format.js')
var AnimateChunk = require('./helpers/aninateChunk.js')
var chalk = require('chalk')
function log(config){
let host = config.hostname
let username = config.username
let password = config.password
let level = config.level || '(custom)?error'
let server = new dwServer(host, 'dw-utils', username, password)
let gotEntries = server.ls('../Logs');
let regex = new RegExp(`^${level}-blade`)
let seenLevels = {};
let animateOut = new AnimateChunk({animationDuration : 500});
animateOut.pipe(process.stdout);
gotEntries.then( entries => {
let newest_logs = entries.filter( entry => {
let result = regex.test(entry.propstat.prop.displayname)
return result
})
.sort((a, b) => {
let am = new Date(a.propstat.prop.getlastmodified);
let bm = new Date(b.propstat.prop.getlastmodified);
let difference = bm - am;
return difference / Math.abs(difference) // just return 1, -1 or 0
}).filter( entry => {
// get logging level from the name
let name = entry.propstat.prop.displayname.replace(/^([\w\d-]+)-blade.*$/,"$1")
if (name in seenLevels) return false;
seenLevels[name] = 1;
entry.name = name;
return true;
})
let title = newest_logs
.map(log => chalk.white.underline(log.propstat.prop.displayname.replace(/-blade.*-/, "-")))
.join(', ');
console.log(chalk.yellow(
formatter.center('[','-', (`| ${title} |`), ']')
));
for (let i = 0; i < newest_logs.length; i++){
let logFile = new Tail({
poll_interval: config.interval,
follow : config.follow,
}, server, '../Logs/' + newest_logs[i].propstat.prop.displayname)
logFile
.pipe(new formatter({name :newest_logs[i].propstat.prop.displayname}))
.pipe(animateOut)
}
})
}
module.exports = log