open-source-search-engine/PageThreads.cpp

217 lines
7.2 KiB
C++
Raw Normal View History

2013-08-03 00:12:24 +04:00
#include "gb-include.h"
#include "TcpServer.h"
#include "Pages.h"
#include "Threads.h"
#include "SafeBuf.h"
#include "Profiler.h"
bool sendPageThreads ( TcpSocket *s , HttpRequest *r ) {
char buf [ 64*1024 ];
SafeBuf p(buf, 64*1024);
// char *ss = p.getBuf();
// char *ssend = p.getBufEnd();
g_pages.printAdminTop ( &p , s , r );
//p.incrementLength(sss - ss);
2014-10-30 22:36:39 +03:00
int64_t now = gettimeofdayInMilliseconds();
2013-08-03 00:12:24 +04:00
2014-11-11 01:45:11 +03:00
//p.safePrintf("the sizes are %"INT32" %"INT32"", g_conf.m_medReadSize ,g_conf.m_smaReadSize );
2013-08-03 00:12:24 +04:00
ThreadQueue* disk;
ThreadQueue* queues = g_threads.getThreadQueues();
2014-11-11 01:45:11 +03:00
for ( int32_t i = 0 ; i < g_threads.getNumThreadQueues(); i++ ) {
2013-08-03 00:12:24 +04:00
ThreadQueue* q = &queues[i];
//if ( q->m_top <= 0 ) continue;
2014-11-11 01:45:11 +03:00
int32_t loActive = q->m_loLaunched - q->m_loReturned;
int32_t mdActive = q->m_mdLaunched - q->m_mdReturned;
int32_t hiActive = q->m_hiLaunched - q->m_hiReturned;
int32_t total = loActive + mdActive + hiActive;
2013-08-03 00:12:24 +04:00
2014-01-19 12:38:02 +04:00
p.safePrintf ( "<table %s>"
2014-01-19 12:57:20 +04:00
"<tr class=hdrow><td colspan=\"11\">"
2013-08-03 00:12:24 +04:00
//"<center>"
//"<font size=+1>"
"<b>Thread Type: %s"
2014-11-11 01:45:11 +03:00
" (low: %"INT32""
" med: %"INT32""
" high: %"INT32""
" total: %"INT32")</td></tr>",
2014-01-19 12:38:02 +04:00
TABLE_STYLE,
2013-08-03 00:12:24 +04:00
q->getThreadType(),
loActive, mdActive,
hiActive, total);
2014-01-19 12:38:02 +04:00
p.safePrintf ("<tr bgcolor=#%s>"
2013-08-03 00:12:24 +04:00
"<td><b>Status</b></td>"
"<td><b>Niceness</b></td>"
"<td><b>Queued Time</b></td>"
"<td><b>Run Time</b></td>"
"<td><b>Wait for Cleanup</b></td>"
"<td><b>Time So Far</b></td>"
"<td><b>Callback</b></td>"
"<td><b>Routine</b></td>"
"<td><b>Bytes Done</b></td>"
"<td><b>KBytes/Sec</b></td>"
"<td><b>Read|Write</b></td>"
2014-01-19 12:38:02 +04:00
"</tr>"
, LIGHT_BLUE
);
2013-08-03 00:12:24 +04:00
2014-11-11 01:45:11 +03:00
for ( int32_t j = 0 ; j < q->m_top ; j++ ) {
2013-08-03 00:12:24 +04:00
ThreadEntry *t = &q->m_entries[j];
if(!t->m_isOccupied) continue;
FileState *fs = (FileState *)t->m_state;
bool diskThread = false;
if(q->m_threadType == DISK_THREAD && fs) diskThread = true;
// might have got pre-called from EDISKSTUCK
if ( ! t->m_callback ) fs = NULL;
2014-01-19 12:38:02 +04:00
p.safePrintf("<tr bgcolor=#%s>", DARK_BLUE );
2013-08-03 00:12:24 +04:00
if(t->m_isDone) {
p.safePrintf("<td><font color='red'><b>done</b></font></td>");
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>%"INT32"</td>", t->m_niceness);
p.safePrintf("<td>%"INT64"</td>", t->m_launchedTime - t->m_queuedTime); //queued
p.safePrintf("<td>%"INT64"</td>", t->m_exitTime - t->m_launchedTime); //run time
p.safePrintf("<td>%"INT64"</td>", now - t->m_exitTime); //cleanup
p.safePrintf("<td>%"INT64"</td>", now - t->m_queuedTime); //total
p.safePrintf("<td>%s</td>", g_profiler.getFnName((PTRTYPE)t->m_callback));
p.safePrintf("<td>%s</td>", g_profiler.getFnName((PTRTYPE)t->m_startRoutine));
2013-08-03 00:12:24 +04:00
if(diskThread && fs) {
2014-10-30 22:36:39 +03:00
int64_t took = (t->m_exitTime - t->m_launchedTime);
2013-08-03 00:12:24 +04:00
if(took <= 0) took = 1;
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>%"INT32"/%"INT32"</td>", t->m_bytesToGo, t->m_bytesToGo);
2013-08-03 00:12:24 +04:00
p.safePrintf("<td>%.2f kbps</td>", (float)t->m_bytesToGo/took);
p.safePrintf("<td>%s</td>",t->m_doWrite? "Write":"Read");
}
else {
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
}
}
else if(t->m_isLaunched) {
p.safePrintf("<td><font color='red'><b>running</b></font></td>");
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>%"INT32"</td>", t->m_niceness);
p.safePrintf("<td>%"INT64"</td>", t->m_launchedTime - t->m_queuedTime);
2013-08-03 00:12:24 +04:00
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>%"INT64"</td>", now - t->m_queuedTime);
p.safePrintf("<td>%s</td>", g_profiler.getFnName((PTRTYPE)t->m_callback));
p.safePrintf("<td>%s</td>", g_profiler.getFnName((PTRTYPE)t->m_startRoutine));
2013-08-03 00:12:24 +04:00
if(diskThread && fs ) {
2014-10-30 22:36:39 +03:00
int64_t took = (now - t->m_launchedTime);
2013-08-03 00:12:24 +04:00
if(took <= 0) took = 1;
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>%c%c%c/%"INT32"</td>", '?','?','?',t->m_bytesToGo);
2013-08-03 00:12:24 +04:00
p.safePrintf("<td>%.2f kbps</td>", 0.0);//(float)fs->m_bytesDone/took);
p.safePrintf("<td>%s</td>",t->m_doWrite? "Write":"Read");
}
else {
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
}
}
else {
p.safePrintf("<td><font color='red'><b>queued</b></font></td>");
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>%"INT32"</td>", t->m_niceness);
2013-08-03 00:12:24 +04:00
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>%"INT64"</td>", now - t->m_queuedTime);
p.safePrintf("<td>%s</td>", g_profiler.getFnName((PTRTYPE)t->m_callback));
p.safePrintf("<td>%s</td>", g_profiler.getFnName((PTRTYPE)t->m_startRoutine));
2013-08-03 00:12:24 +04:00
if(diskThread && fs) {
2014-11-11 01:45:11 +03:00
p.safePrintf("<td>0/%"INT32"</td>", t->m_bytesToGo);
2013-08-03 00:12:24 +04:00
p.safePrintf("<td>--</td>");
p.safePrintf("<td>%s</td>",t->m_doWrite? "Write":"Read");
}
else {
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
p.safePrintf("<td>--</td>");
}
}
p.safePrintf("</tr>");
}
p.safePrintf("</table><br><br>");
if(q->m_threadType == DISK_THREAD) disk = q;
}
2014-11-11 01:45:11 +03:00
int32_t loActiveBig = disk->m_loLaunchedBig - disk->m_loReturnedBig;
int32_t loActiveMed = disk->m_loLaunchedMed - disk->m_loReturnedMed;
int32_t loActiveSma = disk->m_loLaunchedSma - disk->m_loReturnedSma;
int32_t mdActiveBig = disk->m_mdLaunchedBig - disk->m_mdReturnedBig;
int32_t mdActiveMed = disk->m_mdLaunchedMed - disk->m_mdReturnedMed;
int32_t mdActiveSma = disk->m_mdLaunchedSma - disk->m_mdReturnedSma;
int32_t hiActiveBig = disk->m_hiLaunchedBig - disk->m_hiReturnedBig;
int32_t hiActiveMed = disk->m_hiLaunchedMed - disk->m_hiReturnedMed;
int32_t hiActiveSma = disk->m_hiLaunchedSma - disk->m_hiReturnedSma;
int32_t activeWrites = disk->m_writesLaunched - disk->m_writesReturned;
2014-01-19 12:38:02 +04:00
p.safePrintf ( "<table %s>"
2014-01-19 12:57:20 +04:00
"<tr class=hdrow><td colspan=\"5\">"
2014-01-19 12:38:02 +04:00
, TABLE_STYLE );
2013-08-03 00:12:24 +04:00
p.safePrintf ( "<center><b>Active Read Threads</b></center></td></tr>"
2014-01-19 12:38:02 +04:00
"<tr bgcolor=#%s>"
"<td></td><td colspan='3'>"
"<center><b>Priority</b></center></td></tr>"
"<tr bgcolor=#%s>"
2013-08-03 00:12:24 +04:00
"<td><b>Size</b></td><td>Low</td><td>Medium</td><td>High</td>"
"</tr>"
// "<tr>"
// "<td>Size</td>"
// "</tr>"
2014-01-19 12:38:02 +04:00
"<tr bgcolor=#%s>"
2014-11-11 01:45:11 +03:00
"<td>Small</td> <td>%"INT32"</td><td>%"INT32"</td><td>%"INT32"</td>"
2013-08-03 00:12:24 +04:00
"</tr>"
2014-01-19 12:38:02 +04:00
"<tr bgcolor=#%s>"
2014-11-11 01:45:11 +03:00
"<td>Medium</td> <td>%"INT32"</td><td>%"INT32"</td><td>%"INT32"</td>"
2013-08-03 00:12:24 +04:00
"</tr>"
2014-01-19 12:38:02 +04:00
"<tr bgcolor=#%s>"
2014-11-11 01:45:11 +03:00
"<td>Large</td> <td>%"INT32"</td><td>%"INT32"</td><td>%"INT32"</td>"
2013-08-03 00:12:24 +04:00
"</tr>"
"</table><br><br>",
2014-01-19 12:38:02 +04:00
LIGHT_BLUE,
LIGHT_BLUE,
DARK_BLUE,
2013-08-03 00:12:24 +04:00
loActiveSma,
mdActiveSma,
hiActiveSma,
2014-01-19 12:38:02 +04:00
DARK_BLUE,
2013-08-03 00:12:24 +04:00
loActiveMed,
mdActiveMed,
hiActiveMed,
2014-01-19 12:38:02 +04:00
DARK_BLUE,
2013-08-03 00:12:24 +04:00
loActiveBig,
mdActiveBig,
hiActiveBig);
2014-01-19 12:38:02 +04:00
p.safePrintf ("<table %s>",TABLE_STYLE);
2014-01-19 12:57:20 +04:00
p.safePrintf ("<tr class=hdrow>"
2014-11-11 01:45:11 +03:00
"<td><b>Active Write Threads</b></td><td>%"INT32"</td>"
2013-08-03 00:12:24 +04:00
"</tr></table>",
activeWrites);
return g_httpServer.sendDynamicPage ( s , (char*) p.getBufStart() ,
p.length() );
}