/////////////////////////////////////////////////////////////////////////////// // Andrea Castro April 6, 2006 // stores plots and HTML files into $OFFLINE_MON_DIR /////////////////////////////////////////////////////////////////////////////// #include "TSystem.h" #include "TFile.h" #include "TTree.h" #include "TH1.h" #include "TH2.h" #include "TProfile.h" #include "TLine.h" #include "TCanvas.h" #include "TPaveText.h" #include /* Directory information. */ #include #include "OfflineMon/TCafCondorMonitor.hh" ClassImp(TCafCondorMonitor) ClassImp(TCafCondorMonitor::Data_t) //_____________________________________________________________________________ TCafCondorMonitor::TCafCondorMonitor(const char* Name): TOfflineMonitor(Name) { fData = new TCafCondorMonitor::Data_t(); } //_____________________________________________________________________________ TCafCondorMonitor::~TCafCondorMonitor() { delete fData; } //_____________________________________________________________________________ int TCafCondorMonitor::Init() { printf(" inside TCafCondorMonitor::Init()\n"); // AC TDatime lastAccess = TDatime(2000,1,1,0,0,0); // initialize in case the ntuple does not exist; // initialize Params structure TString parsFile; char dummy[200]; parsFile = fHtmlDirectory + "/Params.dat"; FILE* fIn = fopen(parsFile,"r"); fscanf(fIn,"%f %f %f %f", &fPars.lowAveLoad, &fPars.xlowAveLoad, &fPars.highPctLoad0, &fPars.xhighPctLoad0); fscanf(fIn,"%f %f %f %f %f %f", &fPars.highAssigned, &fPars.xhighAssigned, &fPars.lowStart, &fPars.xlowStart, &fPars.highFinPct, &fPars.xhighFinPct); fclose(fIn); // initialize Status structure fStatus.vms=fStatus.load=fStatus.load0=fStatus.assigned=fStatus.sections=fStatus.started=fStatus.finished=fStatus.global=0; fStatus.time = lastAccess; fData->fClaimedVms=fData->fUsedVms=fData->fTotalVms=fData->fAssignedVms=fData->fLoad0Vms=0; fData->fLoad10=fData->fLoad20=fData->fLoad30=0; fData->fLoad40=fData->fLoad50=fData->fLoad60=0; fData->fLoad70=fData->fLoad80=fData->fLoad90=fData->fLoad100=0; fData->fAveLoad=fData->fNumVmBelow=fData->fNumVmBelowX=0; return 0; } //_____________________________________________________________________________ int TCafCondorMonitor::UpdateNtuple() { printf(" inside TCafCondorMonitor::UpdateNtuple()\n"); // AC // read the data file and fill the ntuple //----------------------------------------------------------------------------- TDatime thisTime; TDatime now; Int_t nFiles; int cmpLen, len; char cmp[200]; char *inFile[10000]; // an array of strings char cyear[5], cmonth[3], cday[3], chour[3], cmin[3], csec[3]; int dotPosition; char * dot; sprintf(cmp,"%sinfos",fInputDirName.Data()); cmpLen = strlen(cmp); // TString inFile; DIR *dir_p; struct dirent *dir_entry_p; dir_p = opendir(fInputDirName); // open the directory nFiles=0; while( NULL != (dir_entry_p = readdir(dir_p))) { // loop over all files in the directory char dummy[200]; sprintf(dummy,"%s%s",fInputDirName.Data(), dir_entry_p->d_name); // we need to check if this file is more recent than the last file used in the ntuple, if yes keep it! len = strlen(dummy) + 1; char* newSpace = new char[len]; // allocate with new strcpy(newSpace, dummy); // copy to new space if(strncmp(cmp, newSpace, cmpLen)==0) { // only infos files dot=strchr(dir_entry_p->d_name,'.'); dotPosition=dot-dir_entry_p->d_name+1; cyear[0] = dir_entry_p->d_name[dotPosition]; cyear[1] = dir_entry_p->d_name[dotPosition+1]; cyear[2] = dir_entry_p->d_name[dotPosition+2]; cyear[3] = dir_entry_p->d_name[dotPosition+3]; cmonth[0] = dir_entry_p->d_name[dotPosition+5]; cmonth[1] = dir_entry_p->d_name[dotPosition+6]; cday[0] = dir_entry_p->d_name[dotPosition+8]; cday[1] = dir_entry_p->d_name[dotPosition+9]; chour[0] = dir_entry_p->d_name[dotPosition+11]; chour[1] = dir_entry_p->d_name[dotPosition+12]; cmin[0] = dir_entry_p->d_name[dotPosition+14]; cmin[1] = dir_entry_p->d_name[dotPosition+15]; csec[0] = dir_entry_p->d_name[dotPosition+17]; csec[1] = dir_entry_p->d_name[dotPosition+18]; thisTime = TDatime(atoi(cyear), atoi(cmonth), atoi(cday), atoi(chour), atoi(cmin), atoi(csec)); if(atoi(cyear)<1995) printf(" WARNING 1 year %d <1995\n", atoi(cyear)); // AC if(((now.Convert() - thisTime.Convert())/60.) < TMAX_MONTH) { // then include as new files inFile[nFiles] = newSpace; // save pointer nFiles++; } } // end if CAF infos files } closedir(dir_p); // close the directory fData->fLastFileTime = thisTime; fData->fNfiles = nFiles; // we store here the date-time of the (alphabetically)last history file. // this is also the last file written unless we change the way the date-time is concatenated inside the file name TFile* ntupleOut; TTree * tree; TBranch* br; FILE* f; char ntuName[200]; char inFileBis[300]; // condor CAF files/ntuple if(nFiles>0) { // then we update the ntuple sprintf(ntuName,"%s",fNtupleFileName.Data()); ntupleOut = new TFile(ntuName,"recreate"); tree = new TTree("cafCondor_monitor","CafCondor Monitor"); br = tree->Branch("CafCondorMonitor","TCafCondorMonitor::Data_t", &fData); // loop over CAF infos files for(int i=0; ifLoad10=fData->fLoad20=fData->fLoad30=0; fData->fLoad40=fData->fLoad50=fData->fLoad60=0; fData->fLoad70=fData->fLoad80=fData->fLoad90=fData->fLoad100=0; f = fopen(inFile[i],"r"); // char *inFileBis = new char[strlen(inFile[i])]; strcpy(inFileBis, inFile[i]); dot=strchr(inFile[i],'.'); dotPosition=dot-inFile[i]+1; cyear[0] = inFileBis[dotPosition]; cyear[1] = inFileBis[dotPosition+1]; cyear[2] = inFileBis[dotPosition+2]; cyear[3] = inFileBis[dotPosition+3]; cmonth[0] = inFileBis[dotPosition+5]; cmonth[1] = inFileBis[dotPosition+6]; cday[0] = inFileBis[dotPosition+8]; cday[1] = inFileBis[dotPosition+9]; chour[0] = inFileBis[dotPosition+11]; chour[1] = inFileBis[dotPosition+12]; cmin[0] = inFileBis[dotPosition+14]; cmin[1] = inFileBis[dotPosition+15]; csec[0] = inFileBis[dotPosition+17]; csec[1] = inFileBis[dotPosition+18]; thisTime = TDatime(atoi(cyear), atoi(cmonth), atoi(cday), atoi(chour), atoi(cmin), atoi(csec)); if(atoi(cyear)<1995) printf(" WARNING 1 year %d <1995\n", atoi(cyear)); // AC fData->fAbsTime = thisTime.Convert(); int idummy; float fdummy; int running; char group[40]; char dummy[40], dummy2[20], vmName[40]; float vmLoad, aveLoad; int vmStatus, numVm, numVmBelow, numVmBelowX; bool other; //VMS_INFO fscanf(f,"%s", dummy); if(strncmp(dummy,"SYSTEM",6)==0) { // just to make sure the file is well written (at least at the beginning!) // unfortunately we cannot be sure of the ordering so we repeat the readout several times fscanf(f,"%s", dummy); while(strncmp(dummy,"DIFF_OLD5",9)!=0) { fscanf(f,"%d", &idummy); if(strncmp(dummy,"claimed",7)==0) fData->fClaimedVms=idummy; if(strncmp(dummy,"used",4)==0) fData->fUsedVms=idummy; if(strncmp(dummy,"total",5)==0) fData->fTotalVms=idummy; if(strncmp(dummy,"assigned",8)==0) fData->fAssignedVms=idummy; if(strncmp(dummy,"low0",4)==0) fData->fLoad0Vms=idummy; fscanf(f,"%s", dummy); } // DIFF_OLD5 fscanf(f,"%s", dummy); while(strncmp(dummy,"VM_INFO",7)!=0) { fscanf(f,"%d", &idummy); if(strncmp(dummy,"elapsed",7)==0) fData->fElapsTime=idummy; if(strncmp(dummy,"finished_jobs",13)==0) fData->fFinJobs=idummy; if(strncmp(dummy,"finished_sections",17)==0) fData->fFinSec=idummy; if(strncmp(dummy,"started_jobs",12)==0) fData->fStartJobs=idummy; if(strncmp(dummy,"started_sections",16)==0) fData->fStartSec=idummy; fscanf(f,"%s", dummy); } // VM_INFO aveLoad=0; numVm=0, numVmBelow=numVmBelowX=0; while(fscanf(f,"%s", vmName) != EOF){ for(int i=0; i<6; i++) { fscanf(f,"%s %s", dummy, dummy2); if(strncmp(dummy,"load",4)==0) vmLoad=atof(dummy2); if(strncmp(dummy,"status",6)==0) vmStatus=atoi(dummy2); } if(vmStatus==5) { numVm++; aveLoad += vmLoad; if(vmLoad < fPars.lowAveLoad) numVmBelow++; if(vmLoad < fPars.xlowAveLoad) numVmBelowX++; if(vmLoad<=0.1) fData->fLoad10++; if(vmLoad>0.1 && vmLoad<=0.2) fData->fLoad20++; if(vmLoad>0.2 && vmLoad<=0.3) fData->fLoad30++; if(vmLoad>0.3 && vmLoad<=0.4) fData->fLoad40++; if(vmLoad>0.4 && vmLoad<=0.5) fData->fLoad50++; if(vmLoad>0.5 && vmLoad<=0.6) fData->fLoad60++; if(vmLoad>0.6 && vmLoad<=0.7) fData->fLoad70++; if(vmLoad>0.7 && vmLoad<=0.8) fData->fLoad80++; if(vmLoad>0.8 && vmLoad<=0.9) fData->fLoad90++; if(vmLoad>0.9) fData->fLoad100++; } } if(numVm>0) fData->fAveLoad = aveLoad/numVm; fData->fNumVmBelow = numVmBelow; fData->fNumVmBelowX = numVmBelowX; //----------------------------------------------------------------------------- // output files //----------------------------------------------------------------------------- tree->Fill(); } // endif file well written fclose(f); } // end of loop over files fData->fLastFileTime = thisTime; fData->fNfiles = nFiles; ntupleOut->Write(); delete ntupleOut; } // endif nFiles>0 return 0; } //_____________________________________________________________________________ int TCafCondorMonitor::MakePlots(const char* HtmlFile) { #define min(A,B) ((A)<(B)?(A):(B)) #define max(A,B) ((A)>(B)?(A):(B)) #define NUM_VM 5 #define NUM_SEC 2 printf(" inside TCafCondorMonitor::MakePlots()\n"); // AC char *mVm[NUM_VM] = {"TOTAL", "USED", "CLAIMED","ASSIGNED","LOAD0"}; char *mSec[NUM_SEC] = {"STARTED", "FINISHED"}; // histos TH1F *hSec = new TH1F("hSec","Sections (latest)",NUM_SEC, 0, NUM_SEC); TH1F *hSecStartedDay = new TH1F("hSecStartedDay","Sections: started vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hSecStartedWeek = new TH1F("hSecStartedWeek","Sections: started vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hSecStartedMonth = new TH1F("hSecStartedMonth","Sections: started vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hSecFinishedDay = new TH1F("hSecFinishedDay","Sections: finished vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hSecFinishedWeek = new TH1F("hSecFinishedWeek","Sections: finished vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hSecFinishedMonth = new TH1F("hSecFinishedMonth","Sections: finished vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hVm = new TH1F("hVm","Virtual machines (latest)",NUM_VM, 0, NUM_VM); TH1F *hVmClaimedDay = new TH1F("hVmClaimedDay","Virtual machines: Fraction of claimed vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hVmClaimedWeek = new TH1F("hVmClaimedWeek","Virtual machines: Fraction of claimed vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hVmClaimedMonth = new TH1F("hVmClaimedMonth","Virtual machines: Fraction of claimed vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hVmAssignedDay = new TH1F("hVmAssignedDay","Virtual machines: assigned vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hVmAssignedWeek = new TH1F("hVmAssignedWeek","Virtual machines: assigned vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hVmAssignedMonth = new TH1F("hVmAssignedMonth","Virtual machines: assigned vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hVmLoad = new TH1F("hVmLoad","Virtual machines vs average load % bins (today average)",10, 0, 100); TH1F *hVmLoadDay = new TH1F("hVmLoadDay","Virtual machines: average load (%) vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hVmLoadWeek = new TH1F("hVmLoadWeek","Virtual machines: average load (%) vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hVmLoadMonth = new TH1F("hVmLoadMonth","Virtual machines: average load (%) vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hVmLoad0Day = new TH1F("hVmLoad0Day","Virtual machines: average load0 (%) vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hVmLoad0Week = new TH1F("hVmLoad0Week","Virtual machines: average load0 (%) vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hVmLoad0Month = new TH1F("hVmLoad0Month","Virtual machines: average load0 (%) vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); float aveLoad[10]; int numEntDay; float totalVm, usedVm, claimedVm, assignedVm, load0Vm; // last entries float finSecs, startSecs, timeSecs; // last entries UInt_t absTimeLast=0; int numDay[NBINS_TIME_DAY], numWeek[NBINS_TIME_WEEK], numMonth[NBINS_TIME_MONTH]; float vmLoadDay[NBINS_TIME_DAY], vmLoadWeek[NBINS_TIME_WEEK], vmLoadMonth[NBINS_TIME_MONTH]; float vmClaimedFrcDay[NBINS_TIME_DAY], vmClaimedFrcWeek[NBINS_TIME_WEEK], vmClaimedFrcMonth[NBINS_TIME_MONTH]; float vmAssignedDay[NBINS_TIME_DAY], vmAssignedWeek[NBINS_TIME_WEEK], vmAssignedMonth[NBINS_TIME_MONTH]; float vmLoad0FrcDay[NBINS_TIME_DAY], vmLoad0FrcWeek[NBINS_TIME_WEEK], vmLoad0FrcMonth[NBINS_TIME_MONTH]; float secStartedDay[NBINS_TIME_DAY], secStartedWeek[NBINS_TIME_WEEK], secStartedMonth[NBINS_TIME_MONTH]; float secFinishedDay[NBINS_TIME_DAY], secFinishedWeek[NBINS_TIME_WEEK], secFinishedMonth[NBINS_TIME_MONTH]; float timeDiff, timeDay, timeWeek, timeMonth; // absolute time for today/this week/this month TDatime now; UInt_t absNow; UInt_t absTime; int nentries; int hour, min, day, dayPrevM; int hourNow, minNow, dayNow, monthNow, yearNow; char hourMinC[6], dayC[4]; int tBin; monthNow = now.GetMonth(); dayNow = now.GetDay(); hourNow = now.GetHour(); minNow = now.GetMinute(); dayPrevM=31; if(monthNow==12 || monthNow==10 || monthNow==7 || monthNow==4) dayPrevM=30; if(monthNow==3 && (yearNow%4)!=0) dayPrevM=28; if(monthNow==3 && (yearNow%4)==0) dayPrevM=29; TTree *tree; // input file is always a raw data file... char ntuName[200]; absNow = now.Convert(); // some initialization numEntDay=0; totalVm=usedVm=claimedVm=assignedVm=load0Vm=0.; finSecs=startSecs=timeSecs=0.; for(int i=0; i<10; i++) aveLoad[i]=0.; for(int i=0; i (tree->GetEntries()); tree->SetBranchAddress("CafCondorMonitor", &fData); for(int nev=0; nevGetEvent(nev); absTime = fData->fAbsTime; timeDiff = absTime; timeDiff -=absNow; // first fill histos timeDay = timeDiff/60. + TMAX_DAY; // (min) because TDatime.Convert() gives the time in seconds timeWeek = timeDiff/60. + TMAX_WEEK; // (min) timeMonth = timeDiff/60. + TMAX_MONTH; // (min) if(absTime >= absTimeLast) { totalVm = fData->fTotalVms; usedVm = fData->fUsedVms; claimedVm = fData->fClaimedVms; assignedVm = fData->fAssignedVms; load0Vm = fData->fLoad0Vms; finSecs = fData->fFinSec; startSecs = fData->fStartSec; timeSecs = fData->fElapsTime; absTimeLast = absTime; } fr=fr0=0.; if(fData->fTotalVms>0) { fr = fData->fClaimedVms; fr /= fData->fTotalVms; fr0 = fData->fLoad0Vms; fr0 /= fData->fTotalVms; } if(timeDay>0 && timeDay < TMAX_DAY) { tBin = static_cast ( (timeDay/TMAX_DAY)*NBINS_TIME_DAY ); numDay[tBin]++; vmClaimedFrcDay[tBin] += fr; vmLoadDay[tBin] += fData->fAveLoad; vmLoad0FrcDay[tBin] += fr0; vmAssignedDay[tBin] += fData->fAssignedVms; if(timeSecs>0) secStartedDay[tBin] += startSecs*SECS_HOUR/timeSecs; if(timeSecs>0) secFinishedDay[tBin] += finSecs*SECS_HOUR/timeSecs; } if(timeWeek>0 && timeWeek < TMAX_WEEK) { tBin = static_cast ( (timeWeek/TMAX_WEEK)*NBINS_TIME_WEEK ); numWeek[tBin]++; vmClaimedFrcWeek[tBin]+= fr; vmLoadWeek[tBin] += fData->fAveLoad; vmLoad0FrcWeek[tBin] += fr0; vmAssignedWeek[tBin] += fData->fAssignedVms; if(timeSecs>0) secStartedWeek[tBin] += startSecs*SECS_HOUR/timeSecs; if(timeSecs>0) secFinishedWeek[tBin] += finSecs*SECS_HOUR/timeSecs; } if(timeMonth>0 && timeMonth < TMAX_MONTH) { tBin = static_cast ( (timeMonth/TMAX_MONTH)*NBINS_TIME_MONTH ); numMonth[tBin]++; vmClaimedFrcMonth[tBin]+= fr; vmLoadMonth[tBin] += fData->fAveLoad; vmLoad0FrcMonth[tBin] += fr0; vmAssignedMonth[tBin] += fData->fAssignedVms; if(timeSecs>0) secStartedMonth[tBin] += startSecs*SECS_HOUR/timeSecs; if(timeSecs>0) secFinishedMonth[tBin] += finSecs*SECS_HOUR/timeSecs; } // VM averages for today if(timeDay>0 && timeDay < TMAX_DAY) { numEntDay++; aveLoad[0] += fData->fLoad10; aveLoad[1] += fData->fLoad20; aveLoad[2] += fData->fLoad30; aveLoad[3] += fData->fLoad40; aveLoad[4] += fData->fLoad50; aveLoad[5] += fData->fLoad60; aveLoad[6] += fData->fLoad70; aveLoad[7] += fData->fLoad80; aveLoad[8] += fData->fLoad90; aveLoad[9] += fData->fLoad100; } } // loop over entries ntuple_file.Close(); // last snapshot hVm->SetBinContent(1, totalVm); hVm->SetBinContent(2, usedVm); hVm->SetBinContent(3, claimedVm); hVm->SetBinContent(4, assignedVm); hVm->SetBinContent(5, load0Vm); if(timeSecs>0) { hSec->SetBinContent(1, startSecs*SECS_HOUR/timeSecs); hSec->SetBinContent(2, finSecs*SECS_HOUR/timeSecs); } for(int i=0; i<10; i++) { if(numEntDay>0) aveLoad[i] /= numEntDay; hVmLoad->SetBinContent(i+1, aveLoad[i]); } for (int i=0; i0) { vmClaimedFrcDay[i] /= numDay[i]; vmLoadDay[i] /= numDay[i]; vmAssignedDay[i] /= numDay[i]; vmLoad0FrcDay[i] /= numDay[i]; hVmClaimedDay->SetBinContent(i+1, vmClaimedFrcDay[i]*100); hVmLoadDay->SetBinContent(i+1, vmLoadDay[i]*100); hVmAssignedDay->SetBinContent(i+1, vmAssignedDay[i]); hVmLoad0Day->SetBinContent(i+1, vmLoad0FrcDay[i]*100); secStartedDay[i] /= numDay[i]; secFinishedDay[i] /= numDay[i]; hSecStartedDay->SetBinContent(i+1, secStartedDay[i]); hSecFinishedDay->SetBinContent(i+1, secFinishedDay[i]); } } for (int i=0; i0) { vmClaimedFrcWeek[i] /= numWeek[i]; vmLoadWeek[i] /= numWeek[i]; vmAssignedWeek[i] /= numWeek[i]; vmLoad0FrcWeek[i] /= numWeek[i]; hVmClaimedWeek->SetBinContent(i+1, vmClaimedFrcWeek[i]*100); hVmLoadWeek->SetBinContent(i+1, vmLoadWeek[i]*100); hVmAssignedWeek->SetBinContent(i+1, vmAssignedWeek[i]); hVmLoad0Week->SetBinContent(i+1, vmLoad0FrcWeek[i]*100); secStartedWeek[i] /= numWeek[i]; secFinishedWeek[i] /= numWeek[i]; hSecStartedWeek->SetBinContent(i+1, secStartedWeek[i]); hSecFinishedWeek->SetBinContent(i+1, secFinishedWeek[i]); } } for (int i=0; i0) { vmClaimedFrcMonth[i] /= numMonth[i]; vmLoadMonth[i] /= numMonth[i]; vmAssignedMonth[i] /= numMonth[i]; vmLoad0FrcMonth[i] /= numMonth[i]; hVmClaimedMonth->SetBinContent(i+1, vmClaimedFrcMonth[i]*100); hVmLoadMonth->SetBinContent(i+1, vmLoadMonth[i]*100); hVmAssignedMonth->SetBinContent(i+1, vmAssignedMonth[i]); hVmLoad0Month->SetBinContent(i+1, vmLoad0FrcMonth[i]*100); secStartedMonth[i] /= numMonth[i]; secFinishedMonth[i] /= numMonth[i]; hSecStartedMonth->SetBinContent(i+1, secStartedMonth[i]); hSecFinishedMonth->SetBinContent(i+1, secFinishedMonth[i]); } } // now check the status if(fData->fAveLoad < fPars.lowAveLoad) fStatus.load=1; if(fData->fAveLoad < fPars.xlowAveLoad) fStatus.load=2; if(load0Vm > fPars.highPctLoad0*totalVm) fStatus.load0=1; if(load0Vm > fPars.xhighPctLoad0*totalVm) fStatus.load0=2; if(assignedVm > fPars.highAssigned) fStatus.assigned=1; if(assignedVm > fPars.xhighAssigned) fStatus.assigned=2; if(startSecs < fPars.lowStart) fStatus.started=1; if(startSecs < fPars.xlowStart) fStatus.started=2; if(finSecs > fPars.highFinPct*totalVm) fStatus.finished=1; if(finSecs > fPars.xhighFinPct*totalVm) fStatus.finished=2; if(fStatus.load0==1) fStatus.load=1; if(fStatus.load0==2) fStatus.load=2; if(fStatus.assigned==1) fStatus.vms=1; if(fStatus.assigned==2) fStatus.vms=2; if(fStatus.started==1 || fStatus.finished==1) fStatus.sections=1; if(fStatus.started==2 || fStatus.finished==2) fStatus.sections=2; if(fStatus.vms==1 || fStatus.load==1 || fStatus.sections==1) fStatus.global=1; if(fStatus.vms==2 || fStatus.load==2 || fStatus.sections==2) fStatus.global=2; // // write the status file // TString statusFile; statusFile = fHtmlDirectory + "/Status.dat"; FILE* fOut = fopen(statusFile,"w"); TDatime time; time = TDatime(); fprintf(fOut,"%d %d %d %d\n", fStatus.vms, fStatus.load, fStatus.load0, fStatus.assigned); fprintf(fOut,"%s", time.AsSQLString()); fStatus.time = time; fclose(fOut); // // now plot histograms // TString psFile, gifFile; // relabeling for (int i=1;i<=NUM_VM;i++) { // relabel hVm->GetXaxis()->SetBinLabel(i,mVm[i-1]); } for (int i=1;i<=NUM_SEC;i++) { // relabel hSec->GetXaxis()->SetBinLabel(i,mSec[i-1]); } for (int i=0; i=10 && minNow<10) sprintf(hourMinC,"%d:0%d", hour, minNow); if(hour<10 && minNow>=10) sprintf(hourMinC,"0%d:%d", hour, minNow); if(hour>=10 && minNow>=10) sprintf(hourMinC,"%d:%d", hour, minNow); hVmClaimedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hVmLoadDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hVmAssignedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hVmLoad0Day->GetXaxis()->SetBinLabel(i+1,hourMinC); hSecStartedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hSecFinishedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); } if(i==(NBINS_TIME_DAY-1)) { sprintf(hourMinC,"now"); hVmClaimedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hVmLoadDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hVmAssignedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hVmLoad0Day->GetXaxis()->SetBinLabel(i+1,hourMinC); hSecStartedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hSecFinishedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); } } for (int i=0; iGetXaxis()->SetBinLabel(i+1,dayC); hVmLoadWeek->GetXaxis()->SetBinLabel(i+1,dayC); hVmAssignedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hVmLoad0Week->GetXaxis()->SetBinLabel(i+1,dayC); hSecStartedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hSecFinishedWeek->GetXaxis()->SetBinLabel(i+1,dayC); } if(i==(NBINS_TIME_WEEK-1)) { sprintf(dayC,"now"); hVmClaimedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hVmLoadWeek->GetXaxis()->SetBinLabel(i+1,dayC); hVmAssignedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hVmLoad0Week->GetXaxis()->SetBinLabel(i+1,dayC); hSecStartedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hSecFinishedWeek->GetXaxis()->SetBinLabel(i+1,dayC); } } for (int i=0; iGetXaxis()->SetBinLabel(i+1,dayC); hVmLoadMonth->GetXaxis()->SetBinLabel(i+1,dayC); hVmAssignedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hVmLoad0Month->GetXaxis()->SetBinLabel(i+1,dayC); hSecStartedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hSecFinishedMonth->GetXaxis()->SetBinLabel(i+1,dayC); } if(i==(NBINS_TIME_MONTH-1)) { sprintf(dayC,"now"); hVmClaimedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hVmLoadMonth->GetXaxis()->SetBinLabel(i+1,dayC); hVmAssignedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hVmLoad0Month->GetXaxis()->SetBinLabel(i+1,dayC); hSecStartedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hSecFinishedMonth->GetXaxis()->SetBinLabel(i+1,dayC); } } // vms hVm->SetStats(false); hVm->SetMinimum(0); hVm->GetYaxis()->SetTitle("VMs"); if(fStatus.vms==0) hVm->SetFillColor(kGreen); if(fStatus.vms==1) hVm->SetFillColor(kYellow); if(fStatus.vms==2) hVm->SetFillColor(kRed); // sections hSec->SetStats(false); hSec->SetMinimum(0); hSec->GetYaxis()->SetTitle("Sections per hour"); if(fStatus.sections==0) hSec->SetFillColor(kGreen); if(fStatus.sections==1) hSec->SetFillColor(kYellow); if(fStatus.sections==2) hSec->SetFillColor(kRed); // sections started hSecStartedDay->SetStats(false); hSecStartedDay->SetMinimum(0); hSecStartedDay->SetFillColor(kGreen); hSecStartedDay->GetYaxis()->SetTitle("started per hour"); hSecStartedDay->GetYaxis()->SetTitleSize(0.06); hSecStartedDay->GetYaxis()->SetTitleOffset(0.8); hSecStartedDay->GetXaxis()->SetTitle("Time"); hSecStartedDay->GetXaxis()->LabelsOption("h"); hSecStartedDay->GetXaxis()->SetLabelSize(0.055); hSecStartedWeek->SetStats(false); hSecStartedWeek->SetMinimum(0); hSecStartedWeek->SetFillColor(kGreen); hSecStartedWeek->GetYaxis()->SetTitle("started per hour"); hSecStartedWeek->GetYaxis()->SetTitleSize(0.06); hSecStartedWeek->GetYaxis()->SetTitleOffset(0.8); hSecStartedWeek->GetXaxis()->SetTitle("Days"); hSecStartedWeek->GetXaxis()->LabelsOption("h"); hSecStartedWeek->GetXaxis()->SetLabelSize(0.075); hSecStartedMonth->SetStats(false); hSecStartedMonth->SetMinimum(0); hSecStartedMonth->SetFillColor(kGreen); hSecStartedMonth->GetYaxis()->SetTitle("started per hour"); hSecStartedMonth->GetYaxis()->SetTitleSize(0.06); hSecStartedMonth->GetYaxis()->SetTitleOffset(0.8); hSecStartedMonth->GetXaxis()->SetTitle("Days"); hSecStartedMonth->GetXaxis()->LabelsOption("h"); hSecStartedMonth->GetXaxis()->SetLabelSize(0.075); if(fStatus.started==1) { hSecStartedDay->SetFillColor(kYellow); hSecStartedWeek->SetFillColor(kYellow); hSecStartedMonth->SetFillColor(kYellow); } if(fStatus.started==2) { hSecStartedDay->SetFillColor(kRed); hSecStartedWeek->SetFillColor(kRed); hSecStartedMonth->SetFillColor(kRed); } // sections finished hSecFinishedDay->SetStats(false); hSecFinishedDay->SetMinimum(0); hSecFinishedDay->SetFillColor(kGreen); hSecFinishedDay->GetYaxis()->SetTitle("finished per hour"); hSecFinishedDay->GetYaxis()->SetTitleSize(0.06); hSecFinishedDay->GetYaxis()->SetTitleOffset(0.8); hSecFinishedDay->GetXaxis()->SetTitle("Time"); hSecFinishedDay->GetXaxis()->LabelsOption("h"); hSecFinishedDay->GetXaxis()->SetLabelSize(0.055); hSecFinishedWeek->SetStats(false); hSecFinishedWeek->SetMinimum(0); hSecFinishedWeek->SetFillColor(kGreen); hSecFinishedWeek->GetYaxis()->SetTitle("finished per hour"); hSecFinishedWeek->GetYaxis()->SetTitleSize(0.06); hSecFinishedWeek->GetYaxis()->SetTitleOffset(0.8); hSecFinishedWeek->GetXaxis()->SetTitle("Days"); hSecFinishedWeek->GetXaxis()->LabelsOption("h"); hSecFinishedWeek->GetXaxis()->SetLabelSize(0.075); hSecFinishedMonth->SetStats(false); hSecFinishedMonth->SetMinimum(0); hSecFinishedMonth->SetFillColor(kGreen); hSecFinishedMonth->GetYaxis()->SetTitle("finished per hour"); hSecFinishedMonth->GetYaxis()->SetTitleSize(0.06); hSecFinishedMonth->GetYaxis()->SetTitleOffset(0.8); hSecFinishedMonth->GetXaxis()->SetTitle("Days"); hSecFinishedMonth->GetXaxis()->LabelsOption("h"); hSecFinishedMonth->GetXaxis()->SetLabelSize(0.075); if(fStatus.finished==1) { hSecFinishedDay->SetFillColor(kYellow); hSecFinishedWeek->SetFillColor(kYellow); hSecFinishedMonth->SetFillColor(kYellow); } if(fStatus.finished==2) { hSecFinishedDay->SetFillColor(kRed); hSecFinishedWeek->SetFillColor(kRed); hSecFinishedMonth->SetFillColor(kRed); } // claimed hVmClaimedDay->SetStats(false); hVmClaimedDay->SetMaximum(110); hVmClaimedDay->SetMinimum(0); hVmClaimedDay->SetFillColor(kGreen); hVmClaimedDay->GetYaxis()->SetTitle("claimed (%)"); hVmClaimedDay->GetYaxis()->SetTitleSize(0.06); hVmClaimedDay->GetYaxis()->SetTitleOffset(0.8); hVmClaimedDay->GetXaxis()->SetTitle("Time"); hVmClaimedDay->GetXaxis()->LabelsOption("h"); hVmClaimedDay->GetXaxis()->SetLabelSize(0.055); hVmClaimedWeek->SetStats(false); hVmClaimedWeek->SetMaximum(110); hVmClaimedWeek->SetMinimum(0); hVmClaimedWeek->SetFillColor(kGreen); hVmClaimedWeek->GetYaxis()->SetTitle("claimed (%)"); hVmClaimedWeek->GetYaxis()->SetTitleSize(0.06); hVmClaimedWeek->GetYaxis()->SetTitleOffset(0.8); hVmClaimedWeek->GetXaxis()->SetTitle("Days"); hVmClaimedWeek->GetXaxis()->LabelsOption("h"); hVmClaimedWeek->GetXaxis()->SetLabelSize(0.075); hVmClaimedMonth->SetStats(false); hVmClaimedMonth->SetMaximum(110); hVmClaimedMonth->SetMinimum(0); hVmClaimedMonth->SetFillColor(kGreen); hVmClaimedMonth->GetYaxis()->SetTitle("claimed (%)"); hVmClaimedMonth->GetYaxis()->SetTitleSize(0.06); hVmClaimedMonth->GetYaxis()->SetTitleOffset(0.8); hVmClaimedMonth->GetXaxis()->SetTitle("Days"); hVmClaimedMonth->GetXaxis()->LabelsOption("h"); hVmClaimedMonth->GetXaxis()->SetLabelSize(0.075); //assigned hVmAssignedDay->SetStats(false); hVmAssignedDay->SetMinimum(0); hVmAssignedDay->GetYaxis()->SetTitle("assigned"); hVmAssignedDay->GetYaxis()->SetTitleSize(0.06); hVmAssignedDay->GetYaxis()->SetTitleOffset(0.8); hVmAssignedDay->GetXaxis()->SetTitle("Time"); hVmAssignedDay->GetXaxis()->LabelsOption("h"); hVmAssignedDay->GetXaxis()->SetLabelSize(0.055); hVmAssignedWeek->SetStats(false); hVmAssignedWeek->SetMinimum(0); hVmAssignedWeek->GetYaxis()->SetTitle("assigned"); hVmAssignedWeek->GetYaxis()->SetTitleSize(0.06); hVmAssignedWeek->GetYaxis()->SetTitleOffset(0.8); hVmAssignedWeek->GetXaxis()->SetTitle("Days"); hVmAssignedWeek->GetXaxis()->LabelsOption("h"); hVmAssignedWeek->GetXaxis()->SetLabelSize(0.075); hVmAssignedMonth->SetStats(false); hVmAssignedMonth->SetMinimum(0); hVmAssignedMonth->GetYaxis()->SetTitle("assigned"); hVmAssignedMonth->GetYaxis()->SetTitleSize(0.06); hVmAssignedMonth->GetYaxis()->SetTitleOffset(0.8); hVmAssignedMonth->GetXaxis()->SetTitle("Days"); hVmAssignedMonth->GetXaxis()->LabelsOption("h"); hVmAssignedMonth->GetXaxis()->SetLabelSize(0.075); hVmAssignedDay->SetFillColor(kGreen); hVmAssignedWeek->SetFillColor(kGreen); hVmAssignedMonth->SetFillColor(kGreen); if(fStatus.assigned==1) { hVmAssignedDay->SetFillColor(kYellow); hVmAssignedWeek->SetFillColor(kYellow); hVmAssignedMonth->SetFillColor(kYellow); } if(fStatus.assigned==2) { hVmAssignedDay->SetFillColor(kRed); hVmAssignedWeek->SetFillColor(kRed); hVmAssignedMonth->SetFillColor(kRed); } //load hVmLoad->SetStats(false); hVmLoad->SetFillColor(kGreen); hVmLoadDay->SetFillColor(kGreen); hVmLoadWeek->SetFillColor(kGreen); hVmLoadMonth->SetFillColor(kGreen); hVmLoadDay->SetStats(false); hVmLoadDay->SetMaximum(110); hVmLoadDay->SetMinimum(0); hVmLoadDay->GetYaxis()->SetTitle("load (%)"); hVmLoadDay->GetYaxis()->SetTitleSize(0.06); hVmLoadDay->GetYaxis()->SetTitleOffset(0.8); hVmLoadDay->GetXaxis()->SetTitle("Time"); hVmLoadDay->GetXaxis()->LabelsOption("h"); hVmLoadDay->GetXaxis()->SetLabelSize(0.055); hVmLoadWeek->SetStats(false); hVmLoadWeek->SetMaximum(110); hVmLoadWeek->SetMinimum(0); hVmLoadWeek->GetYaxis()->SetTitle("load (%)"); hVmLoadWeek->GetYaxis()->SetTitleSize(0.06); hVmLoadWeek->GetYaxis()->SetTitleOffset(0.8); hVmLoadWeek->GetXaxis()->SetTitle("Days"); hVmLoadWeek->GetXaxis()->LabelsOption("h"); hVmLoadWeek->GetXaxis()->SetLabelSize(0.075); hVmLoadMonth->SetStats(false); hVmLoadMonth->SetMaximum(110); hVmLoadMonth->SetMinimum(0); hVmLoadMonth->GetYaxis()->SetTitle("load (%)"); hVmLoadMonth->GetYaxis()->SetTitleSize(0.06); hVmLoadMonth->GetYaxis()->SetTitleOffset(0.8); hVmLoadMonth->GetXaxis()->SetTitle("Days"); hVmLoadMonth->GetXaxis()->LabelsOption("h"); hVmLoadMonth->GetXaxis()->SetLabelSize(0.075); if(fStatus.load==1) { hVmLoad->SetFillColor(kYellow); hVmLoadDay->SetFillColor(kYellow); hVmLoadWeek->SetFillColor(kYellow); hVmLoadMonth->SetFillColor(kYellow); } if(fStatus.load==2) { hVmLoad->SetFillColor(kRed); hVmLoadDay->SetFillColor(kRed); hVmLoadWeek->SetFillColor(kRed); hVmLoadMonth->SetFillColor(kRed); } // load0 hVmLoad0Day->SetStats(false); hVmLoad0Day->SetMinimum(0); hVmLoad0Day->SetMaximum(110); hVmLoad0Day->GetYaxis()->SetTitle("load=0 (%)"); hVmLoad0Day->GetYaxis()->SetTitleSize(0.06); hVmLoad0Day->GetYaxis()->SetTitleOffset(0.8); hVmLoad0Day->GetXaxis()->SetTitle("Time"); hVmLoad0Day->GetXaxis()->LabelsOption("h"); hVmLoad0Day->GetXaxis()->SetLabelSize(0.055); hVmLoad0Week->SetStats(false); hVmLoad0Week->SetMinimum(0); hVmLoad0Week->SetMaximum(110); hVmLoad0Week->GetYaxis()->SetTitle("load=0 (%)"); hVmLoad0Week->GetYaxis()->SetTitleSize(0.06); hVmLoad0Week->GetYaxis()->SetTitleOffset(0.8); hVmLoad0Week->GetXaxis()->SetTitle("Days"); hVmLoad0Week->GetXaxis()->LabelsOption("h"); hVmLoad0Week->GetXaxis()->SetLabelSize(0.075); hVmLoad0Month->SetStats(false); hVmLoad0Month->SetMinimum(0); hVmLoad0Month->SetMaximum(110); hVmLoad0Month->GetYaxis()->SetTitle("load=0 (%)"); hVmLoad0Month->GetYaxis()->SetTitleSize(0.06); hVmLoad0Month->GetYaxis()->SetTitleOffset(0.8); hVmLoad0Month->GetXaxis()->SetTitle("Days"); hVmLoad0Month->GetXaxis()->LabelsOption("h"); hVmLoad0Month->GetXaxis()->SetLabelSize(0.075); hVmLoad0Day->SetFillColor(kGreen); hVmLoad0Week->SetFillColor(kGreen); hVmLoad0Month->SetFillColor(kGreen); if(fStatus.load0==1) { hVmLoad0Day->SetFillColor(kYellow); hVmLoad0Week->SetFillColor(kYellow); hVmLoad0Month->SetFillColor(kYellow); } if(fStatus.load0==2) { hVmLoad0Day->SetFillColor(kRed); hVmLoad0Week->SetFillColor(kRed); hVmLoad0Month->SetFillColor(kRed); } // error lines TLine *ldLowLoad,*ldXLowLoad; TLine *lwLowLoad,*lwXLowLoad; TLine *lmLowLoad,*lmXLowLoad; TLine *ldHighLoad0,*ldXHighLoad0; TLine *lwHighLoad0,*lwXHighLoad0; TLine *lmHighLoad0,*lmXHighLoad0; TLine *ldLowSecStarted,*ldXLowSecStarted; TLine *lwLowSecStarted,*lwXLowSecStarted; TLine *lmLowSecStarted,*lmXLowSecStarted; TLine *ldHighSecFinished,*ldXHighSecFinished; TLine *lwHighSecFinished,*lwXHighSecFinished; TLine *lmHighSecFinished,*lmXHighSecFinished; ldLowLoad = new TLine(-24, fPars.lowAveLoad*100, 0, fPars.lowAveLoad*100); ldLowLoad->SetLineColor(kYellow); ldXLowLoad = new TLine(-24, fPars.xlowAveLoad*100, 0, fPars.xlowAveLoad*100); ldXLowLoad->SetLineColor(kRed); lwLowLoad = new TLine(-7, fPars.lowAveLoad*100, 0, fPars.lowAveLoad*100); lwLowLoad->SetLineColor(kYellow); lwXLowLoad = new TLine(-7, fPars.xlowAveLoad*100, 0, fPars.xlowAveLoad*100); lwXLowLoad->SetLineColor(kRed); lmLowLoad = new TLine(-31, fPars.lowAveLoad*100, 0, fPars.lowAveLoad*100); lmLowLoad->SetLineColor(kYellow); lmXLowLoad = new TLine(-31, fPars.xlowAveLoad*100, 0, fPars.xlowAveLoad*100); lmXLowLoad->SetLineColor(kRed); ldHighLoad0 = new TLine(-24, fPars.highPctLoad0*100, 0, fPars.highPctLoad0*100); ldHighLoad0->SetLineColor(kYellow); ldXHighLoad0 = new TLine(-24, fPars.xhighPctLoad0*100, 0, fPars.xhighPctLoad0*100); ldXHighLoad0->SetLineColor(kRed); lwHighLoad0 = new TLine(-7, fPars.highPctLoad0*100, 0, fPars.highPctLoad0*100); lwHighLoad0->SetLineColor(kYellow); lwXHighLoad0 = new TLine(-7, fPars.xhighPctLoad0*100, 0, fPars.xhighPctLoad0*100); lwXHighLoad0->SetLineColor(kRed); lmHighLoad0 = new TLine(-31, fPars.highPctLoad0*100, 0, fPars.highPctLoad0*100); lmHighLoad0->SetLineColor(kYellow); lmXHighLoad0 = new TLine(-31, fPars.xhighPctLoad0*100, 0, fPars.xhighPctLoad0*100); lmXHighLoad0->SetLineColor(kRed); ldLowSecStarted = new TLine(-24, fPars.lowStart*SECS_HOUR/timeSecs, 0, fPars.lowStart*SECS_HOUR/timeSecs); ldLowSecStarted->SetLineColor(kYellow); ldXLowSecStarted = new TLine(-24, fPars.xlowStart*SECS_HOUR/timeSecs, 0, fPars.xlowStart*SECS_HOUR/timeSecs); ldXLowSecStarted->SetLineColor(kRed); lwLowSecStarted = new TLine(-7, fPars.lowStart*SECS_HOUR/timeSecs, 0, fPars.lowStart*SECS_HOUR/timeSecs); lwLowSecStarted->SetLineColor(kYellow); lwXLowSecStarted = new TLine(-7, fPars.xlowStart*SECS_HOUR/timeSecs, 0, fPars.xlowStart*SECS_HOUR/timeSecs); lwXLowSecStarted->SetLineColor(kRed); lmLowSecStarted = new TLine(-31, fPars.lowStart*SECS_HOUR/timeSecs, 0, fPars.lowStart*SECS_HOUR/timeSecs); lmLowSecStarted->SetLineColor(kYellow); lmXLowSecStarted = new TLine(-31, fPars.xlowStart*SECS_HOUR/timeSecs, 0, fPars.xlowStart*SECS_HOUR/timeSecs); lmXLowSecStarted->SetLineColor(kRed); ldHighSecFinished = new TLine(-24, fPars.highFinPct*totalVm*SECS_HOUR/timeSecs, 0, fPars.highFinPct*totalVm*SECS_HOUR/timeSecs); ldHighSecFinished->SetLineColor(kYellow); ldXHighSecFinished = new TLine(-24, fPars.xhighFinPct*totalVm*SECS_HOUR/timeSecs, 0, fPars.xhighFinPct*totalVm*SECS_HOUR/timeSecs); ldXHighSecFinished->SetLineColor(kRed); lwHighSecFinished = new TLine(-7, fPars.highFinPct*totalVm*SECS_HOUR/timeSecs, 0, fPars.highFinPct*totalVm*SECS_HOUR/timeSecs); lwHighSecFinished->SetLineColor(kYellow); lwXHighSecFinished = new TLine(-7, fPars.xhighFinPct*totalVm*SECS_HOUR/timeSecs, 0, fPars.xhighFinPct*totalVm*SECS_HOUR/timeSecs); lwXHighSecFinished->SetLineColor(kRed); lmHighSecFinished = new TLine(-31, fPars.highFinPct*totalVm*SECS_HOUR/timeSecs, 0, fPars.highFinPct*totalVm*SECS_HOUR/timeSecs); lmHighSecFinished->SetLineColor(kYellow); lmXHighSecFinished = new TLine(-31, fPars.xhighFinPct*totalVm*SECS_HOUR/timeSecs, 0, fPars.xhighFinPct*totalVm*SECS_HOUR/timeSecs); lmXHighSecFinished->SetLineColor(kRed); // VM tally TCanvas * cVmTally = new TCanvas("cVmTally"); cVmTally->SetGridy(); hVm->Draw(); psFile = fHtmlDirectory + "/VmTally.eps"; cVmTally->Print(psFile); gifFile = fHtmlDirectory + "/VmTally.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmTally->Print(gifFile); } // section tally TCanvas * cSecTally = new TCanvas("cSecTally"); cSecTally->SetGridy(); hSec->Draw(); psFile = fHtmlDirectory + "/SecTally.eps"; cSecTally->Print(psFile); gifFile = fHtmlDirectory + "/SecTally.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cSecTally->Print(gifFile); } // started vs time // day TCanvas * cSecStartedD = new TCanvas("cSecStartedD"); gPad->SetGridy(); hSecStartedDay->Draw(); ldLowSecStarted->Draw(); ldXLowSecStarted->Draw(); psFile = fHtmlDirectory + "/SecStartedD.eps"; cSecStartedD->Print(psFile); gifFile = fHtmlDirectory + "/SecStartedD.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cSecStartedD->Print(gifFile); } // week/month TCanvas * cSecStartedWM = new TCanvas("cSecStartedWM"); cSecStartedWM->Divide(1,2); cSecStartedWM->cd(1); gPad->SetGridy(); hSecStartedWeek->Draw(); lwLowSecStarted->Draw(); lwXLowSecStarted->Draw(); cSecStartedWM->cd(2); gPad->SetGridy(); hSecStartedMonth->Draw(); lmLowSecStarted->Draw(); lmXLowSecStarted->Draw(); psFile = fHtmlDirectory + "/SecStartedWM.eps"; cSecStartedWM->Print(psFile); gifFile = fHtmlDirectory + "/SecStartedWM.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cSecStartedWM->Print(gifFile); } // finished vs time // day TCanvas * cSecFinishedD = new TCanvas("cSecFinishedD"); gPad->SetGridy(); hSecFinishedDay->Draw(); ldHighSecFinished->Draw(); ldXHighSecFinished->Draw(); psFile = fHtmlDirectory + "/SecFinishedD.eps"; cSecFinishedD->Print(psFile); gifFile = fHtmlDirectory + "/SecFinishedD.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cSecFinishedD->Print(gifFile); } // week/month TCanvas * cSecFinishedWM = new TCanvas("cSecFinishedWM"); cSecFinishedWM->Divide(1,2); cSecFinishedWM->cd(1); gPad->SetGridy(); hSecFinishedWeek->Draw(); lwHighSecFinished->Draw(); lwXHighSecFinished->Draw(); cSecFinishedWM->cd(2); gPad->SetGridy(); hSecFinishedMonth->Draw(); lmHighSecFinished->Draw(); lmXHighSecFinished->Draw(); psFile = fHtmlDirectory + "/SecFinishedWM.eps"; cSecFinishedWM->Print(psFile); gifFile = fHtmlDirectory + "/SecFinishedWM.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cSecFinishedWM->Print(gifFile); } // VMs claimed vs time // day TCanvas * cVmClaimedD = new TCanvas("cVmClaimedD"); gPad->SetGridy(); hVmClaimedDay->Draw(); // ldLowVmClaimed->Draw(); // ldXLowVmClaimed->Draw(); psFile = fHtmlDirectory + "/VmClaimedD.eps"; cVmClaimedD->Print(psFile); gifFile = fHtmlDirectory + "/VmClaimedD.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmClaimedD->Print(gifFile); } // week/month TCanvas * cVmClaimedWM = new TCanvas("cVmClaimedWM"); cVmClaimedWM->Divide(1,2); cVmClaimedWM->cd(1); gPad->SetGridy(); hVmClaimedWeek->Draw(); // lwLowVmClaimed->Draw(); // lwXLowVmClaimed->Draw(); cVmClaimedWM->cd(2); gPad->SetGridy(); hVmClaimedMonth->Draw(); // lmLowVmClaimed->Draw(); // lmXLowVmClaimed->Draw(); psFile = fHtmlDirectory + "/VmClaimedWM.eps"; cVmClaimedWM->Print(psFile); gifFile = fHtmlDirectory + "/VmClaimedWM.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmClaimedWM->Print(gifFile); } // assigned TCanvas * cVmAssigned = new TCanvas("cVmAssigned"); cVmAssigned->SetGridy(); hVm->Draw(); psFile = fHtmlDirectory + "/VmAssigned.eps"; cVmAssigned->Print(psFile); gifFile = fHtmlDirectory + "/VmAssigned.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmAssigned->Print(gifFile); } // assigned vs time // day TCanvas * cVmAssignedD = new TCanvas("cVmAssignedD"); gPad->SetGridy(); hVmAssignedDay->Draw(); // ldLowVmAssigned->Draw(); // ldXLowVmAssigned->Draw(); psFile = fHtmlDirectory + "/VmAssignedD.eps"; cVmAssignedD->Print(psFile); gifFile = fHtmlDirectory + "/VmAssignedD.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmAssignedD->Print(gifFile); } // week/month TCanvas * cVmAssignedWM = new TCanvas("cVmAssignedWM"); cVmAssignedWM->Divide(1,2); cVmAssignedWM->cd(1); gPad->SetGridy(); hVmAssignedWeek->Draw(); // lwLowVmAssigned->Draw(); // lwXLowVmAssigned->Draw(); cVmAssignedWM->cd(2); gPad->SetGridy(); hVmAssignedMonth->Draw(); // lmLowVmAssigned->Draw(); // lmXLowVmAssigned->Draw(); psFile = fHtmlDirectory + "/VmAssignedWM.eps"; cVmAssignedWM->Print(psFile); gifFile = fHtmlDirectory + "/VmAssignedWM.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmAssignedWM->Print(gifFile); } // load TCanvas * cVmLoad = new TCanvas("cVmLoad"); cVmLoad->SetGridy(); hVmLoad->Draw(); psFile = fHtmlDirectory + "/VmLoad.eps"; cVmLoad->Print(psFile); gifFile = fHtmlDirectory + "/VmLoad.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmLoad->Print(gifFile); } // load vs time // day TCanvas * cVmLoadD = new TCanvas("cVmLoadD"); gPad->SetGridy(); hVmLoadDay->Draw(); ldLowLoad->Draw(); ldXLowLoad->Draw(); psFile = fHtmlDirectory + "/VmLoadD.eps"; cVmLoadD->Print(psFile); gifFile = fHtmlDirectory + "/VmLoadD.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmLoadD->Print(gifFile); } // week/month TCanvas * cVmLoadWM = new TCanvas("cVmLoadWM"); cVmLoadWM->Divide(1,2); cVmLoadWM->cd(1); gPad->SetGridy(); hVmLoadWeek->Draw(); lwLowLoad->Draw(); lwXLowLoad->Draw(); cVmLoadWM->cd(2); gPad->SetGridy(); hVmLoadMonth->Draw(); lmLowLoad->Draw(); lmXLowLoad->Draw(); psFile = fHtmlDirectory + "/VmLoadWM.eps"; cVmLoadWM->Print(psFile); gifFile = fHtmlDirectory + "/VmLoadWM.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmLoadWM->Print(gifFile); } // load0 vs time // day TCanvas * cVmLoad0D = new TCanvas("cVmLoad0D"); gPad->SetGridy(); hVmLoad0Day->Draw(); ldHighLoad0->Draw(); ldXHighLoad0->Draw(); psFile = fHtmlDirectory + "/VmLoad0D.eps"; cVmLoad0D->Print(psFile); gifFile = fHtmlDirectory + "/VmLoad0D.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmLoad0D->Print(gifFile); } // week/month TCanvas * cVmLoad0WM = new TCanvas("cVmLoad0WM"); cVmLoad0WM->Divide(1,2); cVmLoad0WM->cd(1); gPad->SetGridy(); hVmLoad0Week->Draw(); lwHighLoad0->Draw(); lwXHighLoad0->Draw(); cVmLoad0WM->cd(2); gPad->SetGridy(); hVmLoad0Month->Draw(); lmHighLoad0->Draw(); lmXHighLoad0->Draw(); psFile = fHtmlDirectory + "/VmLoad0WM.eps"; cVmLoad0WM->Print(psFile); gifFile = fHtmlDirectory + "/VmLoad0WM.gif"; if (gROOT->IsBatch()) { sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); } else { cVmLoad0WM->Print(gifFile); } return 0; } //_____________________________________________________________________________ int TCafCondorMonitor::MakeHtml(const char* HtmlFile) { // input file is always a raw data file... printf(" inside TCafCondorMonitor::MakeHtml()\n"); // AC char * wwwBase={"http://www-cdf.fnal.gov/offline/monitoring/"}; TDatime time; time = fStatus.time; FILE* page; // first we fill the individual status gif's const char* mon_dir = gSystem->Getenv("OFFLINE_MON_DIR"); TString inFile, outFile; TString psFile, gifFile; char command[400]; char cFileName[200]; TCanvas * ctime = new TCanvas("ctime","ctime",250,80); TPaveText * ptime = new TPaveText(0.,0.,1.,1.); char timeLabel[100]; sprintf(timeLabel, "%s", time.AsString()); TText *txt = ptime->AddText(timeLabel); if(fStatus.global==0) txt->SetTextColor(kGreen); if(fStatus.global==1) txt->SetTextColor(kYellow); if(fStatus.global==2) txt->SetTextColor(kRed); ptime->Draw(); psFile = fHtmlDirectory + "/Time.eps"; gifFile = fHtmlDirectory + "/Time.gif"; ctime->Print(psFile); sprintf(command,"pstopnm -ppm -xborder 0 -yborder 0 -portrait %s", psFile.Data()); gSystem->Exec(command); sprintf(command,"ppmtogif %s001.ppm > %s", psFile.Data(), gifFile.Data()); gSystem->Exec(command); sprintf(command,"rm -f %s001.ppm", psFile.Data()); gSystem->Exec(command); // global status if(fStatus.global==0) inFile = TString(mon_dir) + "/greenball.gif"; if(fStatus.global==1) inFile = TString(mon_dir) + "/yelball.gif"; if(fStatus.global==2) inFile = TString(mon_dir) + "/redball.gif"; outFile = fHtmlDirectory + "/Status.gif"; gSystem->CopyFile(inFile.Data(), outFile.Data(), kTRUE); // Vms status if(fStatus.vms==0) inFile = TString(mon_dir) + "/greenball.gif"; if(fStatus.vms==1) inFile = TString(mon_dir) + "/yelball.gif"; if(fStatus.vms==2) inFile = TString(mon_dir) + "/redball.gif"; outFile = fHtmlDirectory + "/VmsStatus.gif"; gSystem->CopyFile(inFile.Data(), outFile.Data(), kTRUE); // Load status if(fStatus.load==0) inFile = TString(mon_dir) + "/greenball.gif"; if(fStatus.load==1) inFile = TString(mon_dir) + "/yelball.gif"; if(fStatus.load==2) inFile = TString(mon_dir) + "/redball.gif"; outFile = fHtmlDirectory + "/LoadStatus.gif"; gSystem->CopyFile(inFile.Data(), outFile.Data(), kTRUE); // Load0 status if(fStatus.load0==0) inFile = TString(mon_dir) + "/greenball.gif"; if(fStatus.load0==1) inFile = TString(mon_dir) + "/yelball.gif"; if(fStatus.load0==2) inFile = TString(mon_dir) + "/redball.gif"; outFile = fHtmlDirectory + "/Load0Status.gif"; gSystem->CopyFile(inFile.Data(), outFile.Data(), kTRUE); // Sections status if(fStatus.sections==0) inFile = TString(mon_dir) + "/greenball.gif"; if(fStatus.sections==1) inFile = TString(mon_dir) + "/yelball.gif"; if(fStatus.sections==2) inFile = TString(mon_dir) + "/redball.gif"; outFile = fHtmlDirectory + "/SecStatus.gif"; gSystem->CopyFile(inFile.Data(), outFile.Data(), kTRUE); TString htmlFile; // first we fill each single page // VMs status htmlFile = fHtmlDirectory + "/Vms.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n", wwwBase); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
CAF condor monitorVMs status Help
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); if(fStatus.vms==0) fprintf(page,"\n"); if(fStatus.vms==1) fprintf(page,"\n"); if(fStatus.vms==2) fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
 
