#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); long long now = gettimeofdayInMilliseconds(); //p.safePrintf("the sizes are %li %li", g_conf.m_medReadSize ,g_conf.m_smaReadSize ); ThreadQueue* disk; ThreadQueue* queues = g_threads.getThreadQueues(); for ( long i = 0 ; i < g_threads.getNumThreadQueues(); i++ ) { ThreadQueue* q = &queues[i]; //if ( q->m_top <= 0 ) continue; long loActive = q->m_loLaunched - q->m_loReturned; long mdActive = q->m_mdLaunched - q->m_mdReturned; long hiActive = q->m_hiLaunched - q->m_hiReturned; long total = loActive + mdActive + hiActive; p.safePrintf ( "" "", TABLE_STYLE, q->getThreadType(), loActive, mdActive, hiActive, total); p.safePrintf ("" "" "" "" "" "" "" "" "" "" "" "" "" , LIGHT_BLUE ); for ( long j = 0 ; j < q->m_top ; j++ ) { 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; p.safePrintf("", DARK_BLUE ); if(t->m_isDone) { p.safePrintf(""); p.safePrintf("", t->m_niceness); p.safePrintf("", t->m_launchedTime - t->m_queuedTime); //queued p.safePrintf("", t->m_exitTime - t->m_launchedTime); //run time p.safePrintf("", now - t->m_exitTime); //cleanup p.safePrintf("", now - t->m_queuedTime); //total p.safePrintf("", g_profiler.getFnName((long)t->m_callback)); p.safePrintf("", g_profiler.getFnName((long)t->m_startRoutine)); if(diskThread && fs) { long long took = (t->m_exitTime - t->m_launchedTime); if(took <= 0) took = 1; p.safePrintf("", t->m_bytesToGo, t->m_bytesToGo); p.safePrintf("", (float)t->m_bytesToGo/took); p.safePrintf("",t->m_doWrite? "Write":"Read"); } else { p.safePrintf(""); p.safePrintf(""); p.safePrintf(""); } } else if(t->m_isLaunched) { p.safePrintf(""); p.safePrintf("", t->m_niceness); p.safePrintf("", t->m_launchedTime - t->m_queuedTime); p.safePrintf(""); p.safePrintf(""); p.safePrintf("", now - t->m_queuedTime); p.safePrintf("", g_profiler.getFnName((long)t->m_callback)); p.safePrintf("", g_profiler.getFnName((long)t->m_startRoutine)); if(diskThread && fs ) { long long took = (now - t->m_launchedTime); if(took <= 0) took = 1; p.safePrintf("", '?','?','?',t->m_bytesToGo); p.safePrintf("", 0.0);//(float)fs->m_bytesDone/took); p.safePrintf("",t->m_doWrite? "Write":"Read"); } else { p.safePrintf(""); p.safePrintf(""); p.safePrintf(""); } } else { p.safePrintf(""); p.safePrintf("", t->m_niceness); p.safePrintf(""); p.safePrintf(""); p.safePrintf(""); p.safePrintf("", now - t->m_queuedTime); p.safePrintf("", g_profiler.getFnName((long)t->m_callback)); p.safePrintf("", g_profiler.getFnName((long)t->m_startRoutine)); if(diskThread && fs) { p.safePrintf("", t->m_bytesToGo); p.safePrintf(""); p.safePrintf("",t->m_doWrite? "Write":"Read"); } else { p.safePrintf(""); p.safePrintf(""); p.safePrintf(""); } } p.safePrintf(""); } p.safePrintf("
" //"
" //"" "Thread Type: %s" " (low: %li" " med: %li" " high: %li" " total: %li)
StatusNicenessQueued TimeRun TimeWait for CleanupTime So FarCallbackRoutineBytes DoneKBytes/SecRead|Write
done%li%lli%lli%lli%lli%s%s%li/%li%.2f kbps%s------running%li%lli----%lli%s%s%c%c%c/%li%.2f kbps%s------queued%li------%lli%s%s0/%li--%s------


"); if(q->m_threadType == DISK_THREAD) disk = q; } long loActiveBig = disk->m_loLaunchedBig - disk->m_loReturnedBig; long loActiveMed = disk->m_loLaunchedMed - disk->m_loReturnedMed; long loActiveSma = disk->m_loLaunchedSma - disk->m_loReturnedSma; long mdActiveBig = disk->m_mdLaunchedBig - disk->m_mdReturnedBig; long mdActiveMed = disk->m_mdLaunchedMed - disk->m_mdReturnedMed; long mdActiveSma = disk->m_mdLaunchedSma - disk->m_mdReturnedSma; long hiActiveBig = disk->m_hiLaunchedBig - disk->m_hiReturnedBig; long hiActiveMed = disk->m_hiLaunchedMed - disk->m_hiReturnedMed; long hiActiveSma = disk->m_hiLaunchedSma - disk->m_hiReturnedSma; long activeWrites = disk->m_writesLaunched - disk->m_writesReturned; p.safePrintf ( "" "" "" "" "" "" "" // "" // "" // "" "" "" "" "" "" "" "" "" "" "
" , TABLE_STYLE ); p.safePrintf ( "
Active Read Threads
" "
Priority
SizeLowMediumHigh
Size
Small %li%li%li
Medium %li%li%li
Large %li%li%li


", LIGHT_BLUE, LIGHT_BLUE, DARK_BLUE, loActiveSma, mdActiveSma, hiActiveSma, DARK_BLUE, loActiveMed, mdActiveMed, hiActiveMed, DARK_BLUE, loActiveBig, mdActiveBig, hiActiveBig); p.safePrintf ("",TABLE_STYLE); p.safePrintf ("" "" "
Active Write Threads%li
", activeWrites); return g_httpServer.sendDynamicPage ( s , (char*) p.getBufStart() , p.length() ); }