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'); + }); });