1069 std::string xml, subXML, json, execJSON, clientJSON, webClientJSON, webSocketJSON;
1070 std::map<uint64,RequestConnection>::iterator i,e;
1071 std::list<CallLogEntry*>::reverse_iterator ic, ec;
1072 uint32 clientCount = 0, execCount = 0, webClientCount = 0, webSocketCount = 0;
1074 uint32 ms1 = 1000, ms2 = 10000, ms3 = 60000;
1075 double lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3;
1076 double svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3;
1084 channel->sendHTTPReply(reply, conid);
1087 addToCallLog(++
callLogCount, 2, 3,
false, req->
source, 0, 0, 0, req->
endReceiveTime,
GetTimeNow(), 0,
GetTimeAge(now), req->
type, req->
getSize(), reply->
getSize(),
"Auth Failed",
1096 svalPerSec1 = scountPerSec1 = svalPerSec2 = scountPerSec2 = svalPerSec3 = scountPerSec3 =
1097 lvalPerSec1 = lcountPerSec1 = lvalPerSec2 = lcountPerSec2 = lvalPerSec3 = lcountPerSec3 = 0;
1099 if (!i->second.lastFailTime) {
1103 subXML +=
utils::StringFormat(
"<executor id=\"%llu\" location=\"%u.%u.%u.%u:%u\" shortQueue=\"%u\" longQueue=\"%u\" count=\"%u\" uptime=\"%s\" statustime=\"%s\" />\n",
1106 i->second.shortReqQueue.getCount(),
1107 i->second.longReqQueue.getCount(),
1114 if (execJSON.length())
1116 execJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"shortQueue\":%u, \"longQueue\":%u, \"count\":%u, \"uptime\":\"%s\", \"statustime\":\"%s\" }\n",
1119 i->second.shortReqQueue.getCount(),
1120 i->second.longReqQueue.getCount(),
1130 if (!i->second.lastFailTime) {
1136 subXML +=
utils::StringFormat(
"<client id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" />\n",
1144 if (clientJSON.length())
1146 clientJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\" }\n",
1157 if (!i->second.lastFailTime) {
1163 subXML +=
utils::StringFormat(
"<webclient id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" />\n",
1171 if (webClientJSON.length())
1172 webClientJSON +=
",";
1173 webClientJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\" }\n",
1184 if (!i->second.lastFailTime) {
1190 subXML +=
utils::StringFormat(
"<websocket id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" />\n",
1198 if (webSocketJSON.length())
1199 webSocketJSON +=
",";
1200 webSocketJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\" }\n",
1210 shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1211 longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1213 xml =
utils::StringFormat(
"<status uptime=\"%s\" version=\"%s\" executors=\"%u\" clients=\"%u\" webclients=\"%u\" websockets=\"%u\" maxqueuesize=\"%u\" minqueuesize=\"%u\" "
1214 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1215 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" "
1219 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1220 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1223 json =
utils::StringFormat(
"{\"uptime\":\"%s\", \"version\":\"%s\", \"executorcount\":%u, \"clientcount\":%u, \"webclientcount\":%u, \"websocketcount\":%u, \"maxqueuesize\":%u, \"minqueuesize\":%u, "
1224 "\"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1225 "\"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f, "
1226 "\"executors\":[%s], \"clients\":[%s], \"webclients\":[%s], \"websockets\":[%s]}\n",
1229 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1230 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1231 execJSON.c_str(), clientJSON.c_str(), webClientJSON.c_str(), webSocketJSON.c_str());
1234 svalPerSec1 = scountPerSec1 = svalPerSec2 = scountPerSec2 = svalPerSec3 = scountPerSec3 =
1235 lvalPerSec1 = lcountPerSec1 = lvalPerSec2 = lcountPerSec2 = lvalPerSec3 = lcountPerSec3 = 0;
1237 if (!i->second.lastFailTime) {
1238 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1239 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1241 subXML +=
utils::StringFormat(
"<executor id=\"%llu\" location=\"%u.%u.%u.%u:%u\" shortqueuesize=\"%u\" longqueuesize=\"%u\" count=\"%u\" uptime=\"%s\" statustime=\"%s\" "
1242 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1243 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" ",
1244 ">\n<shortqueue>\n%s</shortqueue>\n<longqueue>\n%s</longqueue></executor>\n",
1247 i->second.shortReqQueue.getCount(),
1248 i->second.longReqQueue.getCount(),
1252 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1253 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1254 i->second.shortReqQueue.toXML().c_str(),
1255 i->second.longReqQueue.toXML().c_str()
1259 if (execJSON.length())
1261 execJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"shortqueuesize\":%u, \"longqueuesize\":%u, \"count\":%u, \"uptime\":\"%s\", \"statustime\":\"%s\", "
1262 " \"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1263 " \"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f, "
1264 " \"shortqueue\":[%s], \"longqueue\":[%s] }\n",
1267 i->second.shortReqQueue.getCount(),
1268 i->second.longReqQueue.getCount(),
1272 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1273 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1274 i->second.shortReqQueue.toJSON().c_str(),
1275 i->second.longReqQueue.toJSON().c_str()
1282 if (!i->second.lastFailTime) {
1285 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1286 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1288 subXML +=
utils::StringFormat(
"<client id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" "
1289 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1290 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" ",
1296 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1297 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1301 if (clientJSON.length())
1303 clientJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\", "
1304 " \"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1305 " \"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f "
1311 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1312 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1319 if (!i->second.lastFailTime) {
1322 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1323 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1325 subXML +=
utils::StringFormat(
"<webclient id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" "
1326 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1327 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" "
1333 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1334 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1338 if (webClientJSON.length())
1339 webClientJSON +=
",";
1340 webClientJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\", "
1341 " \"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1342 " \"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f "
1348 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1349 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1356 if (!i->second.lastFailTime) {
1359 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1360 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1362 subXML +=
utils::StringFormat(
"<websocket id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" "
1363 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1364 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" "
1370 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1371 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1375 if (webSocketJSON.length())
1376 webSocketJSON +=
",";
1377 webSocketJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\", "
1378 " \"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1379 " \"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f "
1385 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1386 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1392 shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1393 longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1395 xml =
utils::StringFormat(
"<status uptime=\"%s\" version=\"%s\" executors=\"%u\" clients=\"%u\" webclients=\"%u\" websockets=\"%u\" maxqueuesize=\"%u\" minqueuesize=\"%u\" "
1396 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1397 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" "
1401 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1402 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1405 json =
utils::StringFormat(
"{\"uptime\":\"%s\", \"version\":\"%s\", \"executorcount\":%u, \"clientcount\":%u, \"webclientcount\":%u, \"websocketcount\":%u, \"maxqueuesize\":%u, \"minqueuesize\":%u, "
1406 "\"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1407 "\"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f, "
1408 "\"executors\":[%s], \"clients\":[%s], \"webclients\":[%s], \"websockets\":[%s]}\n",
1411 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1412 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1413 execJSON.c_str(), clientJSON.c_str(), webClientJSON.c_str(), webSocketJSON.c_str());
1418 if (!maxCount) maxCount = 100;
1429 for (ic =
callLog.rbegin(), ec =
callLog.rend(); ic != ec; ic++) {
1430 if (accountID && ((*ic)->accountID != accountID))
continue;
1431 if (clientID && ((*ic)->clientID != clientID))
continue;
1432 if (
port && ((*ic)->port !=
port))
continue;
1433 if (minduration && ( ((*ic)->endTime - (*ic)->startTime) < (minduration * 1000)))
continue;
1434 if (maxduration && (((*ic)->endTime - (*ic)->startTime) > (maxduration * 1000)))
continue;
1435 if (webonly && ((*ic)->conType != 2))
continue;
1436 if (messageonly && ((*ic)->conType != 1))
continue;
1437 if (status && (!
utils::stristr((*ic)->status.c_str(), status)))
continue;
1439 if ((json = (*ic)->toJSON()).length()) {
1440 if (execJSON.length())
1444 if (++count > maxCount)
break;
1449 "{\"uptime\":\"%s\", \"version\":\"%s\", \"executorcount\":%u, \"clientcount\":%u, \"webclientcount\":%u, \"websocketcount\":%u,\n"
1450 "\"count\":%u, \"calllog\": [%s]}\n",
1452 count, execJSON.c_str());
1464 bool isAvailable =
false;
1466 if (!i->second.lastFailTime) {
1480 svalPerSec1 = scountPerSec1 = svalPerSec2 = scountPerSec2 = svalPerSec3 = scountPerSec3 =
1481 lvalPerSec1 = lcountPerSec1 = lvalPerSec2 = lcountPerSec2 = lvalPerSec3 = lcountPerSec3 = 0;
1483 if (!i->second.lastFailTime) {
1486 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1487 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1489 subXML +=
utils::StringFormat(
"<executor id=\"%llu\" location=\"%u.%u.%u.%u:%u\" shortQueue=\"%u\" longQueue=\"%u\" count=\"%u\" uptime=\"%s\" "
1490 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1491 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" />\n",
1494 i->second.shortReqQueue.getCount(),
1495 i->second.longReqQueue.getCount(),
1498 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1499 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1503 if (execJSON.length())
1513 execJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"shortQueue\":%u, \"longQueue\":%u, \"count\":%u, \"uptime\":\"%s\", "
1514 "\"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1515 "\"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f }\n",
1518 i->second.shortReqQueue.getCount(),
1519 i->second.longReqQueue.getCount(),
1522 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1523 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1530 if (!i->second.lastFailTime) {
1533 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1534 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1536 subXML +=
utils::StringFormat(
"<client id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" "
1537 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1538 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" />\n",
1543 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1544 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1548 if (clientJSON.length())
1550 clientJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\", "
1551 "\"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1552 "\"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f }\n",
1557 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1558 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1565 if (!i->second.lastFailTime) {
1568 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1569 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1571 subXML +=
utils::StringFormat(
"<webclient id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" "
1572 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1573 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" />\n",
1578 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1579 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1583 if (webClientJSON.length())
1584 webClientJSON +=
",";
1585 webClientJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\", "
1586 "\"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1587 "\"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f }\n",
1592 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1593 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1600 if (!i->second.lastFailTime) {
1603 i->second.shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1604 i->second.longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1606 subXML +=
utils::StringFormat(
"<websocket id=\"%llu\" location=\"%u.%u.%u.%u:%u\" count=\"%u\" uptime=\"%s\" "
1607 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1608 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" />\n",
1613 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1614 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1618 if (webSocketJSON.length())
1619 webSocketJSON +=
",";
1620 webSocketJSON +=
utils::StringFormat(
"{\"id\":%llu, \"location\":\"%u.%u.%u.%u:%u\", \"count\":%u, \"uptime\":\"%s\", "
1621 "\"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1622 "\"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f }\n",
1627 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1628 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3
1634 shortAvgStats.getThroughputMulti(ms1, ms2, ms3, svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3, now);
1635 longAvgStats.getThroughputMulti(ms1, ms2, ms3, lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3, now);
1637 xml =
utils::StringFormat(
"<status executors=\"%u\" clients=\"%u\" webclients=\"%u\" websockets=\"%u\" "
1638 "shortBytesPerSec1=\"%.3f\" shortCountPerSec1=\"%.3f\" shortBytesPerSec10=\"%.3f\" shortCountPerSec10=\"%.3f\" shortBytesPerSec60=\"%.3f\" shortCountPerSec60=\"%.3f\" "
1639 "longBytesPer1Sec=\"%.3f\" longCountPer1Sec=\"%.3f\" longBytesPer10Sec=\"%.3f\" longCountPer10Sec=\"%.3f\" longBytesPer60Sec=\"%.3f\" longCountPer60Sec=\"%.3f\" "
1640 ">\n%s</status>\n", execCount, clientCount, webClientCount, webSocketCount,
1641 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1642 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1645 json =
utils::StringFormat(
"{\"executorcount\":%u, \"clientcount\":%u, \"webclientcount\":%u, \"websocketcount\":%u, "
1646 "\"shortBytesPerSec1\": %.3f, \"shortCountPerSec1\": %.3f, \"shortBytesPerSec10\": %.3f, \"shortCountPerSec10\": %.3f, \"shortBytesPerSec60\": %.3f, \"shortCountPerSec60\": %.3f, "
1647 "\"longBytesPer1Sec\": %.3f, \"longCountPer1Sec\": %.3f, \"longBytesPer10Sec\": %.3f, \"longCountPer10Sec\": %.3f, \"longBytesPer60Sec\": %.3f, \"longCountPer60Sec\": %.3f, "
1648 "\"executors\":[%s], \"clients\":[%s], \"webclients\":[%s], \"websockets\":[%s]}\n",
1649 execCount, clientCount, webClientCount, webSocketCount,
1650 svalPerSec1, scountPerSec1, svalPerSec2, scountPerSec2, svalPerSec3, scountPerSec3,
1651 lvalPerSec1, lcountPerSec1, lvalPerSec2, lcountPerSec2, lvalPerSec3, lcountPerSec3,
1652 execJSON.c_str(), clientJSON.c_str(), webClientJSON.c_str(), webSocketJSON.c_str());
1654 else if (
stricmp(apiName,
"sizeechotest") == 0) {
1658 char* echocontent =
new char[size+1];
1659 for (n=0; n<size; n++)
1660 echocontent[n] = 48 + (n%10);
1663 xml =
utils::StringFormat(
"<echosizetest size=\"%u\">%s</echosizetest>", size, echocontent);
1666 delete [] echocontent;
1671 if (
id && (
stricmp(
id,
"all") == 0)) {
1672 uint32 successCount = 0;
1673 uint32 failedCount = 0;
1674 std::map<uint64, RequestConnection>::iterator i, e;
1681 if (!successCount) {
1683 xml =
utils::StringFormat(
"<error text=\"None of the %u executors were restarted\" />", failedCount);
1685 json =
utils::StringFormat(
"{\"error\":\"None of the %u executors were restarted\"}\n", failedCount);
1689 xml =
utils::StringFormat(
"<success text=\"Restart sent to %u executor successfully (%u failed sending)\" />", successCount, failedCount);
1691 json =
utils::StringFormat(
"{\"success\":\"Restart sent to %u executor successfully (%u failed sending)\"}\n", successCount, failedCount);
1697 xml =
utils::StringFormat(
"<success text=\"Restart sent to executor %llu successfully\" />", idNum);
1699 json =
utils::StringFormat(
"{\"success\":\"Restart sent to executor %llu successfully\"}\n", idNum);
1703 xml =
utils::StringFormat(
"<error text=\"Failed to send restart to executor %llu\" />", idNum);
1705 json =
utils::StringFormat(
"{\"error\":\"Failed to send restart to executor %llu\"}\n", idNum);
1715 else if (strlen(apiName)) {
1718 addToCallLog(++
callLogCount, 2, 3,
false, req->
source, 0, 0, 0, req->
endReceiveTime,
GetTimeNow(), 0,
GetTimeAge(now), req->
type, req->
getSize(), reply->
getSize(),
"Success",
1720 channel->sendHTTPReply(reply, conid);
1726 xml =
utils::StringFormat(
"<error code=\"-1\" text=\"File %s not found in rootdir\" />", apiName);
1728 json =
utils::StringFormat(
"{\"errorcode\":-1, \"text\":\"File %s not found in rootdir\"}\n", apiName);
1733 xml =
utils::StringFormat(
"<error code=\"-1\" text=\"Cannot generate %s, no rootdir configured\" />", apiName);
1735 json =
utils::StringFormat(
"{\"errorcode\":-1, \"text\":\"Cannot generate %s, no rootdir configured\"}\n", apiName);
1741 channel->sendHTTPReply(reply, conid);
1742 addToCallLog(++
callLogCount, 2, 3,
false, req->
source, 0, 0, 0, req->
endReceiveTime,
GetTimeNow(), 0,
GetTimeAge(now), req->
type, req->
getSize(), reply->
getSize(),
"Success",
1749 xml =
utils::StringFormat(
"<error code=\"-1\" text=\"No default file found in rootdir\" />");
1751 json =
utils::StringFormat(
"{\"errorcode\":-1, \"text\":\"No default file found in rootdir\"}\n");
1756 xml =
utils::StringFormat(
"<error code=\"-1\" text=\"Cannot generate %s, no rootdir configured\" />", apiName);
1758 json =
utils::StringFormat(
"{\"errorcode\":-1, \"text\":\"Cannot generate %s, no rootdir configured\"}\n", apiName);
1762 if (!xml.length() && !json.length()) {
1764 addToCallLog(++
callLogCount, 2, 3,
false, req->
source, 0, 0, 0, req->
endReceiveTime,
GetTimeNow(), 0,
GetTimeAge(now), req->
type, req->
getSize(), reply->
getSize(),
"Internal Service Not Available",
1769 addToCallLog(++
callLogCount, 2, 3,
false, req->
source, 0, 0, 0, req->
endReceiveTime,
GetTimeNow(), 0,
GetTimeAge(now), req->
type, req->
getSize(), reply->
getSize(),
"Success",
1774 addToCallLog(++
callLogCount, 2, 3,
false, req->
source, 0, 0, 0, req->
endReceiveTime,
GetTimeNow(), 0,
GetTimeAge(now), req->
type, req->
getSize(), reply->
getSize(),
"Success",
1778 channel->sendHTTPReply(reply, conid);