#include "rcdu.h" #include "Database.h" #include "Logger.h" #include "parammanager.h" #include "infomanager.h" #include "syncmanager.h" #include static void Trim( string & str ) { if( str.length() == 0 ) return ; // ¹®ÀÚ¿­ µÚÀÇ °ø¹é, TAB, CR µîÀÇ ¹®ÀÚ Á¦°Åó¸®. string::size_type pos = str.find_last_not_of(" \a\b\f\n\r\t\v"); if( pos != string::npos ) str.erase( pos + 1 ); // ¹®ÀÚ¿­ ¾ÕÀÇ °ø¹é, TAB, CR µîÀÇ ¹®ÀÚ Á¦°Åó¸®. pos = str.find_first_not_of(" \a\b\f\n\r\t\v"); if( pos != string::npos ) str.erase( 0, pos ); } static bool IsCurrentProcessRun() { char tempBuffer[512]; FILE * fd = NULL; bool bRun = false; snprintf( tempBuffer, sizeof(tempBuffer), "pgrep -x %s | sort", PROG_NAME ); fd = popen( tempBuffer, "r" ); if( fd == NULL ) { cerr << "[error] Process duplication check failed.[popen error][" << strerror(errno) << "]" << endl; // ¿À·ù ¹ß»ý½Ã true ¹ÝȯÇÏ¿© ÇÁ·Î¼¼½º ½ÇÇà ¹æÁöó¸® return true; } else { memset( tempBuffer, 0x00, sizeof(tempBuffer) ); while( fgets( tempBuffer, sizeof(tempBuffer)-1, fd) != NULL ) { string tempPid( tempBuffer ); Trim(tempPid); if( atoi( tempPid.c_str() ) != getpid() ) { cout << "[info] Process duplication found. pid[" << atoi( tempPid.c_str() ) << "]" << endl; bRun = true; break; } } pclose( fd ); return bRun; } } // main function int main( int argc, char * argv[] ) { // ÇÁ·Î±×·¥ Áߺ¹ ½ÇÇà üũ if( IsCurrentProcessRun() == true ) { cerr << "[warning] Process[" << PROG_NAME << "] is already running...." << endl; return EXIT_FAILURE; } // ÀÔ·ÂµÈ Á¤º¸ ºÐ¼® ¹× config load CParamManager paramter; if( paramter.inputparamAnalysis( argc, argv ) != 0 ) return EXIT_FAILURE; // database connect DataBase db; if( db.PgOpenDB( paramter.getDBHost(), paramter.getDBPort(), paramter.getDBName(), paramter.getDBUser(),paramter.getDBPasswd() ) == NULL) { cerr << "[error] Database connection fail." << endl; return EXIT_FAILURE; } // initialized Log object if( CLogger::Init( PROG_NAME, paramter.getLogPath(), paramter.getLogLevel()) == false ) { cerr << "[error] Failed to initialize the log object." << endl; return EXIT_FAILURE; } // load calculation depth CInfoManager infomanger; if( !infomanger.loadInfo( db, paramter.getServiceid() ) ) { LOG(LERR, "load calculation depth failed."); cerr << "[error] load calculation depth failed." << endl; return EXIT_FAILURE; } #ifdef _DEBUG time_t time_start = time(0); #endif // _DEBUG // °¢ ¸ðµåº° ÀÛ¾÷ switch( paramter.getMode() ) { case CParamManager::REGMODE: { cout << "Mode : REG " << endl; _LOG(LINF, "Mode : REG - start."); infomanger.changDepth( db, paramter.getCaldepth() ); _LOG(LINF, "Mode : REG - end."); } break; case CParamManager::SYNCMODE: { cout << "Mode : SYNC " << endl; _LOG(LINF, "Mode : SYNC - start."); CSyncManager syncmanager; syncmanager.sync( db, infomanger.getInfolist() ); _LOG(LINF, "Mode : SYNC - end."); } break; } #ifdef _DEBUG cout << "run-time : " << time(0) - time_start << " sec" <