virtual int RunCommand() { CMySQLQuery query; query.Format( "insert into job_master_end values ( %lu, %d, %d, \"no errors\" )", g_JobPrimaryID, g_nWorkersConnected, g_nWorkersDisconnected ); query.Execute( g_pSQL ); // Now set RunningTimeMS. unsigned long runningTimeMS = GetTickCount() - g_StatsStartTime; query.Format( "update job_master_start set RunningTimeMS=%lu where JobID=%lu", runningTimeMS, g_JobPrimaryID ); query.Execute( g_pSQL ); return 1; }
virtual int RunCommand() { CMySQLQuery query; query.Format( "insert into text_messages (JobWorkerID, MessageIndex, Text) values ( %lu, %lu, \"%s\" )", g_JobWorkerID, g_CurrentMessageIndex, m_pText ); query.Execute( g_pSQL ); ++g_CurrentMessageIndex; return 1; }
bool VMPI_Stats_Init_Worker( const char *pHostName, const char *pDBName, const char *pUserName, unsigned long DBJobID ) { g_StatsStartTime = GetTickCount(); // If pDBServerName is null, then we're the master and we just want to make the job_worker_start entry. if ( pHostName ) { Assert( !g_pDB ); // Connect the database. g_pDB = new CMySqlDatabase; if ( !g_pDB || !g_pDB->Initialize() || !LoadMySQLWrapper( pHostName, pDBName, pUserName ) ) { delete g_pDB; g_pDB = NULL; return false; } // Get our machine name to store in the database. DWORD size = sizeof( g_MachineName ); GetComputerName( g_MachineName, &size ); } g_JobPrimaryID = DBJobID; g_JobWorkerID = 0; CMySQLQuery query; query.Format( "insert into job_worker_start ( JobID, CurrentStage, IsMaster, MachineName ) values ( %lu, \"none\", %d, \"%s\" )", g_JobPrimaryID, g_bMaster, g_MachineName ); query.Execute( g_pSQL ); g_JobWorkerID = g_pSQL->InsertID(); if ( g_JobWorkerID == 0 ) { delete g_pDB; g_pDB = NULL; return false; } // Now create a thread that samples perf data and stores it in the database. g_hPerfThreadExitEvent = CreateEvent( NULL, FALSE, FALSE, NULL ); g_hPerfThread = CreateThread( NULL, 0, PerfThreadFn, NULL, 0, &g_PerfThreadID ); return true; }
virtual int RunCommand() { CMySQLQuery query; query.Format( "insert into graph_entry (JobWorkerID, MSSinceJobStart, BytesSent, BytesReceived) " "values ( %lu, %lu, %lu, %lu )", g_JobWorkerID, m_msTime, m_nBytesSent, m_nBytesReceived ); query.Execute( g_pSQL ); UpdateJobWorkerRunningTime(); ++g_CurrentMessageIndex; return 1; }
bool VMPI_Stats_Init_Master( const char *pHostName, const char *pDBName, const char *pUserName, const char *pBSPFilename, unsigned long *pDBJobID ) { Assert( !g_pDB ); g_bMaster = true; // Connect the database. g_pDB = new CMySqlDatabase; if ( !g_pDB || !g_pDB->Initialize() || !LoadMySQLWrapper( pHostName, pDBName, pUserName ) ) { delete g_pDB; g_pDB = NULL; return false; } DWORD size = sizeof( g_MachineName ); GetComputerName( g_MachineName, &size ); // Create the job_master_start row. Q_FileBase( pBSPFilename, g_BSPFilename, sizeof( g_BSPFilename ) ); g_JobPrimaryID = 0; CMySQLQuery query; query.Format( "insert into job_master_start ( BSPFilename, StartTime, MachineName, RunningTimeMS ) values ( \"%s\", null, \"%s\", %lu )", g_BSPFilename, g_MachineName, RUNNINGTIME_MS_SENTINEL ); query.Execute( g_pSQL ); g_JobPrimaryID = g_pSQL->InsertID(); if ( g_JobPrimaryID == 0 ) { delete g_pDB; g_pDB = NULL; return false; } // Now init the worker portion. *pDBJobID = g_JobPrimaryID; return VMPI_Stats_Init_Worker( NULL, NULL, NULL, g_JobPrimaryID ); }
void UpdateJobWorkerRunningTime() { unsigned long runningTimeMS = GetTickCount() - g_StatsStartTime; char curStage[256]; VMPI_GetCurrentStage( curStage, sizeof( curStage ) ); CMySQLQuery query; query.Format( "update job_worker_start set RunningTimeMS=%lu, CurrentStage=\"%s\", " "Thread0WU=%d, Thread1WU=%d, Thread2WU=%d, Thread3WU=%d where JobWorkerID=%lu", runningTimeMS, curStage, (int) g_ThreadWUs[0], (int) g_ThreadWUs[1], (int) g_ThreadWUs[2], (int) g_ThreadWUs[3], g_JobWorkerID ); query.Execute( g_pSQL ); }