From 3c1b30e3c1861357afb632c0abb677cec3dd9348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Mon, 15 Dec 2014 11:36:08 +0100 Subject: [PATCH] Graphite: parser fix for hard case where ip numbers are used as segments, Fixes #1224 --- src/app/services/graphite/parser.js | 9 ++++++++- src/test/specs/parser-specs.js | 8 ++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/app/services/graphite/parser.js b/src/app/services/graphite/parser.js index c5ee82deb38..242068f9d85 100644 --- a/src/app/services/graphite/parser.js +++ b/src/app/services/graphite/parser.js @@ -67,9 +67,16 @@ define([ } if (this.match('identifier') || this.match('number')) { + // hack to handle float numbers in metric segments + var parts = this.consumeToken().value.split('.'); + if (parts.length === 2) { + this.tokens.splice(this.index, 0, { type: '.' }); + this.tokens.splice(this.index + 1, 0, { type: 'number', value: parts[1] }); + } + return { type: 'segment', - value: this.consumeToken().value + value: parts[0] }; } diff --git a/src/test/specs/parser-specs.js b/src/test/specs/parser-specs.js index 33c234ae823..f1b216f3f2f 100644 --- a/src/test/specs/parser-specs.js +++ b/src/test/specs/parser-specs.js @@ -165,6 +165,14 @@ define([ expect(rootNode.params[1].value).to.be('#B'); }); + it('should parse metric expression with ip number segments', function() { + var parser = new Parser('5.10.123.5'); + var rootNode = parser.getAst(); + expect(rootNode.segments[0].value).to.be('5'); + expect(rootNode.segments[1].value).to.be('10'); + expect(rootNode.segments[2].value).to.be('123'); + expect(rootNode.segments[3].value).to.be('5'); + }); });