From 975c96217cc7ec3b849b97a2c8a00e1d91c8db9c Mon Sep 17 00:00:00 2001 From: wescoeur Date: Fri, 13 Nov 2015 10:55:56 +0100 Subject: [PATCH] avoid sublevel for logs --- package.json | 1 + src/loggers/leveldb.js | 9 +++++++-- src/schemas/log.js | 7 ++++++- src/xo.js | 5 +++-- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/package.json b/package.json index 3560adcb1..3563a04e8 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "got": "^5.0.0", "graceful-fs": "^4.1.2", "hashy": "~0.4.2", + "highland": "^2.5.1", "http-server-plus": "^0.5.1", "human-format": "^0.5.0", "is-my-json-valid": "^2.12.2", diff --git a/src/loggers/leveldb.js b/src/loggers/leveldb.js index 0efe4a2bb..c638f517b 100644 --- a/src/loggers/leveldb.js +++ b/src/loggers/leveldb.js @@ -1,3 +1,5 @@ +import highland from 'highland' + // See: https://en.wikipedia.org/wiki/Syslog#Severity_level const LEVELS = [ 'emergency', @@ -21,8 +23,9 @@ function generateUniqueKey (date) { } export default class LevelDbLogger { - constructor (db) { + constructor (db, namespace) { this._db = db + this._namespace = namespace } _add (level, message, data) { @@ -30,6 +33,7 @@ export default class LevelDbLogger { level, message, data, + namespace: this._namespace, time: Date.now() } @@ -39,7 +43,8 @@ export default class LevelDbLogger { } createReadStream () { - return this._db.createReadStream() + return highland(this._db.createReadStream()) + .filter(({value}) => value.namespace === this._namespace) } } diff --git a/src/schemas/log.js b/src/schemas/log.js index 10f48b43d..1d8b8498c 100644 --- a/src/schemas/log.js +++ b/src/schemas/log.js @@ -14,6 +14,10 @@ export default { type: 'string', description: 'human readable (short) description of this log' }, + namespace: { + type: 'string', + description: 'space to store logs' + }, data: { oneOf: [ { '$ref': 'log/jobStart.js' }, @@ -26,6 +30,7 @@ export default { required: [ 'id', 'time', - 'message' + 'message', + 'namespace' ] } diff --git a/src/xo.js b/src/xo.js index bf1d6d91b..6bfca06ca 100644 --- a/src/xo.js +++ b/src/xo.js @@ -236,9 +236,10 @@ export default class Xo extends EventEmitter { // ----------------------------------------------------------------- - getLogger (identifier) { + getLogger (namespace) { return new LevelDbLogger( - this._leveldb.sublevel('logs').sublevel(identifier) + this._leveldb.sublevel('logs'), + namespace ) }