-
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathlog.js
114 lines (97 loc) · 3.03 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
107
108
109
110
111
112
113
114
const argv = require('minimist')(process.argv.slice(2))
const chalk = require('chalk')
const forEach = require('lodash/forEach')
const groupBy = require('lodash/groupBy')
const keys = require('lodash/keys')
const pickBy = require('lodash/pickBy')
const sortBy = require('lodash/sortBy')
const config = require('../lib/config')()
const find = require('../lib/find')
const search = require('../lib/search')
const tail = require('../lib/tail')
module.exports = async (options) => {
let client = argv['_'][1] || null
let instance = argv['_'][2] || null
let selected = null
// Get Client & Instance, or check for Default
if (client && instance) {
selected = config.get(client, instance)
} else {
const defaultConfig = config.get(client, instance, true)
if (defaultConfig) {
client = defaultConfig.client
instance = defaultConfig.instance
selected = defaultConfig.config
}
}
if (selected) {
let files = await find('Logs', {
baseURL: `https://${selected.h}/on/demandware.servlet/webdav/Sites/`,
auth: {
username: selected.u,
password: selected.p,
},
}).catch((error) => {
console.log(chalk.red.bold('\n✖') + ` ${error}\n`)
})
if (!files) {
return
}
files = files.filter(({displayname}) => displayname.includes('.log'))
// Group Logs
let groups = groupBy(files, ({displayname}) => displayname.split('-blade')[0])
// pick out logs we want to include
if (options.include.length > 0) {
if (options.include.length === 1 && options.include[0].includes(',')) {
options.include = options.include[0].split(',')
}
groups = pickBy(
groups,
(group, name) =>
options.include.filter((level) => {
return new RegExp(level).test(name)
}).length > 0
)
}
// pick out logs we want to exclude
if (options.exclude.length > 0) {
if (options.exclude.length === 1 && options.exclude[0].includes(',')) {
options.exclude = options.exclude[0].split(',')
}
groups = pickBy(
groups,
(group, name) =>
options.exclude.filter((level) => {
return new RegExp(level).test(name)
}).length === 0
)
}
// get list of log types
if (options.list) {
console.log(chalk.green.bold('\nLog Types:\n'))
forEach(keys(groups).sort(), (group) => {
console.log('· ' + group)
})
console.log('')
process.exit()
}
// setup logs
const logs = []
forEach(groups, (files, name) => {
logs[name] = []
})
// sort groups by last modified
forEach(groups, (files, name) => {
var sorted = sortBy(files, (file) => new Date(file.getlastmodified)).reverse()
groups[name] = options.latest ? [sorted[0]] : sorted
})
try {
// Start log output
options.search
? search(selected, client, instance, groups, options)
: tail(selected, client, instance, logs, groups, options)
} catch (err) {
console.log(err)
}
}
}