greenball.gif VMs Statusyelball.gif VMs Statusredball.gif VMs Status
 
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
\n"); fprintf(page," Fig. 1: Virtual machines ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page," Fig. 2: VM claimed fraction vs time today ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page," Fig. 3: VM assigned vs time today ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"

 
\n"); fprintf(page," Fig. 4: Click here for VM claimed fraction vs time last 7 days (top), last 31 days (bottom)((gif), (eps)) \n"); fprintf(page,"
\n"); fprintf(page," Fig. 5: Click here for VM assigned vs time last 7 days (top), last 31 days (bottom)((gif), (eps)) \n"); fprintf(page,"
 

\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
redball.gif Bad statusyelball.gif Abnormal statusgreenball.gif Normal status
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"

\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n", time.AsSQLString()); fprintf(page,"
Legal Notices
Brought To You By: CafCondor Monitoring
Last updated: %s
\n"); fprintf(page,"\n"); fclose(page); // VMs popup htmlFile = fHtmlDirectory + "/VMsPop.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"Group status\n"); fprintf(page,"

\n"); fprintf(page,"The status of this group fraction is (for the time being) always flagged as normal.\n"); fprintf(page,"

\n"); fclose(page); // Sections status htmlFile = fHtmlDirectory + "/Secs.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n", wwwBase); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
CAF condor monitorSections status Help
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); if(fStatus.sections==0) fprintf(page,"\n"); if(fStatus.sections==1) fprintf(page,"\n"); if(fStatus.sections==2) fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
 
