Main Page   Namespace List   Compound List   File List   Compound Members   File Members  

copy-ocsProcessControl.cc

Go to the documentation of this file.
00001 // $Id: 
00002 // #####################################################################
00003 //
00004 //    ocsProcessControl.cc
00005 //
00006 //    Optical Communication Systems Simulator
00007 //
00008 //    Copyright:
00009 //       Optical Fiber Communications Laboratory (OFCL)
00010 //       Computer Science & Electrical Engineering Department (CSEE)
00011 //       University of Maryland Baltimore County (UMBC)
00012 //
00013 // #####################################################################
00014 
00015 # include "ocsProcessControl.hh"
00016 
00017 extern ofstream LogFile;
00018 
00019 // ## Constructor
00020 // #  By: Ivan Lima
00021 void ProcessControl::InitProcessControl( int ProcessControlModeTmp 
00022                                    ,string ProcessControlFileName
00023                                    ,char *ProcessName)
00024 {
00025 
00026    // ## Description of the modes:
00027    // #     ProcessControlMode == 0
00028    // #        -> No control at all;
00029    // #     ProcessControlMode == 1   
00030    // #        -> List processes in $HOME/ProcessControl.txt;
00031    // #     ProcessControlMode >= 2   
00032    // #        -> List processes in $HOME/ProcessControl.txt;   
00033    // #           Send an email to $(USER)@(HOSTNAME)
00034    // #           after the process is finished.   
00035 
00036    ProcessControlMode = ProcessControlModeTmp;
00037  
00038    PathListProc =  getenv("HOME");
00039    PathListProc += "/";
00040    PathListProc += ProcessControlFileName; //ProcessControl.txt";
00041    ListProcMessage = getenv("HOSTNAME"); 
00042    ListProcMessage +=  "\t ";  
00043    char cBuffer[30]; // ## It should be enough     
00044    sprintf(cBuffer,"%d",getpid());    
00045    ListProcMessage += cBuffer;   
00046    ListProcMessage +=  "\t ";                
00047    ListProcMessage += ProcessName;
00048    ListProcMessage +=  "\t ";           
00049    ListProcMessage += getenv("PWD");      
00050    InitTime = time(NULL);
00051    char *cTime =   ctime(&InitTime);
00052    cout << ListProcMessage << "\t" << cTime;
00053    //cout << ListProcMessage << "\t" << getpid() << endl;      
00054    if (ProcessControlMode > 0)   {
00055       // #### Creates a list of running processes
00056       OpenListProc( PathListProc);
00057       ListProc << ListProcMessage << "\t" << cTime;      
00058       //ListProc << ListProcMessage << endl;
00059       //ListProc << ListProcMessage << "\t" << getpid() << endl;   
00060       //ListProc.flush();
00061       ListProc.close();
00062    }
00063 }
00064 
00065 // ## Open ListProc file
00066 void ProcessControl::OpenListProc(string ListProcFileName)
00067 {
00068    ListProc.open(ListProcFileName.c_str(),ios::app);
00069    if (! ListProc) {
00070       cerr << "Error: "<< ListProcFileName
00071            <<" could not be open." 
00072       << endl << flush;
00073       exit(1);
00074    }    
00075 }
00076 
00077 // ## Destructor
00078 // #  By: Ivan Lima
00079 ProcessControl::~ProcessControl()
00080 {
00081    FinalTime = time(NULL);
00082    char *cTime = ctime(&FinalTime);
00083    cout     << "END\t"
00084             << ListProcMessage  
00085             << "\t" << "Duration: " << FinalTime-InitTime << " sec"
00086             <<"\t" << cTime;      
00087    if (    ProcessControlMode == 1 
00088         || ProcessControlMode == 2 ) {
00089       OpenListProc(PathListProc);   
00090       ListProc << "END\t"
00091                << ListProcMessage
00092                << "\t" << "Duration: " << FinalTime-InitTime << " sec"
00093                <<"\t" << cTime;  
00094       //ListProc << ListProcMessage<< "\t" << getpid() 
00095       //         << "\t END" << endl;
00096       ListProc.close();
00097    }
00098    if (ProcessControlMode == 2) {
00099       // ## Now sends an e-mail, if required
00100       // ## ListProcTmp contains the name of the file
00101       // ## that will be e-mailed to the user
00102       
00103       string ListProcTmp = "ProcessControlTmp.txt";
00104       string DeleteTempFile = "rm ";
00105       DeleteTempFile += ListProcTmp;      
00106       system(DeleteTempFile.c_str());
00107       
00108       OpenListProc(ListProcTmp);
00109       //ListProc.open(ListProcTmp.c_str(),ios::out);
00110       //if (! ListProc) {
00111       //   cerr << "Error: "<< ListProcTmp
00112       //        <<" could not be open." 
00113       //   << endl << flush;
00114       //   exit(1);
00115       //}    
00116       //ListProc << ListProcMessage<< "\t" << getpid() 
00117       //         << "\t END" << endl;
00118       ListProc << "END\t"
00119                << ListProcMessage
00120                << "\t" << "Duration: " << FinalTime-InitTime << " sec"
00121                <<"\t" << cTime;        
00122       ListProc.close();   
00123       
00124       char cBuffer[20]; // ## It should be enough
00125       sprintf(cBuffer,"%d", getpid());    
00126       ListProcMessage  = "mail -s Process_Finished:_"; 
00127       ListProcMessage += cBuffer;
00128       ListProcMessage += " ";
00129       ListProcMessage += getenv("USER");
00130       ListProcMessage += " < "+ListProcTmp;
00131       system(ListProcMessage.c_str());                  
00132       //system("$OCS/mail -s ocsProcFinish lima < ocsListProcTmp.txt");   
00133    }      
00134 }
00135 
00136 // #####################################################################

Generated at Mon Jun 9 20:08:09 2003 for OCS by doxygen1.2.3 written by Dimitri van Heesch, © 1997-2000