Merge pull request from balala2oo8/master

修复月流量匹配问题,用username当作key作为匹配月流量的依据

将其合并到分支usernameAsMonthTrafficKey,有喜欢这个版本的的可以使用。唯一的缺点会暴漏username。
This commit is contained in:
cppla 2022-05-23 16:33:06 +08:00 committed by GitHub
commit f43715ff25
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 147 additions and 151 deletions
server/src
web/js

@ -245,7 +245,7 @@ void CMain::JSONUpdateThread(void *pUser)
char aFileBuf[2048*NET_MAX_CLIENTS]; char aFileBuf[2048*NET_MAX_CLIENTS];
char *pBuf = aFileBuf; char *pBuf = aFileBuf;
str_format(pBuf, sizeof(aFileBuf), "{\n\"servers\": [\n"); str_format(pBuf, sizeof(aFileBuf), "{\n\"servers\": {\n");
pBuf += strlen(pBuf); pBuf += strlen(pBuf);
for(int i = 0; i < NET_MAX_CLIENTS; i++) for(int i = 0; i < NET_MAX_CLIENTS; i++)
@ -278,7 +278,8 @@ void CMain::JSONUpdateThread(void *pUser)
} }
str_format(pBuf, sizeof(aFileBuf) - (pBuf - aFileBuf), str_format(pBuf, sizeof(aFileBuf) - (pBuf - aFileBuf),
"{ \"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\" },\n", "\"%s\":{ \"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\" },\n",
pClients[i].m_aUsername,
pClients[i].m_aName,pClients[i].m_aType,pClients[i].m_aHost,pClients[i].m_aLocation, pClients[i].m_aName,pClients[i].m_aType,pClients[i].m_aHost,pClients[i].m_aLocation,
pClients[i].m_Stats.m_Online4 ? "true" : "false",pClients[i].m_Stats.m_Online6 ? "true" : "false", pClients[i].m_Stats.m_Online4 ? "true" : "false",pClients[i].m_Stats.m_Online6 ? "true" : "false",
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, 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,
@ -295,16 +296,16 @@ void CMain::JSONUpdateThread(void *pUser)
{ {
// sava network traffic record to json when close client // sava network traffic record to json when close client
// last_network_in == last network in record, last_network_out == last network out record // last_network_in == last network in record, last_network_out == last network out record
str_format(pBuf, sizeof(aFileBuf) - (pBuf - aFileBuf), "{ \"name\": \"%s\", \"type\": \"%s\", \"host\": \"%s\", \"location\": \"%s\", \"online4\": false, \"online6\": false, \"last_network_in\": %" PRId64 ", \"last_network_out\": %" PRId64 " },\n", str_format(pBuf, sizeof(aFileBuf) - (pBuf - aFileBuf), "\"%s\":{ \"name\": \"%s\", \"type\": \"%s\", \"host\": \"%s\", \"location\": \"%s\", \"online4\": false, \"online6\": false, \"last_network_in\": %" PRId64 ", \"last_network_out\": %" PRId64 " },\n",pClients[i].m_aUsername,
pClients[i].m_aName, pClients[i].m_aType, pClients[i].m_aHost, pClients[i].m_aLocation, pClients[i].m_LastNetworkIN, pClients[i].m_LastNetworkOUT); pClients[i].m_aName, pClients[i].m_aType, pClients[i].m_aHost, pClients[i].m_aLocation, pClients[i].m_LastNetworkIN, pClients[i].m_LastNetworkOUT);
pBuf += strlen(pBuf); pBuf += strlen(pBuf);
} }
} }
if(!m_pJSONUpdateThreadData->m_ReloadRequired) if(!m_pJSONUpdateThreadData->m_ReloadRequired)
str_format(pBuf - 2, sizeof(aFileBuf) - (pBuf - aFileBuf), "\n],\n\"updated\": \"%lld\"\n}", (long long)time(/*ago*/0)); str_format(pBuf - 2, sizeof(aFileBuf) - (pBuf - aFileBuf), "\n},\n\"updated\": \"%lld\"\n}", (long long)time(/*ago*/0));
else else
{ {
str_format(pBuf - 2, sizeof(aFileBuf) - (pBuf - aFileBuf), "\n],\n\"updated\": \"%lld\",\n\"reload\": true\n}", (long long)time(/*ago*/0)); str_format(pBuf - 2, sizeof(aFileBuf) - (pBuf - aFileBuf), "\n},\n\"updated\": \"%lld\",\n\"reload\": true\n}", (long long)time(/*ago*/0));
m_pJSONUpdateThreadData->m_ReloadRequired--; m_pJSONUpdateThreadData->m_ReloadRequired--;
} }
pBuf += strlen(pBuf); pBuf += strlen(pBuf);
@ -442,17 +443,11 @@ int CMain::ReadConfig()
{ {
if(ID < 0 || ID >= NET_MAX_CLIENTS) if(ID < 0 || ID >= NET_MAX_CLIENTS)
continue; continue;
for(unsigned j = 0; j < cStart.u.array.length; j++) char *uName = rStart[i]["username"].u.string.ptr;
if(strlen(cStart[uName]["name"]) != 0)
{ {
if(strcmp(Client(ID)->m_aName, cStart[j]["name"].u.string.ptr)==0 && Client(ID)->m_LastNetworkIN = cStart[uName]["last_network_in"].u.integer;
strcmp(Client(ID)->m_aType, cStart[j]["type"].u.string.ptr)==0 && Client(ID)->m_LastNetworkOUT = cStart[uName]["last_network_out"].u.integer;
strcmp(Client(ID)->m_aHost, cStart[j]["host"].u.string.ptr)==0 &&
strcmp(Client(ID)->m_aLocation, cStart[j]["location"].u.string.ptr)==0)
{
Client(ID)->m_LastNetworkIN = cStart[j]["last_network_in"].u.integer;
Client(ID)->m_LastNetworkOUT = cStart[j]["last_network_out"].u.integer;
break;
}
} }
ID++; ID++;
} }