greenball.gif VMs Statusyelball.gif VMs Statusredball.gif VMs Status
 
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
\n"); fprintf(page," Fig. 1: Sections ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page," Fig. 2: Sections started vs time today ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page," Fig. 3: Sections finished vs time today ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"

 
\n"); fprintf(page," Fig. 4: Click here for Sections started vs time last 7 days (top), last 31 days (bottom)((gif), (eps)) \n"); fprintf(page,"
\n"); fprintf(page," Fig. 5: Click here for Sections finished vs time last 7 days (top), last 31 days (bottom)((gif), (eps)) \n"); fprintf(page,"
 

\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
redball.gif Bad statusyelball.gif Abnormal statusgreenball.gif Normal status
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"

\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n", time.AsSQLString()); fprintf(page,"
Legal Notices
Brought To You By: CafCondor Monitoring
Last updated: %s
\n"); fprintf(page,"\n"); fclose(page); // Sections popup htmlFile = fHtmlDirectory + "/SecsPop.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"Group status\n"); fprintf(page,"

\n"); fprintf(page,"The status of this sections is (for the time being) always flagged as normal.\n"); fprintf(page,"

\n"); fclose(page); // Load status htmlFile = fHtmlDirectory + "/Load.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n", wwwBase); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
CAF condor monitorGroups status Help
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); if(fStatus.load==0) fprintf(page,"\n"); if(fStatus.load==1) fprintf(page,"\n"); if(fStatus.load==2) fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
 
