| 593 | } |
| 594 | |
| 595 | void CMain::JSONUpdateThread(void *pUser) |
| 596 | { |
| 597 | CJSONUpdateThreadData *m_pJSONUpdateThreadData = (CJSONUpdateThreadData *)pUser; |
| 598 | CClient *pClients = m_pJSONUpdateThreadData->pClients; |
| 599 | CConfig *pConfig = m_pJSONUpdateThreadData->pConfig; |
| 600 | |
| 601 | while(gs_Running) |
| 602 | { |
| 603 | char aFileBuf[2048*NET_MAX_CLIENTS]; |
| 604 | char *pBuf = aFileBuf; |
| 605 | |
| 606 | str_format(pBuf, sizeof(aFileBuf), "{\n\"servers\": [\n"); |
| 607 | pBuf += strlen(pBuf); |
| 608 | |
| 609 | for(int i = 0; i < NET_MAX_CLIENTS; i++) |
| 610 | { |
| 611 | if(!pClients[i].m_Active || pClients[i].m_Disabled) |
| 612 | continue; |
| 613 | |
| 614 | if(pClients[i].m_Connected) |
| 615 | { |
| 616 | // Uptime |
| 617 | char aUptime[16]; |
| 618 | int Days = pClients[i].m_Stats.m_Uptime/60.0/60.0/24.0; |
| 619 | if(Days > 0) |
| 620 | { |
| 621 | if(Days > 1) |
| 622 | str_format(aUptime, sizeof(aUptime), "%d 天", Days); |
| 623 | else |
| 624 | str_format(aUptime, sizeof(aUptime), "%d 天", Days); |
| 625 | } |
| 626 | else |
| 627 | str_format(aUptime, sizeof(aUptime), "%02d:%02d:%02d", (int)(pClients[i].m_Stats.m_Uptime/60.0/60.0), (int)((pClients[i].m_Stats.m_Uptime/60)%60), (int)((pClients[i].m_Stats.m_Uptime)%60)); |
| 628 | |
| 629 | // track month network traffic, diff: 2021-10-01 00:05, 5minutes |
| 630 | // last_network_in/out is last record flag. |
| 631 | time_t currentStamp = (long long)time(/*ago*/0); |
| 632 | if(0 == pClients[i].m_LastNetworkIN || (0 != pClients[i].m_Stats.m_NetworkIN && pClients[i].m_LastNetworkIN > pClients[i].m_Stats.m_NetworkIN) || (localtime(¤tStamp)->tm_mday == pClients[i].m_aMonthStart && localtime(¤tStamp)->tm_hour == 0 && localtime(¤tStamp)->tm_min < 5)) |
| 633 | { |
| 634 | pClients[i].m_LastNetworkIN = pClients[i].m_Stats.m_NetworkIN; |
| 635 | pClients[i].m_LastNetworkOUT = pClients[i].m_Stats.m_NetworkOUT; |
| 636 | } |
| 637 | |
| 638 | str_format(pBuf, sizeof(aFileBuf) - (pBuf - aFileBuf), |
| 639 | "{ \"name\": \"%s\",\"type\": \"%s\",\"host\": \"%s\",\"location\": \"%s\",\"online4\": %s, \"online6\": %s, \"uptime\": \"%s\",\"load_1\": %.2f, \"load_5\": %.2f, \"load_15\": %.2f,\"ping_10010\": %.2f, \"ping_189\": %.2f, \"ping_10086\": %.2f,\"time_10010\": %" PRId64 ", \"time_189\": %" PRId64 ", \"time_10086\": %" PRId64 ", \"tcp_count\": %" PRId64 ", \"udp_count\": %" PRId64 ", \"process_count\": %" PRId64 ", \"thread_count\": %" PRId64 ", \"network_rx\": %" PRId64 ", \"network_tx\": %" PRId64 ", \"network_in\": %" PRId64 ", \"network_out\": %" PRId64 ", \"cpu\": %d, \"memory_total\": %" PRId64 ", \"memory_used\": %" PRId64 ", \"swap_total\": %" PRId64 ", \"swap_used\": %" PRId64 ", \"hdd_total\": %" PRId64 ", \"hdd_used\": %" PRId64 ", \"last_network_in\": %" PRId64 ", \"last_network_out\": %" PRId64 ",\"io_read\": %" PRId64 ", \"io_write\": %" PRId64 ",\"custom\": \"%s\", \"os\": \"%s\" },\n", |
| 640 | pClients[i].m_aName,pClients[i].m_aType,pClients[i].m_aHost,pClients[i].m_aLocation, |
| 641 | pClients[i].m_Stats.m_Online4 ? "true" : "false",pClients[i].m_Stats.m_Online6 ? "true" : "false", |
| 642 | aUptime, pClients[i].m_Stats.m_Load_1, pClients[i].m_Stats.m_Load_5, pClients[i].m_Stats.m_Load_15, pClients[i].m_Stats.m_ping_10010, pClients[i].m_Stats.m_ping_189, pClients[i].m_Stats.m_ping_10086, |
| 643 | pClients[i].m_Stats.m_time_10010, pClients[i].m_Stats.m_time_189, pClients[i].m_Stats.m_time_10086,pClients[i].m_Stats.m_tcpCount,pClients[i].m_Stats.m_udpCount,pClients[i].m_Stats.m_processCount,pClients[i].m_Stats.m_threadCount, |
| 644 | pClients[i].m_Stats.m_NetworkRx, pClients[i].m_Stats.m_NetworkTx, pClients[i].m_Stats.m_NetworkIN, pClients[i].m_Stats.m_NetworkOUT, (int)pClients[i].m_Stats.m_CPU, pClients[i].m_Stats.m_MemTotal, pClients[i].m_Stats.m_MemUsed, |
| 645 | pClients[i].m_Stats.m_SwapTotal, pClients[i].m_Stats.m_SwapUsed, pClients[i].m_Stats.m_HDDTotal, pClients[i].m_Stats.m_HDDUsed, |
| 646 | pClients[i].m_Stats.m_NetworkIN == 0 || pClients[i].m_LastNetworkIN == 0 ? pClients[i].m_Stats.m_NetworkIN : pClients[i].m_LastNetworkIN, |
| 647 | pClients[i].m_Stats.m_NetworkOUT == 0 || pClients[i].m_LastNetworkOUT == 0 ? pClients[i].m_Stats.m_NetworkOUT : pClients[i].m_LastNetworkOUT, |
| 648 | pClients[i].m_Stats.m_IORead, pClients[i].m_Stats.m_IOWrite, |
| 649 | pClients[i].m_Stats.m_aCustom, |
| 650 | pClients[i].m_Stats.m_aOS[0] ? pClients[i].m_Stats.m_aOS : ""); |
| 651 | pBuf += strlen(pBuf); |
| 652 | } |
nothing calls this directly
no test coverage detected