| 449 | |
| 450 | |
| 451 | void CMain::WatchdogMessage(int ClientNetID, double load_1, double load_5, double load_15, double ping_10010, double ping_189, double ping_10086, |
| 452 | double time_10010, double time_189, double time_10086, double tcp_count, double udp_count, double process_count, double thread_count, |
| 453 | double network_rx, double network_tx, double network_in, double network_out, double last_network_in, double last_network_out, double memory_total, double memory_used, |
| 454 | double swap_total, double swap_used, double hdd_total, double hdd_used, double io_read, double io_write, double cpu, |
| 455 | double online4, double online6) |
| 456 | { |
| 457 | int ID = 0; |
| 458 | while (strcmp(Watchdog(ID)->m_aName, "NULL")) |
| 459 | { |
| 460 | // Exprtk库默认使用窄字符类型,但可能会出现中文等Unicode字符无法正确解析的问题。 |
| 461 | // todo: 为解决此问题,可以使用宽字符类型替换Exprtk库中默认的窄字符类型。 |
| 462 | // #include <string> |
| 463 | // #include <vector> |
| 464 | // #include <exprtk.hpp> |
| 465 | // typedef exprtk::expression<wchar_t> expression_type; |
| 466 | // typedef exprtk::parser<wchar_t> parser_type; |
| 467 | // int main() |
| 468 | // { |
| 469 | // std::wstring expression_string = L"sin(x)"; |
| 470 | // expression_type expression; |
| 471 | // parser_type parser; |
| 472 | // parser.compile(expression_string, expression); |
| 473 | // double x = 3.14; |
| 474 | // double result = expression.value(); |
| 475 | // return 0; |
| 476 | // } |
| 477 | typedef exprtk::symbol_table<double> symbol_table_t; |
| 478 | typedef exprtk::expression<double> expression_t; |
| 479 | typedef exprtk::parser<double> parser_t; |
| 480 | const std::string expression_string = Watchdog(ID)->m_aRule; |
| 481 | int ClientID = ClientNetToClient(ClientNetID); |
| 482 | if(ClientID < 0 || ClientID >= NET_MAX_CLIENTS) { |
| 483 | ID++; |
| 484 | continue; // 无效客户端,跳过当前 watchdog 规则 |
| 485 | } |
| 486 | std::string username = Client(ClientID)->m_aUsername; |
| 487 | std::string name = Client(ClientID)->m_aName; |
| 488 | std::string type = Client(ClientID)->m_aType; |
| 489 | std::string host = Client(ClientID)->m_aHost; |
| 490 | std::string location = Client(ClientID)->m_aLocation; |
| 491 | |
| 492 | symbol_table_t symbol_table; |
| 493 | symbol_table.add_stringvar("username", username); |
| 494 | symbol_table.add_stringvar("name", name); |
| 495 | symbol_table.add_stringvar("type", type); |
| 496 | symbol_table.add_stringvar("host", host); |
| 497 | symbol_table.add_stringvar("location", location); |
| 498 | symbol_table.add_variable("load_1",load_1); |
| 499 | symbol_table.add_variable("load_5",load_5); |
| 500 | symbol_table.add_variable("load_15",load_15); |
| 501 | symbol_table.add_variable("ping_10010",ping_10010); |
| 502 | symbol_table.add_variable("ping_189",ping_189); |
| 503 | symbol_table.add_variable("ping_10086",ping_10086); |
| 504 | symbol_table.add_variable("time_10010",time_10010); |
| 505 | symbol_table.add_variable("time_189",time_189); |
| 506 | symbol_table.add_variable("time_10086",time_10086); |
| 507 | symbol_table.add_variable("tcp_count",tcp_count); |
| 508 | symbol_table.add_variable("udp_count",udp_count); |
nothing calls this directly
no outgoing calls
no test coverage detected