greenball.gif Average load Statusyelball.gif Average load Statusredball.gif Average load Status
 
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
\n"); fprintf(page," Fig. 1: Number of VMs in each average load bin (%) ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page," Fig. 2: VM average load vs time today (%) ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page," Fig. 3: VM average Load0 vs time today (%) ((gif), (eps)) \n"); fprintf(page,"\n"); fprintf(page,"Group\n"); fprintf(page,"
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"

 
\n"); fprintf(page," Fig. 4: Click here for VM average load (%) vs time last 7 days (top), last 31 days (bottom)((gif), (eps)) \n"); fprintf(page,"
\n"); fprintf(page," Fig. 5: Click here for VM average Load0 (%) vs time last 7 days (top), last 31 days (bottom)((gif), (eps)) \n"); fprintf(page,"
 

\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
redball.gif Bad statusyelball.gif Abnormal statusgreenball.gif Normal status
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"

\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n", time.AsSQLString()); fprintf(page,"
Legal Notices
Brought To You By: CafCondor Monitoring
Last updated: %s
\n"); fprintf(page,"\n"); fclose(page); // Load popup htmlFile = fHtmlDirectory + "/LoadPop.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"Group status\n"); fprintf(page,"

\n"); fprintf(page,"The status of this average load is below a certain value the situation is flagged 'abnormal' (yellow ball); if it is below a more stringent value the situation is flagged as 'bad' (red ball)\n"); fprintf(page,"

\n"); fclose(page); // now CafCondor Status page htmlFile = fHtmlDirectory + "/Status.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n", wwwBase); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); // 1 fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
Global monitorCondor CAF pageCondor CAF Help
\n"); fprintf(page,"
\n"); // 2 fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
 
Condor CAF Monitor
 
\n"); fprintf(page,"
\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"

\n"); fprintf(page,"
\n"); // 3 if(fStatus.global==0) fprintf(page,"\n"); if(fStatus.global==1) fprintf(page,"
greenball.gif Condor CAF
\n"); if(fStatus.global==2) fprintf(page,"
yelball.gif Condor CAF
\n"); fprintf(page,"\n"); // VMs if(fStatus.vms==0) fprintf(page,"\n"); if(fStatus.vms==1) fprintf(page,"\n"); if(fStatus.vms==2) fprintf(page,"\n"); // LOAD if(fStatus.load==0) fprintf(page,"\n"); if(fStatus.load==1) fprintf(page,"\n"); if(fStatus.load==2) fprintf(page,"\n"); // SECTIONS if(fStatus.sections==0) fprintf(page,"\n"); if(fStatus.sections==1) fprintf(page,"\n"); if(fStatus.sections==2) fprintf(page,"\n"); fprintf(page,"
redball.gif Condor CAF
 
greenball.gif VMs yelball.gif VMs redball.gif VMs greenball.gif Load yelball.gif Load redball.gif Load greenball.gif Sections yelball.gif Sections redball.gif Sections
\n"); fprintf(page,"
\n"); // 4 fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
 

\n"); fprintf(page,"
\n"); // 5 fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
redball.gif Major Problemyelball.gif Minor problem
greenball.gif All systems are operationalstar.gif Situation under investigation
checkmark.gif Scheduled outagedown.gif Known down
\n"); fprintf(page,"
\n"); // 6 fprintf(page,"\n"); // fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
 

\n"); fprintf(page,"
\n"); // 7 fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n", time.AsSQLString()); fprintf(page,"
Legal Notices
Brought To You By: CafCondor Monitoring
Last updated: %s
\n"); fprintf(page,"\n"); fclose(page); // popup htmlFile = fHtmlDirectory + "/Pop.html"; page = fopen(htmlFile,"w"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"Groups status\n"); fprintf(page,"

\n"); fprintf(page,"The status of CafCondor depends on the 'OR' of the status of the various groups: if any of them is 'bad', the situation is is flagged as 'bad' (red ball); if any one is 'abnormal', the situation is flagged 'abnormal' (yellow ball). Otherwise the situation is flagged as 'normal' (green ball)\n"); fprintf(page,"

\n"); fclose(page); return 0; }