#include #include #include #include #include AccessManager::AccessManager(void) : mStrPathAccessLog("/var/log/httpd/access_log"), mStrPathMessageLog("var/log/messages") { } AccessManager::AccessManager(const AccessManager &someAccessManager) { // private implementation } AccessManager::~AccessManager() { } AccessManager &AccessManager::operator=(const AccessManager &someAccessManager) { // private implementation } DWORD AccessManager::getAccessLineCount(void) { String strLine; DWORD lineCount(0); File accessFile(mStrPathAccessLog); if(!accessFile.isOkay())return FALSE; while(accessFile.getLine(strLine))lineCount++; return lineCount; } void AccessManager::accessDelta(DWORD prevLines,DWORD currLines) { Block accessLines; String strLine; File accessLog; accessLog.open(mStrPathAccessLog); if(!accessLog.isOkay())return; while(accessLog.getLine(strLine))accessLines.insert(strLine); accessLog.close(); for(int indexLine=0;indexLine accessRecords; SystemTime systemTime; String strPostfix; String strPrefix; String strLine; File outFile; SDate currDate; mAccessFile.getEntries(accessRecords); createCounter(accessRecords.size()); strPrefix=""; strPostfix="
"; outFile.open("/home/httpd/html/access/access.html","wb"); if(!outFile.isOkay())return; outFile.writeLine(""); outFile.writeLine(""); outFile.writeLine(""); outFile.writeLine(""); outFile.writeLine(""); outFile.writeLine("

Ganymede System Monitor

"); outFile.writeLine("

 

"); outFile.writeLine(String("

HTTP Access Log, ")+(String)systemTime+String("
")); outFile.writeLine("
"); for(int index=0;index");currDate=accessRecord.date();} outFile.writeLine(strPrefix+accessRecord.ip()+String(" (")+accessRecord.host()+String(") on ")+accessRecord.date().makeString()+String(" at ")+accessRecord.time()+strPostfix); } outFile.writeLine("

"); outFile.writeLine(""); outFile.writeLine(""); } void AccessManager::getHost(AccessRecord &accessRecord) { String strPathResultFile("host.rst"); String strSystem("/usr/bin/host "); String strHostNotFoundTryAgain("Host not found, try again."); String strHostNotFound("Host not found."); String strLine; char *ptrLine; File inFile; strSystem+=accessRecord.ip(); strSystem+=String(" &>")+strPathResultFile; ::unlink(strPathResultFile); ::system(strSystem); inFile.open(strPathResultFile); if(!inFile.isOkay()){accessRecord.host(strHostNotFound);return;} inFile.getLine(strLine); if(strLine.isNull()||strLine==strHostNotFound||strLine==strHostNotFound){accessRecord.host(strHostNotFound);return;} ptrLine=(char*)strLine+(strLine.length()-1); while(ptrLine>(char*)strLine&&*ptrLine!=' ')ptrLine--; if(' '==*ptrLine)ptrLine++; accessRecord.host(ptrLine); } void AccessManager::createCounter(int accessCount) { File outFile; String strCount; ::sprintf(strCount,"%06d",accessCount); outFile.open("/home/httpd/html/log/access.cnt","wb"); if(!outFile.isOkay())return; outFile.writeLine(strCount); outFile.close(); } void AccessManager::perform(void) { DWORD accessLines(getAccessLineCount()); DWORD newAccessLines; SDate currDate(SDate::TodaysDate); SDate nextDate; Sleep sleeper; BOOL isInit(TRUE); while(TRUE) { ::printf("AccessManager is sleeping\n"); if(!isInit)sleeper.sleep(TimeOut); isInit=FALSE; ::printf("AccessManager is awake\n"); nextDate=SDate(SDate::TodaysDate); if(DayCount<=nextDate.daysBetweenActual(currDate,nextDate)) { currDate=nextDate; mAccessFile.reset(); } newAccessLines=getAccessLineCount(); if(newAccessLines