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

还是watchdog的规则问题&username=xxx #230

Open
ztdz opened this issue Oct 13, 2023 · 8 comments
Open

还是watchdog的规则问题&username=xxx #230

ztdz opened this issue Oct 13, 2023 · 8 comments

Comments

@ztdz
Copy link

ztdz commented Oct 13, 2023

之前那个是别人提的被你关闭了,我看了你提交的改动和源码
你的改动意思是把rule从拼接串里面去掉对吧
然后你的这段代码
symbol_table_t symbol_table;
symbol_table.add_variable("load_1",load_1);
symbol_table.add_variable("load_5",load_5);
symbol_table.add_variable("load_15",load_15);
symbol_table.add_variable("ping_10010",ping_10010);
symbol_table.add_variable("ping_189",ping_189);
symbol_table.add_variable("ping_10086",ping_10086);
symbol_table.add_variable("time_10010",time_10010);
symbol_table.add_variable("time_189",time_189);
symbol_table.add_variable("time_10086",time_10086);
symbol_table.add_variable("tcp_count",tcp_count);
symbol_table.add_variable("udp_count",udp_count);
symbol_table.add_variable("process_count",process_count);
symbol_table.add_variable("thread_count",thread_count);
symbol_table.add_variable("network_rx",network_rx);
symbol_table.add_variable("network_tx",network_tx);
symbol_table.add_variable("network_in",network_in);
symbol_table.add_variable("network_out",network_out);
symbol_table.add_variable("memory_total",memory_total);
symbol_table.add_variable("memory_used",memory_used);
symbol_table.add_variable("swap_total",swap_total);
symbol_table.add_variable("swap_used",swap_used);
symbol_table.add_variable("hdd_total",hdd_total);
symbol_table.add_variable("hdd_used",hdd_used);
symbol_table.add_variable("io_read",io_read);
symbol_table.add_variable("io_write",io_write);
symbol_table.add_variable("cpu",cpu);
symbol_table.add_variable("online4",online4);
symbol_table.add_variable("online6",online6);
symbol_table.add_constants();

    expression_t expression;
    expression.register_symbol_table(symbol_table);

    parser_t parser;
    parser.compile(expression_string,expression);

    if (expression.value() > 0)

是不是没有添加进username和name这些固定字段?所以才导致&username=xxx这种不会匹配到规则导致失效?

symbol_table.add_constants(); 这个我不是很懂,我不是写c的我只是会点Java,如果这个里面是加入那些固定值的操作,那我着实找不着原因了

@ztdz
Copy link
Author

ztdz commented Oct 13, 2023

我用你最新代码编译一样不行,其实你改动那块去掉rule拼接对我应该也没啥影响,我用的是telegram的bot,按你的说法,转义应该不存在

@cppla
Copy link
Owner

cppla commented Oct 14, 2023

之前那个是别人提的被你关闭了,我看了你提交的改动和源码 你的改动意思是把rule从拼接串里面去掉对吧 然后你的这段代码 symbol_table_t symbol_table; symbol_table.add_variable("load_1",load_1); symbol_table.add_variable("load_5",load_5); symbol_table.add_variable("load_15",load_15); symbol_table.add_variable("ping_10010",ping_10010); symbol_table.add_variable("ping_189",ping_189); symbol_table.add_variable("ping_10086",ping_10086); symbol_table.add_variable("time_10010",time_10010); symbol_table.add_variable("time_189",time_189); symbol_table.add_variable("time_10086",time_10086); symbol_table.add_variable("tcp_count",tcp_count); symbol_table.add_variable("udp_count",udp_count); symbol_table.add_variable("process_count",process_count); symbol_table.add_variable("thread_count",thread_count); symbol_table.add_variable("network_rx",network_rx); symbol_table.add_variable("network_tx",network_tx); symbol_table.add_variable("network_in",network_in); symbol_table.add_variable("network_out",network_out); symbol_table.add_variable("memory_total",memory_total); symbol_table.add_variable("memory_used",memory_used); symbol_table.add_variable("swap_total",swap_total); symbol_table.add_variable("swap_used",swap_used); symbol_table.add_variable("hdd_total",hdd_total); symbol_table.add_variable("hdd_used",hdd_used); symbol_table.add_variable("io_read",io_read); symbol_table.add_variable("io_write",io_write); symbol_table.add_variable("cpu",cpu); symbol_table.add_variable("online4",online4); symbol_table.add_variable("online6",online6); symbol_table.add_constants();

    expression_t expression;
    expression.register_symbol_table(symbol_table);

    parser_t parser;
    parser.compile(expression_string,expression);

    if (expression.value() > 0)

是不是没有添加进username和name这些固定字段?所以才导致&username=xxx这种不会匹配到规则导致失效?

symbol_table.add_constants(); 这个我不是很懂,我不是写c的我只是会点Java,如果这个里面是加入那些固定值的操作,那我着实找不着原因了

这个是表达式断言,现在不支持静态字符串,只支持数学表达式。例如int / float /double 以及数学变量 等是支持的。

下个版本我看看怎么解决。

@ztdz
Copy link
Author

ztdz commented Oct 14, 2023

那看来有点难搞,要么换个支持的,要么自己解析?
把字符串的单独抽出去,提前分组,机器有id,表达式也搞个id,一对多映射怎么样

@cppla
Copy link
Owner

cppla commented Oct 16, 2023

那看来有点难搞,要么换个支持的,要么自己解析? 把字符串的单独抽出去,提前分组,机器有id,表达式也搞个id,一对多映射怎么样

对,难倒是不难,然而C++开发周期比较长费时间

@cppla
Copy link
Owner

cppla commented Oct 16, 2023

exprtk最新版本已经支持静态字符串参与计算,1.1.1 已经添加该功能,可以测试下。@ztdt

@ztdz
Copy link
Author

ztdz commented Oct 17, 2023

好的谢谢,等我有空的时候升级下试试

@cppla
Copy link
Owner

cppla commented Jan 23, 2024

Exprtk库默认使用窄字符类型,中文等Unicode字符无法解析计算,等待修复

@cppla
Copy link
Owner

cppla commented Apr 3, 2024

网络波动导致的错误宕机告警已经解决
docker pull cppla/serverstatus:latest

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

No branches or pull requests

2 participants