www.pudn.com > ghs1.2.rar > warehouse.cpp
#include "warehouse.h" #include#include #include #include using namespace std; WareHouse::WareHouse(string mLog, long sTime, int newSign) { measureLog = mLog; fstream fdLog1; /* Open the measure.log file to store system infomation */ newDataSign = newSign; fdLog1.open(measureLog.c_str(), ios::in); if (!fdLog1.is_open()) { if (DEBUG_ON == 1) cout << "\n the log file doesn't exist, create a new measure log file " << endl; newDataSign = 1; } else { fdLog1.close(); } if (newDataSign == 0) { fdLog1.open(measureLog.c_str(), ios::in); if (!fdLog1.is_open()) { cout << "\n can not open the measurement log file " << endl; exit(1); } } else { fdLog.open(measureLog.c_str(), ios::out); if (!fdLog.is_open()) { cout << "\n can not create the measurement log file " << endl; exit(1); } } if (newDataSign == 1) { fdLog << "date meanUtil meanLambda meanServ meanStd" << endl; lineNum = 1; } else { lineNum = myFile.GetLineNum(measureLog); int currTime = sTime / 3600; if (DEBUG_ON == 1) cout << "the currTime is " << currTime << endl; string line; int measureTime = 0; getline(fdLog1, line); while (fdLog1.good()) { getline(fdLog1, line); if(line.size()==0) { measureTime++; break; } const string sepa = " "; string timeStr; string::size_type endId; endId = line.find_first_of(sepa, 0); timeStr = line.substr(0, endId); measureTime = atoi(timeStr.c_str()); if (DEBUG_ON == 1) cout << "the time is " << measureTime << endl; } if (measureTime == 0) measureTime = currTime; fdLog1.close(); fdLog.open(measureLog.c_str(), fstream::out | fstream::app); if(!fdLog.is_open()) { cout << "\n can not open the measurement log file \n"; exit(1); } float invalidValue = INVALID_PARA_VALUE; if ( (currTime - measureTime) > MAX_HOUR ) { fdLog.close(); RemoveLines(measureLog.c_str(), lineNum - 1); fdLog.open(measureLog.c_str(), fstream::out | fstream::app); } else { while ( measureTime < currTime) { if ( lineNum >= (MAX_HOUR + 1) ) { fdLog.close(); RemoveLines(measureLog.c_str(), (lineNum - MAX_HOUR)); lineNum = MAX_HOUR; fdLog.open(measureLog.c_str(), fstream::out | fstream::app); } fdLog << measureTime << " "; fdLog.width(15); fdLog << invalidValue << " "; fdLog.width(15); fdLog << invalidValue << " "; fdLog.width(15); fdLog << invalidValue << " "; fdLog.width(15); fdLog << invalidValue << endl; measureTime ++; lineNum ++; } } } } void WareHouse::RemoveLines(const string& fileName, int lineOfNum) { fstream resourceFile; fstream resourceFiletmp; string fname; resourceFile.open(fileName.c_str(), ios::in); if (!resourceFile.is_open()) { cout << "can not open resource file to delete lines " << endl; exit(1); } fname = fileName + ".ttmp"; resourceFiletmp.open(fname.c_str(), ios::out); if (!resourceFiletmp.is_open()) { cout << "can not open resource tmp file " << endl; exit(1); } int lineCount = 0; string linetmp; while (resourceFile.good()) { getline(resourceFile, linetmp); if (DEBUG_ON == 1) cout << "the line is " << linetmp << endl; if ( (lineCount > lineOfNum) || (lineCount == 0) ) // leave the first line there { resourceFiletmp << linetmp << endl; //??? }; lineCount++; } resourceFile.close(); resourceFiletmp.close(); string cpCmd = "cp " + fname + " " + fileName; if (popen(cpCmd.c_str(), "r") == NULL) { cout << "can not execute cp command " << endl; exit(1); } } void WareHouse::RecordParameters(int timestamp, double util, double arrivalrate, double servicerate, double servicestd) { if ( lineNum >= (MAX_HOUR + 1) ) { fdLog.close(); RemoveLines(measureLog.c_str(), (lineNum - MAX_HOUR)); lineNum = MAX_HOUR; fdLog.open(measureLog.c_str(), fstream::out | fstream::app); } fdLog.precision(8); fdLog << timestamp << " "; fdLog.width(15); fdLog << util << " "; fdLog.width(15); fdLog << arrivalrate << " "; fdLog.width(15); fdLog << servicerate << " "; fdLog.width(15); fdLog << servicestd << endl; lineNum ++; }