void StatsDB_InitStatsDatabase( int argc, char **argv, const char *pDBInfoFilename ) { // Did they disable the stats database? if ( !g_bMPI_Stats && !VMPI_IsParamUsed( mpi_Job_Watch ) ) return; unsigned long jobPrimaryID; // Now open the DB. if ( g_bMPIMaster ) { CDBInfo dbInfo; GetDBInfo( pDBInfoFilename, &dbInfo ); if ( !VMPI_Stats_Init_Master( dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName, argv[argc-1], &jobPrimaryID ) ) { Warning( "VMPI_Stats_Init_Master( %s, %s, %s ) failed.\n", dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName ); // Tell the workers not to use stats. dbInfo.m_HostName[0] = 0; } char cmdLine[2048]; Q_snprintf( cmdLine, sizeof( cmdLine ), "vmpi_job_watch -JobID %d", jobPrimaryID ); Msg( "\nTo watch this job, run this command line:\n%s\n\n", cmdLine ); if ( VMPI_IsParamUsed( mpi_Job_Watch ) ) { // Convenience thing to automatically launch the job watch for this job. RunJobWatchApp( cmdLine ); } // Send the database info to all the workers. SendDBInfo( &dbInfo, jobPrimaryID ); } else { // Wait to get DB info so we can connect to the MySQL database. CDBInfo dbInfo; unsigned long jobPrimaryID; RecvDBInfo( &dbInfo, &jobPrimaryID ); if ( dbInfo.m_HostName[0] != 0 ) { if ( !VMPI_Stats_Init_Worker( dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName, jobPrimaryID ) ) Error( "VMPI_Stats_Init_Worker( %s, %s, %s, %d ) failed.\n", dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName, jobPrimaryID ); } } }
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 StatsDB_InitStatsDatabase( int argc, char **argv, const char *pDBInfoFilename ) { unsigned long jobPrimaryID; // Now open the DB. if ( g_bMPIMaster ) { CDBInfo dbInfo; GetDBInfo( pDBInfoFilename, &dbInfo ); if ( !VMPI_Stats_Init_Master( dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName, argv[argc-1], &jobPrimaryID ) ) { Warning( "VMPI_Stats_Init_Master( %s, %s, %s ) failed.\n", dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName ); // Tell the workers not to use stats. dbInfo.m_HostName[0] = 0; } // Send the database info to all the workers. SendDBInfo( &dbInfo, jobPrimaryID ); } else { // Wait to get DB info so we can connect to the MySQL database. CDBInfo dbInfo; unsigned long jobPrimaryID; RecvDBInfo( &dbInfo, &jobPrimaryID ); if ( dbInfo.m_HostName[0] != 0 ) { if ( !VMPI_Stats_Init_Worker( dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName, jobPrimaryID ) ) Error( "VMPI_Stats_Init_Worker( %s, %s, %d ) failed.\n", dbInfo.m_HostName, dbInfo.m_DBName, dbInfo.m_UserName, jobPrimaryID ); } } }