/////////////////////////////////////////////////////////////////////////////// // Andrea Castro April 5, 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/TCafGroupMonitor.hh" ClassImp(TCafGroupMonitor) ClassImp(TCafGroupMonitor::Data_t) //_____________________________________________________________________________ TCafGroupMonitor::TCafGroupMonitor(const char* Name): TOfflineMonitor(Name) { fData = new TCafGroupMonitor::Data_t(); } //_____________________________________________________________________________ TCafGroupMonitor::~TCafGroupMonitor() { delete fData; } //_____________________________________________________________________________ int TCafGroupMonitor::Init() { printf(" inside TCafGroupMonitor::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 TCafGroupMonitor::UpdateNtuple() { printf(" inside TCafGroupMonitor::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], dummy2[20]; 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]; // group CAF files/ntuple if(nFiles>0) { // then we update the ntuple sprintf(ntuName,"%s",fNtupleFileName.Data()); ntupleOut = new TFile(ntuName,"recreate"); tree = new TTree("cafGroup_monitor","CafGroup Monitor"); br = tree->Branch("CafGroupMonitor","TCafGroupMonitor::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; // to here 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[20]; 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 TCafGroupMonitor::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 TCafGroupMonitor::MakePlots()\n"); // AC char *mVm[NUM_VM] = {"TOTAL", "USED", "CLAIMED","ASSIGNED","LOAD0"}; char *mSec[NUM_SEC] = {"STARTED", "FINISHED"}; // histos TH1F *hgSec = new TH1F("hgSec","Sections (latest)",NUM_SEC, 0, NUM_SEC); TH1F *hgSecStartedDay = new TH1F("hgSecStartedDay","Sections: started vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hgSecStartedWeek = new TH1F("hgSecStartedWeek","Sections: started vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hgSecStartedMonth = new TH1F("hgSecStartedMonth","Sections: started vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hgSecFinishedDay = new TH1F("hgSecFinishedDay","Sections: finished vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hgSecFinishedWeek = new TH1F("hgSecFinishedWeek","Sections: finished vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hgSecFinishedMonth = new TH1F("hgSecFinishedMonth","Sections: finished vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hgVm = new TH1F("hgVm","Virtual machines (latest)",NUM_VM, 0, NUM_VM); TH1F *hgVmClaimedDay = new TH1F("hgVmClaimedDay","Virtual machines: Fraction of claimed vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hgVmClaimedWeek = new TH1F("hgVmClaimedWeek","Virtual machines: Fraction of claimed vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hgVmClaimedMonth = new TH1F("hgVmClaimedMonth","Virtual machines: Fraction of claimed vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hgVmAssignedDay = new TH1F("hgVmAssignedDay","Virtual machines: assigned vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hgVmAssignedWeek = new TH1F("hgVmAssignedWeek","Virtual machines: assigned vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hgVmAssignedMonth = new TH1F("hgVmAssignedMonth","Virtual machines: assigned vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hgVmLoad = new TH1F("hgVmLoad","Virtual machines vs average load % bins (today average)",10, 0, 100); TH1F *hgVmLoadDay = new TH1F("hgVmLoadDay","Virtual machines: average load (%) vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hgVmLoadWeek = new TH1F("hgVmLoadWeek","Virtual machines: average load (%) vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hgVmLoadMonth = new TH1F("hgVmLoadMonth","Virtual machines: average load (%) vs time (THIS Month)",NBINS_TIME_MONTH, -31, 0); TH1F *hgVmLoad0Day = new TH1F("hgVmLoad0Day","Virtual machines: average load0 (%) vs time (TODAY)",NBINS_TIME_DAY, -24, 0); TH1F *hgVmLoad0Week = new TH1F("hgVmLoad0Week","Virtual machines: average load0 (%) vs time (THIS WEEK)",NBINS_TIME_WEEK, -7, 0); TH1F *hgVmLoad0Month = new TH1F("hgVmLoad0Month","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("CafGroupMonitor", &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 hgVm->SetBinContent(1, totalVm); hgVm->SetBinContent(2, usedVm); hgVm->SetBinContent(3, claimedVm); hgVm->SetBinContent(4, assignedVm); hgVm->SetBinContent(5, load0Vm); if(timeSecs>0) { hgSec->SetBinContent(1, startSecs*SECS_HOUR/timeSecs); hgSec->SetBinContent(2, finSecs*SECS_HOUR/timeSecs); } for(int i=0; i<10; i++) { if(numEntDay>0) aveLoad[i] /= numEntDay; hgVmLoad->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]; hgVmClaimedDay->SetBinContent(i+1, vmClaimedFrcDay[i]*100); hgVmLoadDay->SetBinContent(i+1, vmLoadDay[i]*100); hgVmAssignedDay->SetBinContent(i+1, vmAssignedDay[i]); hgVmLoad0Day->SetBinContent(i+1, vmLoad0FrcDay[i]*100); secStartedDay[i] /= numDay[i]; secFinishedDay[i] /= numDay[i]; hgSecStartedDay->SetBinContent(i+1, secStartedDay[i]); hgSecFinishedDay->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]; hgVmClaimedWeek->SetBinContent(i+1, vmClaimedFrcWeek[i]*100); hgVmLoadWeek->SetBinContent(i+1, vmLoadWeek[i]*100); hgVmAssignedWeek->SetBinContent(i+1, vmAssignedWeek[i]); hgVmLoad0Week->SetBinContent(i+1, vmLoad0FrcWeek[i]*100); secStartedWeek[i] /= numWeek[i]; secFinishedWeek[i] /= numWeek[i]; hgSecStartedWeek->SetBinContent(i+1, secStartedWeek[i]); hgSecFinishedWeek->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]; hgVmClaimedMonth->SetBinContent(i+1, vmClaimedFrcMonth[i]*100); hgVmLoadMonth->SetBinContent(i+1, vmLoadMonth[i]*100); hgVmAssignedMonth->SetBinContent(i+1, vmAssignedMonth[i]); hgVmLoad0Month->SetBinContent(i+1, vmLoad0FrcMonth[i]*100); secStartedMonth[i] /= numMonth[i]; secFinishedMonth[i] /= numMonth[i]; hgSecStartedMonth->SetBinContent(i+1, secStartedMonth[i]); hgSecFinishedMonth->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 hgVm->GetXaxis()->SetBinLabel(i,mVm[i-1]); } for (int i=1;i<=NUM_SEC;i++) { // relabel hgSec->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); hgVmClaimedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgVmLoadDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgVmAssignedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgVmLoad0Day->GetXaxis()->SetBinLabel(i+1,hourMinC); hgSecStartedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgSecFinishedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); } if(i==(NBINS_TIME_DAY-1)) { sprintf(hourMinC,"now"); hgVmClaimedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgVmLoadDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgVmAssignedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgVmLoad0Day->GetXaxis()->SetBinLabel(i+1,hourMinC); hgSecStartedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); hgSecFinishedDay->GetXaxis()->SetBinLabel(i+1,hourMinC); } } for (int i=0; iGetXaxis()->SetBinLabel(i+1,dayC); hgVmLoadWeek->GetXaxis()->SetBinLabel(i+1,dayC); hgVmAssignedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hgVmLoad0Week->GetXaxis()->SetBinLabel(i+1,dayC); hgSecStartedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hgSecFinishedWeek->GetXaxis()->SetBinLabel(i+1,dayC); } if(i==(NBINS_TIME_WEEK-1)) { sprintf(dayC,"now"); hgVmClaimedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hgVmLoadWeek->GetXaxis()->SetBinLabel(i+1,dayC); hgVmAssignedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hgVmLoad0Week->GetXaxis()->SetBinLabel(i+1,dayC); hgSecStartedWeek->GetXaxis()->SetBinLabel(i+1,dayC); hgSecFinishedWeek->GetXaxis()->SetBinLabel(i+1,dayC); } } for (int i=0; iGetXaxis()->SetBinLabel(i+1,dayC); hgVmLoadMonth->GetXaxis()->SetBinLabel(i+1,dayC); hgVmAssignedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hgVmLoad0Month->GetXaxis()->SetBinLabel(i+1,dayC); hgSecStartedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hgSecFinishedMonth->GetXaxis()->SetBinLabel(i+1,dayC); } if(i==(NBINS_TIME_MONTH-1)) { sprintf(dayC,"now"); hgVmClaimedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hgVmLoadMonth->GetXaxis()->SetBinLabel(i+1,dayC); hgVmAssignedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hgVmLoad0Month->GetXaxis()->SetBinLabel(i+1,dayC); hgSecStartedMonth->GetXaxis()->SetBinLabel(i+1,dayC); hgSecFinishedMonth->GetXaxis()->SetBinLabel(i+1,dayC); } } // vms hgVm->SetStats(false); hgVm->SetMinimum(0); hgVm->GetYaxis()->SetTitle("VMs"); if(fStatus.vms==0) hgVm->SetFillColor(kGreen); if(fStatus.vms==1) hgVm->SetFillColor(kYellow); if(fStatus.vms==2) hgVm->SetFillColor(kRed); // sections hgSec->SetStats(false); hgSec->SetMinimum(0); hgSec->GetYaxis()->SetTitle("Sections per hour"); if(fStatus.sections==0) hgSec->SetFillColor(kGreen); if(fStatus.sections==1) hgSec->SetFillColor(kYellow); if(fStatus.sections==2) hgSec->SetFillColor(kRed); // sections started hgSecStartedDay->SetStats(false); hgSecStartedDay->SetMinimum(0); hgSecStartedDay->SetFillColor(kGreen); hgSecStartedDay->GetYaxis()->SetTitle("started per hour"); hgSecStartedDay->GetYaxis()->SetTitleSize(0.06); hgSecStartedDay->GetYaxis()->SetTitleOffset(0.8); hgSecStartedDay->GetXaxis()->SetTitle("Time"); hgSecStartedDay->GetXaxis()->LabelsOption("h"); hgSecStartedDay->GetXaxis()->SetLabelSize(0.055); hgSecStartedWeek->SetStats(false); hgSecStartedWeek->SetMinimum(0); hgSecStartedWeek->SetFillColor(kGreen); hgSecStartedWeek->GetYaxis()->SetTitle("started per hour"); hgSecStartedWeek->GetYaxis()->SetTitleSize(0.06); hgSecStartedWeek->GetYaxis()->SetTitleOffset(0.8); hgSecStartedWeek->GetXaxis()->SetTitle("Days"); hgSecStartedWeek->GetXaxis()->LabelsOption("h"); hgSecStartedWeek->GetXaxis()->SetLabelSize(0.075); hgSecStartedMonth->SetStats(false); hgSecStartedMonth->SetMinimum(0); hgSecStartedMonth->SetFillColor(kGreen); hgSecStartedMonth->GetYaxis()->SetTitle("started per hour"); hgSecStartedMonth->GetYaxis()->SetTitleSize(0.06); hgSecStartedMonth->GetYaxis()->SetTitleOffset(0.8); hgSecStartedMonth->GetXaxis()->SetTitle("Days"); hgSecStartedMonth->GetXaxis()->LabelsOption("h"); hgSecStartedMonth->GetXaxis()->SetLabelSize(0.075); if(fStatus.started==1) { hgSecStartedDay->SetFillColor(kYellow); hgSecStartedWeek->SetFillColor(kYellow); hgSecStartedMonth->SetFillColor(kYellow); } if(fStatus.started==2) { hgSecStartedDay->SetFillColor(kRed); hgSecStartedWeek->SetFillColor(kRed); hgSecStartedMonth->SetFillColor(kRed); } // sections finished hgSecFinishedDay->SetStats(false); hgSecFinishedDay->SetMinimum(0); hgSecFinishedDay->SetFillColor(kGreen); hgSecFinishedDay->GetYaxis()->SetTitle("finished per hour"); hgSecFinishedDay->GetYaxis()->SetTitleSize(0.06); hgSecFinishedDay->GetYaxis()->SetTitleOffset(0.8); hgSecFinishedDay->GetXaxis()->SetTitle("Time"); hgSecFinishedDay->GetXaxis()->LabelsOption("h"); hgSecFinishedDay->GetXaxis()->SetLabelSize(0.055); hgSecFinishedWeek->SetStats(false); hgSecFinishedWeek->SetMinimum(0); hgSecFinishedWeek->SetFillColor(kGreen); hgSecFinishedWeek->GetYaxis()->SetTitle("finished per hour"); hgSecFinishedWeek->GetYaxis()->SetTitleSize(0.06); hgSecFinishedWeek->GetYaxis()->SetTitleOffset(0.8); hgSecFinishedWeek->GetXaxis()->SetTitle("Days"); hgSecFinishedWeek->GetXaxis()->LabelsOption("h"); hgSecFinishedWeek->GetXaxis()->SetLabelSize(0.075); hgSecFinishedMonth->SetStats(false); hgSecFinishedMonth->SetMinimum(0); hgSecFinishedMonth->SetFillColor(kGreen); hgSecFinishedMonth->GetYaxis()->SetTitle("finished per hour"); hgSecFinishedMonth->GetYaxis()->SetTitleSize(0.06); hgSecFinishedMonth->GetYaxis()->SetTitleOffset(0.8); hgSecFinishedMonth->GetXaxis()->SetTitle("Days"); hgSecFinishedMonth->GetXaxis()->LabelsOption("h"); hgSecFinishedMonth->GetXaxis()->SetLabelSize(0.075); if(fStatus.finished==1) { hgSecFinishedDay->SetFillColor(kYellow); hgSecFinishedWeek->SetFillColor(kYellow); hgSecFinishedMonth->SetFillColor(kYellow); } if(fStatus.finished==2) { hgSecFinishedDay->SetFillColor(kRed); hgSecFinishedWeek->SetFillColor(kRed); hgSecFinishedMonth->SetFillColor(kRed); } // claimed hgVmClaimedDay->SetStats(false); hgVmClaimedDay->SetMaximum(110); hgVmClaimedDay->SetMinimum(0); hgVmClaimedDay->SetFillColor(kGreen); hgVmClaimedDay->GetYaxis()->SetTitle("claimed (%)"); hgVmClaimedDay->GetYaxis()->SetTitleSize(0.06); hgVmClaimedDay->GetYaxis()->SetTitleOffset(0.8); hgVmClaimedDay->GetXaxis()->SetTitle("Time"); hgVmClaimedDay->GetXaxis()->LabelsOption("h"); hgVmClaimedDay->GetXaxis()->SetLabelSize(0.055); hgVmClaimedWeek->SetStats(false); hgVmClaimedWeek->SetMaximum(110); hgVmClaimedWeek->SetMinimum(0); hgVmClaimedWeek->SetFillColor(kGreen); hgVmClaimedWeek->GetYaxis()->SetTitle("claimed (%)"); hgVmClaimedWeek->GetYaxis()->SetTitleSize(0.06); hgVmClaimedWeek->GetYaxis()->SetTitleOffset(0.8); hgVmClaimedWeek->GetXaxis()->SetTitle("Days"); hgVmClaimedWeek->GetXaxis()->LabelsOption("h"); hgVmClaimedWeek->GetXaxis()->SetLabelSize(0.075); hgVmClaimedMonth->SetStats(false); hgVmClaimedMonth->SetMaximum(110); hgVmClaimedMonth->SetMinimum(0); hgVmClaimedMonth->SetFillColor(kGreen); hgVmClaimedMonth->GetYaxis()->SetTitle("claimed (%)"); hgVmClaimedMonth->GetYaxis()->SetTitleSize(0.06); hgVmClaimedMonth->GetYaxis()->SetTitleOffset(0.8); hgVmClaimedMonth->GetXaxis()->SetTitle("Days"); hgVmClaimedMonth->GetXaxis()->LabelsOption("h"); hgVmClaimedMonth->GetXaxis()->SetLabelSize(0.075); //assigned hgVmAssignedDay->SetStats(false); hgVmAssignedDay->SetMinimum(0); hgVmAssignedDay->GetYaxis()->SetTitle("assigned"); hgVmAssignedDay->GetYaxis()->SetTitleSize(0.06); hgVmAssignedDay->GetYaxis()->SetTitleOffset(0.8); hgVmAssignedDay->GetXaxis()->SetTitle("Time"); hgVmAssignedDay->GetXaxis()->LabelsOption("h"); hgVmAssignedDay->GetXaxis()->SetLabelSize(0.055); hgVmAssignedWeek->SetStats(false); hgVmAssignedWeek->SetMinimum(0); hgVmAssignedWeek->GetYaxis()->SetTitle("assigned"); hgVmAssignedWeek->GetYaxis()->SetTitleSize(0.06); hgVmAssignedWeek->GetYaxis()->SetTitleOffset(0.8); hgVmAssignedWeek->GetXaxis()->SetTitle("Days"); hgVmAssignedWeek->GetXaxis()->LabelsOption("h"); hgVmAssignedWeek->GetXaxis()->SetLabelSize(0.075); hgVmAssignedMonth->SetStats(false); hgVmAssignedMonth->SetMinimum(0); hgVmAssignedMonth->GetYaxis()->SetTitle("assigned"); hgVmAssignedMonth->GetYaxis()->SetTitleSize(0.06); hgVmAssignedMonth->GetYaxis()->SetTitleOffset(0.8); hgVmAssignedMonth->GetXaxis()->SetTitle("Days"); hgVmAssignedMonth->GetXaxis()->LabelsOption("h"); hgVmAssignedMonth->GetXaxis()->SetLabelSize(0.075); hgVmAssignedDay->SetFillColor(kGreen); hgVmAssignedWeek->SetFillColor(kGreen); hgVmAssignedMonth->SetFillColor(kGreen); if(fStatus.assigned==1) { hgVmAssignedDay->SetFillColor(kYellow); hgVmAssignedWeek->SetFillColor(kYellow); hgVmAssignedMonth->SetFillColor(kYellow); } if(fStatus.assigned==2) { hgVmAssignedDay->SetFillColor(kRed); hgVmAssignedWeek->SetFillColor(kRed); hgVmAssignedMonth->SetFillColor(kRed); } // load hgVmLoad->SetStats(false); hgVmLoad->SetFillColor(kGreen); hgVmLoadDay->SetFillColor(kGreen); hgVmLoadWeek->SetFillColor(kGreen); hgVmLoadMonth->SetFillColor(kGreen); hgVmLoadDay->SetStats(false); hgVmLoadDay->SetMaximum(110); hgVmLoadDay->SetMinimum(0); hgVmLoadDay->GetYaxis()->SetTitle("load (%)"); hgVmLoadDay->GetYaxis()->SetTitleSize(0.06); hgVmLoadDay->GetYaxis()->SetTitleOffset(0.8); hgVmLoadDay->GetXaxis()->SetTitle("Time"); hgVmLoadDay->GetXaxis()->LabelsOption("h"); hgVmLoadDay->GetXaxis()->SetLabelSize(0.055); hgVmLoadWeek->SetStats(false); hgVmLoadWeek->SetMaximum(110); hgVmLoadWeek->SetMinimum(0); hgVmLoadWeek->GetYaxis()->SetTitle(" load (%)"); hgVmLoadWeek->GetYaxis()->SetTitleSize(0.06); hgVmLoadWeek->GetYaxis()->SetTitleOffset(0.8); hgVmLoadWeek->GetXaxis()->SetTitle("Days"); hgVmLoadWeek->GetXaxis()->LabelsOption("h"); hgVmLoadWeek->GetXaxis()->SetLabelSize(0.075); hgVmLoadMonth->SetStats(false); hgVmLoadMonth->SetMaximum(110); hgVmLoadMonth->SetMinimum(0); hgVmLoadMonth->GetYaxis()->SetTitle(" load (%)"); hgVmLoadMonth->GetYaxis()->SetTitleSize(0.06); hgVmLoadMonth->GetYaxis()->SetTitleOffset(0.8); hgVmLoadMonth->GetXaxis()->SetTitle("Days"); hgVmLoadMonth->GetXaxis()->LabelsOption("h"); hgVmLoadMonth->GetXaxis()->SetLabelSize(0.075); if(fStatus.load==1) { hgVmLoad->SetFillColor(kYellow); hgVmLoadDay->SetFillColor(kYellow); hgVmLoadWeek->SetFillColor(kYellow); hgVmLoadMonth->SetFillColor(kYellow); } if(fStatus.load==2) { hgVmLoad->SetFillColor(kRed); hgVmLoadDay->SetFillColor(kRed); hgVmLoadWeek->SetFillColor(kRed); hgVmLoadMonth->SetFillColor(kRed); } // load0 hgVmLoad0Day->SetStats(false); hgVmLoad0Day->SetMinimum(0); hgVmLoad0Day->SetMaximum(110); hgVmLoad0Day->GetYaxis()->SetTitle("load=0 (%)"); hgVmLoad0Day->GetYaxis()->SetTitleSize(0.06); hgVmLoad0Day->GetYaxis()->SetTitleOffset(0.8); hgVmLoad0Day->GetXaxis()->SetTitle("Time"); hgVmLoad0Day->GetXaxis()->LabelsOption("h"); hgVmLoad0Day->GetXaxis()->SetLabelSize(0.055); hgVmLoad0Week->SetStats(false); hgVmLoad0Week->SetMinimum(0); hgVmLoad0Week->SetMaximum(110); hgVmLoad0Week->GetYaxis()->SetTitle("load=0 (%)"); hgVmLoad0Week->GetYaxis()->SetTitleSize(0.06); hgVmLoad0Week->GetYaxis()->SetTitleOffset(0.8); hgVmLoad0Week->GetXaxis()->SetTitle("Days"); hgVmLoad0Week->GetXaxis()->LabelsOption("h"); hgVmLoad0Week->GetXaxis()->SetLabelSize(0.075); hgVmLoad0Month->SetStats(false); hgVmLoad0Month->SetMinimum(0); hgVmLoad0Month->SetMaximum(110); hgVmLoad0Month->GetYaxis()->SetTitle("load=0 (%)"); hgVmLoad0Month->GetYaxis()->SetTitleSize(0.06); hgVmLoad0Month->GetYaxis()->SetTitleOffset(0.8); hgVmLoad0Month->GetXaxis()->SetTitle("Days"); hgVmLoad0Month->GetXaxis()->LabelsOption("h"); hgVmLoad0Month->GetXaxis()->SetLabelSize(0.075); hgVmLoad0Day->SetFillColor(kGreen); hgVmLoad0Week->SetFillColor(kGreen); hgVmLoad0Month->SetFillColor(kGreen); if(fStatus.load0==1) { hgVmLoad0Day->SetFillColor(kYellow); hgVmLoad0Week->SetFillColor(kYellow); hgVmLoad0Month->SetFillColor(kYellow); } if(fStatus.load0==2) { hgVmLoad0Day->SetFillColor(kRed); hgVmLoad0Week->SetFillColor(kRed); hgVmLoad0Month->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(); hgVm->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(); hgSec->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(); hgSecStartedDay->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(); hgSecStartedWeek->Draw(); lwLowSecStarted->Draw(); lwXLowSecStarted->Draw(); cSecStartedWM->cd(2); gPad->SetGridy(); hgSecStartedMonth->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(); hgSecFinishedDay->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(); hgSecFinishedWeek->Draw(); lwHighSecFinished->Draw(); lwXHighSecFinished->Draw(); cSecFinishedWM->cd(2); gPad->SetGridy(); hgSecFinishedMonth->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(); hgVmClaimedDay->Draw(); // lwLowVmClaimed->Draw(); // lwXLowVmClaimed->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(); hgVmClaimedWeek->Draw(); // lwLowVmClaimed->Draw(); // lwXLowVmClaimed->Draw(); cVmClaimedWM->cd(2); gPad->SetGridy(); hgVmClaimedMonth->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(); hgVm->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(); hgVmAssignedDay->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(); hgVmAssignedWeek->Draw(); // lwLowVmAssigned->Draw(); // lwXLowVmAssigned->Draw(); cVmAssignedWM->cd(2); gPad->SetGridy(); hgVmAssignedMonth->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(); hgVmLoad->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(); hgVmLoadDay->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(); hgVmLoadWeek->Draw(); lwLowLoad->Draw(); lwXLowLoad->Draw(); cVmLoadWM->cd(2); gPad->SetGridy(); hgVmLoadMonth->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(); hgVmLoad0Day->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(); hgVmLoad0Week->Draw(); lwHighLoad0->Draw(); lwXHighLoad0->Draw(); cVmLoad0WM->cd(2); gPad->SetGridy(); hgVmLoad0Month->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 TCafGroupMonitor::MakeHtml(const char* HtmlFile) { // input file is always a raw data file... printf(" inside TCafGroupMonitor::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 group 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,"
\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: CafGroup 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 group 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," 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: CafGroup 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 group 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 averageLoad0 (%) 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: CafGroup 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 CafGroup 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 monitorGroup CAF pageGroup CAF Help
\n"); fprintf(page,"
\n"); // 2 fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"\n"); fprintf(page,"
 
Group 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 Group CAF
\n"); if(fStatus.global==2) fprintf(page,"
yelball.gif Group 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 Group 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: CafGroup 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 CafGroup 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; }