Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

bugfix: 当hostname(也即endpoint)存在点号时解析错误 #7

Open
wants to merge 6 commits into
base: master
Choose a base branch
from

Conversation

wolfhong
Copy link

正如 wolfhong#1 中反馈的问题。

当指标的endpoint存在点号.时,也即hostname存在点号.时,会导致无法显示指标图表。

比如,当 hostname = cnsz01vl00002.cmrh.com ,想要查询 mem.memfree.percent 时
发送请求到/api/datasources/proxy/6/render时,target = cnsz01vl00002.cmrh.com#mem#memfree#percent 被错误解析成 cnsz01vl00002#cmrh#com#mem#memfree#percent 导致无法请求到数据。

根据wiki,合法的hostname能包含alphabet (A-Za-z), digits (0-9), minus sign (-), and period (.)

因此,该项目在这方面考虑欠佳。(原项目有一个hack,当hostname是IP地址时,.号不会被转为#,但只并没有根本上解决bug。)

notwork

该问题已经解决。hostname合法时都没有问题。
根据wiki,合法的hostname只能包含alphabet (A-Za-z), digits (0-9), minus sign (-), and period (.)

解决的截图如下:

grafana_fix_problems

可以带入变量。如下图,endpoint 写成 $host ,就可以配合Granfana的变量进行操作。

grafana_working_ok

@wolfhong
Copy link
Author

对于 lexer.js 的代码修改比较多,主要是删除了大量不需要的代码。

  • 请求 /api/datasources/proxy/6/render 时,使用了#作为分隔符,而lexer.js又是使用.号作为分隔符,这就导致了 parser.js 中做了恶心的hack.
  • lexer.js中存在大量不需要的代码,让代码逻辑变得异常复杂,而且在阅读源码时,发现代码中存在明显错误逻辑。比如:
if (this.peek() === ']' && this.peek(1) === ']') {
    return {
        type: 'templateEnd',
        value: '[[',
        pos: this.char
    };
}

中,明显返回值应该是 ]] 而非 [[。然而,这些不会遇到的明显错误(是因为解析"select metric"时不可能遇到该种情况),淹没在了复杂的逻辑中。

@wolfhong
Copy link
Author

另外,可以把该项目的Issue功能打开不?可以让更多的人反馈问题。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant