From 4d7d06891dc02f7b55b63dde368dbeeb5c14aa51 Mon Sep 17 00:00:00 2001 From: Hunter Trujillo Date: Tue, 28 Nov 2017 16:18:06 -0700 Subject: [PATCH] Add experimental string parse failure recovery. --- ui/.eslintrc | 2 +- ui/src/kapacitor/containers/TickscriptPage.js | 68 +++++++++++++------ 2 files changed, 47 insertions(+), 23 deletions(-) diff --git a/ui/.eslintrc b/ui/.eslintrc index 5e8a1a3cb..b2bea4ad0 100644 --- a/ui/.eslintrc +++ b/ui/.eslintrc @@ -48,7 +48,7 @@ 'arrow-parens': 0, 'comma-dangle': [2, 'always-multiline'], 'no-cond-assign': 2, - 'no-console': ['error', {allow: ['error']}], + 'no-console': ['error', {allow: ['error', 'warn']}], 'no-constant-condition': 2, 'no-control-regex': 2, 'no-debugger': 2, diff --git a/ui/src/kapacitor/containers/TickscriptPage.js b/ui/src/kapacitor/containers/TickscriptPage.js index 18ced564c..8abf937aa 100644 --- a/ui/src/kapacitor/containers/TickscriptPage.js +++ b/ui/src/kapacitor/containers/TickscriptPage.js @@ -28,6 +28,7 @@ class TickscriptPage extends Component { isEditingID: true, logs: [], areLogsEnabled: false, + failStr: '', } } @@ -48,20 +49,22 @@ class TickscriptPage extends Component { return } - this.setState({ - areLogsEnabled: true, - logs: [ - { - id: uuid.v4(), - key: uuid.v4(), - lvl: 'info', - msg: 'created log session', - service: 'sessions', - tags: 'nil', - ts: new Date().toISOString(), - }, - ], - }) + if (this.state.logs.length === 0) { + this.setState({ + areLogsEnabled: true, + logs: [ + { + id: uuid.v4(), + key: uuid.v4(), + lvl: 'info', + msg: 'created log session', + service: 'sessions', + tags: 'nil', + ts: new Date().toISOString(), + }, + ], + }) + } const response = await getLogStreamByRuleID(kapacitor, ruleID) @@ -77,16 +80,37 @@ class TickscriptPage extends Component { stream: !result.done, }) - const json = `[${chunk.split('}\n{').join('},{')}]` + const json = chunk.split('\n') - const logs = JSON.parse(json).map(log => ({ - ...log, - key: uuid.v4(), - })) + let logs = [] + let failStr = this.state.failStr - this.setState({ - logs: [...logs, ...this.state.logs], - }) + try { + for (let objStr of json) { + objStr = failStr + objStr + failStr = objStr + const jsonStr = `[${objStr.split('}{').join('},{')}]` + logs = [ + ...logs, + ...JSON.parse(jsonStr).map(log => ({ + ...log, + key: uuid.v4(), + })), + ] + failStr = '' + } + + this.setState({ + logs: [...this.state.logs, ...logs], + failStr, + }) + } catch (err) { + console.warn(err, failStr) + this.setState({ + logs: [...this.state.logs, ...logs], + failStr, + }) + } } } catch (error) { console.error(error)