@ -15,8 +15,7 @@ function timeSince(date) {
return "几秒前."; return "几秒前.";
} }
function bytesToSize(bytes, precision, si) function bytesToSize(bytes, precision, si) {
{
var ret; var ret;
si = typeof si !== 'undefined' ? si : 0; si = typeof si !== 'undefined' ? si : 0;
if (si != 0) { if (si != 0) {
@ -55,7 +54,8 @@ function uptime() {
if (result.reload) if (result.reload)
setTimeout(function () { location.reload() }, 1000); setTimeout(function () { location.reload() }, 1000);
for (var i = 0, rlen=result.servers.length; i < rlen; i++) { let i = 0;
for (let key in result.servers) {
var TableRow = $("#servers tr#r" + i); var TableRow = $("#servers tr#r" + i);
var ExpandRow = $("#servers #rt" + i); var ExpandRow = $("#servers #rt" + i);
var hack; // fuck CSS for making me do this var hack; // fuck CSS for making me do this
@ -97,13 +97,13 @@ function uptime() {
} }
// online_status // online_status
if (result.servers[i].online4 && !result.servers[i].online6) { if (result.servers[key].online4 && !result.servers[key].online6) {
TableRow.children["online_status"].children[0].children[0].className = "progress-bar progress-bar-success"; TableRow.children["online_status"].children[0].children[0].className = "progress-bar progress-bar-success";
TableRow.children["online_status"].children[0].children[0].innerHTML = "<small>IPv4</small>"; TableRow.children["online_status"].children[0].children[0].innerHTML = "<small>IPv4</small>";
} else if (result.servers[i].online4 && result.servers[i].online6) { } else if (result.servers[key].online4 && result.servers[key].online6) {
TableRow.children["online_status"].children[0].children[0].className = "progress-bar progress-bar-success"; TableRow.children["online_status"].children[0].children[0].className = "progress-bar progress-bar-success";
TableRow.children["online_status"].children[0].children[0].innerHTML = "<small>双栈</small>"; TableRow.children["online_status"].children[0].children[0].innerHTML = "<small>双栈</small>";
} else if (!result.servers[i].online4 && result.servers[i].online6) { } else if (!result.servers[key].online4 && result.servers[key].online6) {
TableRow.children["online_status"].children[0].children[0].className = "progress-bar progress-bar-success"; TableRow.children["online_status"].children[0].children[0].className = "progress-bar progress-bar-success";
TableRow.children["online_status"].children[0].children[0].innerHTML = "<small>IPv6</small>"; TableRow.children["online_status"].children[0].children[0].innerHTML = "<small>IPv6</small>";
} else { } else {
@ -112,20 +112,20 @@ function uptime() {
} }
// Name // Name
TableRow.children["name"].innerHTML = result.servers[i].name; TableRow.children["name"].innerHTML = result.servers[key].name;
// Type // Type
TableRow.children["type"].innerHTML = result.servers[i].type; TableRow.children["type"].innerHTML = result.servers[key].type;
// Location // Location
TableRow.children["location"].innerHTML = result.servers[i].location; TableRow.children["location"].innerHTML = result.servers[key].location;
if (!result.servers[i].online4 && !result.servers[i].online6) { if (!result.servers[key].online4 && !result.servers[key].online6) {
if (server_status[i]) { if (server_status[i]) {
TableRow.children["uptime"].innerHTML = ""; TableRow.children["uptime"].innerHTML = "";
TableRow.children["load"].innerHTML = ""; TableRow.children["load"].innerHTML = "";
TableRow.children["network"].innerHTML = ""; TableRow.children["network"].innerHTML = "";
TableRow.children["traffic"].innerHTML = ""; TableRow.children["traffic"].innerHTML = "";
TableRow.children["month_traffic"].children[0].children[0].className = "progress-bar progress-bar-warning"; TableRow.children["month_traffic"].children[0].children[0].className = "progress-bar progress-bar-danger";
TableRow.children["month_traffic"].children[0].children[0].innerHTML = "<small>关闭</small>"; TableRow.children["month_traffic"].children[0].children[0].innerHTML = "<small>关闭</small>";
TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-danger"; TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-danger";
TableRow.children["cpu"].children[0].children[0].style.width = "100%"; TableRow.children["cpu"].children[0].children[0].style.width = "100%";
@ -153,8 +153,8 @@ function uptime() {
// month traffic // month traffic
var monthtraffic = ""; var monthtraffic = "";
var trafficdiff_in = result.servers[i].network_in - result.servers[i].last_network_in; var trafficdiff_in = result.servers[key].network_in - result.servers[key].last_network_in;
var trafficdiff_out = result.servers[i].network_out - result.servers[i].last_network_out; var trafficdiff_out = result.servers[key].network_out - result.servers[key].last_network_out;
if (trafficdiff_in < 1024 * 1024 * 1024 * 1024) if (trafficdiff_in < 1024 * 1024 * 1024 * 1024)
monthtraffic += (trafficdiff_in / 1024 / 1024 / 1024).toFixed(1) + "G"; monthtraffic += (trafficdiff_in / 1024 / 1024 / 1024).toFixed(1) + "G";
else else
@ -168,53 +168,53 @@ function uptime() {
TableRow.children["month_traffic"].children[0].children[0].innerHTML = "<small>" + monthtraffic + "</small>"; TableRow.children["month_traffic"].children[0].children[0].innerHTML = "<small>" + monthtraffic + "</small>";
// Uptime // Uptime
TableRow.children["uptime"].innerHTML = result.servers[i].uptime; TableRow.children["uptime"].innerHTML = result.servers[key].uptime;
// Load: default load_1, you can change show: load_1, load_5, load_15 // Load: default load_1, you can change show: load_1, load_5, load_15
if(result.servers[i].load == -1) { if (result.servers[key].load == -1) {
TableRow.children["load"].innerHTML = ""; TableRow.children["load"].innerHTML = "";
} else { } else {
TableRow.children["load"].innerHTML = result.servers[i].load_1.toFixed(2); TableRow.children["load"].innerHTML = result.servers[key].load_1.toFixed(2);
} }
// Network // Network
var netstr = ""; var netstr = "";
if(result.servers[i].network_rx < 1024*1024) if (result.servers[key].network_rx < 1024 * 1024)
netstr += (result.servers[i].network_rx/1024).toFixed(1) + "K"; netstr += (result.servers[key].network_rx / 1024).toFixed(1) + "K";
else else
netstr += (result.servers[i].network_rx/1024/1024).toFixed(1) + "M"; netstr += (result.servers[key].network_rx / 1024 / 1024).toFixed(1) + "M";
netstr += " | " netstr += " | "
if(result.servers[i].network_tx < 1024*1024) if (result.servers[key].network_tx < 1024 * 1024)
netstr += (result.servers[i].network_tx/1024).toFixed(1) + "K"; netstr += (result.servers[key].network_tx / 1024).toFixed(1) + "K";
else else
netstr += (result.servers[i].network_tx/1024/1024).toFixed(1) + "M"; netstr += (result.servers[key].network_tx / 1024 / 1024).toFixed(1) + "M";
TableRow.children["network"].innerHTML = netstr; TableRow.children["network"].innerHTML = netstr;
//Traffic //Traffic
var trafficstr = ""; var trafficstr = "";
if(result.servers[i].network_in < 1024*1024*1024*1024) if (result.servers[key].network_in < 1024 * 1024 * 1024 * 1024)
trafficstr += (result.servers[i].network_in/1024/1024/1024).toFixed(1) + "G"; trafficstr += (result.servers[key].network_in / 1024 / 1024 / 1024).toFixed(1) + "G";
else else
trafficstr += (result.servers[i].network_in/1024/1024/1024/1024).toFixed(1) + "T"; trafficstr += (result.servers[key].network_in / 1024 / 1024 / 1024 / 1024).toFixed(1) + "T";
trafficstr += " | " trafficstr += " | "
if(result.servers[i].network_out < 1024*1024*1024*1024) if (result.servers[key].network_out < 1024 * 1024 * 1024 * 1024)
trafficstr += (result.servers[i].network_out/1024/1024/1024).toFixed(1) + "G"; trafficstr += (result.servers[key].network_out / 1024 / 1024 / 1024).toFixed(1) + "G";
else else
trafficstr += (result.servers[i].network_out/1024/1024/1024/1024).toFixed(1) + "T"; trafficstr += (result.servers[key].network_out / 1024 / 1024 / 1024 / 1024).toFixed(1) + "T";
TableRow.children["traffic"].innerHTML = trafficstr; TableRow.children["traffic"].innerHTML = trafficstr;
// CPU // CPU
if (result.servers[i].cpu >= 90) if (result.servers[key].cpu >= 90)
TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-danger"; TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-danger";
else if (result.servers[i].cpu >= 80) else if (result.servers[key].cpu >= 80)
TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-warning"; TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-warning";
else else
TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-success"; TableRow.children["cpu"].children[0].children[0].className = "progress-bar progress-bar-success";
TableRow.children["cpu"].children[0].children[0].style.width = result.servers[i].cpu + "%"; TableRow.children["cpu"].children[0].children[0].style.width = result.servers[key].cpu + "%";
TableRow.children["cpu"].children[0].children[0].innerHTML = result.servers[i].cpu + "%"; TableRow.children["cpu"].children[0].children[0].innerHTML = result.servers[key].cpu + "%";
// Memory // Memory
var Mem = ((result.servers[i].memory_used/result.servers[i].memory_total)*100.0).toFixed(0); var Mem = ((result.servers[key].memory_used / result.servers[key].memory_total) * 100.0).toFixed(0);
if (Mem >= 90) if (Mem >= 90)
TableRow.children["memory"].children[0].children[0].className = "progress-bar progress-bar-danger"; TableRow.children["memory"].children[0].children[0].className = "progress-bar progress-bar-danger";
else if (Mem >= 80) else if (Mem >= 80)
@ -223,12 +223,12 @@ function uptime() {
TableRow.children["memory"].children[0].children[0].className = "progress-bar progress-bar-success"; TableRow.children["memory"].children[0].children[0].className = "progress-bar progress-bar-success";
TableRow.children["memory"].children[0].children[0].style.width = Mem + "%"; TableRow.children["memory"].children[0].children[0].style.width = Mem + "%";
TableRow.children["memory"].children[0].children[0].innerHTML = Mem + "%"; TableRow.children["memory"].children[0].children[0].innerHTML = Mem + "%";
ExpandRow[0].children["expand_mem"].innerHTML = "内存: " + bytesToSize(result.servers[i].memory_used*1024, 2) + " / " + bytesToSize(result.servers[i].memory_total*1024, 2); ExpandRow[0].children["expand_mem"].innerHTML = "内存: " + bytesToSize(result.servers[key].memory_used * 1024, 2) + " / " + bytesToSize(result.servers[key].memory_total * 1024, 2);
// Swap // Swap
ExpandRow[0].children["expand_swap"].innerHTML = "交换分区: " + bytesToSize(result.servers[i].swap_used*1024, 2) + " / " + bytesToSize(result.servers[i].swap_total*1024, 2); ExpandRow[0].children["expand_swap"].innerHTML = "交换分区: " + bytesToSize(result.servers[key].swap_used * 1024, 2) + " / " + bytesToSize(result.servers[key].swap_total * 1024, 2);
// HDD // HDD
var HDD = ((result.servers[i].hdd_used/result.servers[i].hdd_total)*100.0).toFixed(0); var HDD = ((result.servers[key].hdd_used / result.servers[key].hdd_total) * 100.0).toFixed(0);
if (HDD >= 90) if (HDD >= 90)
TableRow.children["hdd"].children[0].children[0].className = "progress-bar progress-bar-danger"; TableRow.children["hdd"].children[0].children[0].className = "progress-bar progress-bar-danger";
else if (HDD >= 80) else if (HDD >= 80)
@ -240,41 +240,42 @@ function uptime() {
// IO Speed for HDD. // IO Speed for HDD.
// IO 过小的B字节单位没有意义 // IO 过小的B字节单位没有意义
var io = ""; var io = "";
if(result.servers[i].io_read < 1024*1024) if (result.servers[key].io_read < 1024 * 1024)
io += parseInt(result.servers[i].io_read/1024) + "K"; io += parseInt(result.servers[key].io_read / 1024) + "K";
else else
io += parseInt(result.servers[i].io_read/1024/1024) + "M"; io += parseInt(result.servers[key].io_read / 1024 / 1024) + "M";
io += " / " io += " / "
if(result.servers[i].io_write < 1024*1024) if (result.servers[key].io_write < 1024 * 1024)
io += parseInt(result.servers[i].io_write/1024) + "K"; io += parseInt(result.servers[key].io_write / 1024) + "K";
else else
io += parseInt(result.servers[i].io_write/1024/1024) + "M"; io += parseInt(result.servers[key].io_write / 1024 / 1024) + "M";
// Expand for HDD. // Expand for HDD.
ExpandRow[0].children["expand_hdd"].innerHTML = "硬盘|读写: " + bytesToSize(result.servers[i].hdd_used*1024*1024, 2) + " / " + bytesToSize(result.servers[i].hdd_total*1024*1024, 2) + " | " + io; ExpandRow[0].children["expand_hdd"].innerHTML = "硬盘|读写: " + bytesToSize(result.servers[key].hdd_used * 1024 * 1024, 2) + " / " + bytesToSize(result.servers[key].hdd_total * 1024 * 1024, 2) + " | " + io;
// delay time // delay time
// tcp, udp, process, thread count // tcp, udp, process, thread count
ExpandRow[0].children["expand_tupd"].innerHTML = "TCP/UDP/进/线: " + result.servers[i].tcp_count + " / " + result.servers[i].udp_count + " / " + result.servers[i].process_count+ " / " + result.servers[i].thread_count; ExpandRow[0].children["expand_tupd"].innerHTML = "TCP/UDP/进/线: " + result.servers[key].tcp_count + " / " + result.servers[key].udp_count + " / " + result.servers[key].process_count + " / " + result.servers[key].thread_count;
ExpandRow[0].children["expand_ping"].innerHTML = "联通/电信/移动: " + result.servers[i].time_10010 + "ms / " + result.servers[i].time_189 + "ms / " + result.servers[i].time_10086 + "ms" ExpandRow[0].children["expand_ping"].innerHTML = "联通/电信/移动: " + result.servers[key].time_10010 + "ms / " + result.servers[key].time_189 + "ms / " + result.servers[key].time_10086 + "ms"
// ping // ping
var PING_10010 = result.servers[i].ping_10010.toFixed(0); var PING_10010 = result.servers[key].ping_10010.toFixed(0);
var PING_189 = result.servers[i].ping_189.toFixed(0); var PING_189 = result.servers[key].ping_189.toFixed(0);
var PING_10086 = result.servers[i].ping_10086.toFixed(0); var PING_10086 = result.servers[key].ping_10086.toFixed(0);
if (PING_10010 >= 20 || PING_189 >= 20 || PING_10086 >= 20) if (PING_10010 >= 70 || PING_189 >= 70 || PING_10086 >= 70)
TableRow.children["ping"].children[0].children[0].className = "progress-bar progress-bar-warning"; TableRow.children["ping"].children[0].children[0].className = "progress-bar progress-bar-warning";
else else
TableRow.children["ping"].children[0].children[0].className = "progress-bar progress-bar-success"; TableRow.children["ping"].children[0].children[0].className = "progress-bar progress-bar-success";
TableRow.children["ping"].children[0].children[0].innerHTML = PING_10010 + "%💻" + PING_189 + "%💻" + PING_10086 + "%"; TableRow.children["ping"].children[0].children[0].innerHTML = PING_10010 + "-" + PING_189 + "-" + PING_10086 + "";
// Custom // Custom
if (result.servers[i].custom) { if (result.servers[key].custom) {
ExpandRow[0].children["expand_custom"].innerHTML = result.servers[i].custom ExpandRow[0].children["expand_custom"].innerHTML = result.servers[key].custom
} else { } else {
ExpandRow[0].children["expand_custom"].innerHTML = "" ExpandRow[0].children["expand_custom"].innerHTML = ""
} }
} }
i++;
}; };
d = new Date(result.updated * 1000); d = new Date(result.updated * 1000);