feat(xo-server/logs-cli): can match on missing props
This commit is contained in:
parent
4636109081
commit
2198853662
@ -30,7 +30,7 @@ const getLogs = (db, args) => {
|
||||
stream = stream.filter(({ value }) => {
|
||||
for (const field of fields) {
|
||||
const fieldValue = get(value, field)
|
||||
if (fieldValue === undefined || !args.matchers[field](fieldValue)) {
|
||||
if (!args.matchers[field](fieldValue)) {
|
||||
return false
|
||||
}
|
||||
}
|
||||
@ -161,7 +161,7 @@ xo-server-logs [--json] [--limit=<limit>] [--since=<date>] [--until=<date>] [<pa
|
||||
<pattern>
|
||||
Patterns can be used to filter the entries.
|
||||
|
||||
Patterns have the following format \`<field>=<value>\`/\`<field>\`.
|
||||
Patterns have the following format \`<field>=<value>\`, \`<field>\` or \`!<field>\`.
|
||||
|
||||
xo-server-logs --gc
|
||||
|
||||
@ -210,20 +210,41 @@ function getArgs() {
|
||||
const field = value.slice(0, i)
|
||||
const pattern = value.slice(i + 1)
|
||||
|
||||
patterns[pattern]
|
||||
? patterns[field].push(pattern)
|
||||
: (patterns[field] = [pattern])
|
||||
} else if (!patterns[value]) {
|
||||
patterns[value] = null
|
||||
const fieldPatterns = patterns[field]
|
||||
if (fieldPatterns === undefined) {
|
||||
patterns[field] = [pattern]
|
||||
} else if (Array.isArray(fieldPatterns)) {
|
||||
fieldPatterns.push(pattern)
|
||||
} else {
|
||||
throw new Error('cannot mix existence with equality patterns')
|
||||
}
|
||||
} else {
|
||||
const negate = value[0] === '!'
|
||||
if (negate) {
|
||||
value = value.slice(1)
|
||||
}
|
||||
|
||||
if (patterns[value]) {
|
||||
throw new Error('cannot mix existence with equality patterns')
|
||||
}
|
||||
|
||||
patterns[value] = !negate
|
||||
}
|
||||
}
|
||||
|
||||
const trueFunction = () => true
|
||||
const mustExists = value => value !== undefined
|
||||
const mustNotExists = value => value === undefined
|
||||
|
||||
args.matchers = {}
|
||||
|
||||
for (const field in patterns) {
|
||||
const values = patterns[field]
|
||||
args.matchers[field] = values === null ? trueFunction : globMatcher(values)
|
||||
args.matchers[field] =
|
||||
values === true
|
||||
? mustExists
|
||||
: values === false
|
||||
? mustNotExists
|
||||
: globMatcher(values)
|
||||
}
|
||||
|
||||
// Warning: minimist makes one array of values if the same option is used many times.
|
||||
|
Loading…
Reference in New Issue
Block a user