CMS 3D CMS Logo

FEDMonitorClient.cc

Go to the documentation of this file.
00001 #include "FEDMonitorClient.h"
00002 
00003 #include "DataFormats/FEDRawData/interface/FEDNumbering.h"
00004 #include "DQMServices/Core/interface/DQMStore.h"
00005 #include "DQMServices/Core/interface/MonitorElement.h"
00006 
00007 #include <iostream>
00008 #include <typeinfo>
00009 #include <map>
00010 #include <sstream>
00011 
00012 #include "xgi/Method.h"
00013 #include "xgi/Utils.h"
00014 
00015 #include "cgicc/Cgicc.h"
00016 #include "cgicc/FormEntry.h"
00017 #include "cgicc/HTMLClasses.h"
00018 
00019 using namespace std;
00020 namespace dqm{
00021   namespace daq{
00022 
00023 
00024     FEDMonitorClient::FEDMonitorClient( const edm::ParameterSet& pset) : 
00025       ModuleWeb("FEDMonitorClient")
00026      , qtHandle_(0)
00027      , nUpdates_(0)
00028      , qtesttodo_(pset.getUntrackedParameter<bool>("doQTests",false))
00029      , autorefresh_(false)
00030     {
00031       
00032       // get hold of back-end interface
00033       dbe = edm::Service<DQMStore>().operator->();
00034       
00035       // instantiate Monitor UI without connecting to any monitoring server
00036       // (i.e. "standalone mode")
00037       mui = new DQMOldReceiver();
00038       
00039       dbe->showDirStructure();
00040 
00041       if(qtesttodo_) bookQTests(pset); 
00042 
00043     }
00044     void FEDMonitorClient::analyze(const edm::Event & e, const edm::EventSetup& c)
00045     {
00046       eventId_ = e.id().event();
00047       runId_ = e.id().run();
00048       nUpdates_++;
00049     }
00050     
00051     void FEDMonitorClient::endLuminosityBlock(edm::LuminosityBlock const &lb, edm::EventSetup const &es)
00052     {
00053       std::cout << "here I will do something intelligent later " << std::endl;
00054     }
00055     void FEDMonitorClient::bookQTests(const edm::ParameterSet &pset)
00056     {
00057       qtHandle_ = new QTestHandle;
00058       qtHandle_->configureTests(pset.getUntrackedParameter<std::string>("qtList", "QualityTests.xml"),dbe);
00059       if(qtHandle_) qtHandle_->attachTests(dbe);      
00060     }
00061     
00062     void FEDMonitorClient::defaultWebPage(xgi::Input *in, xgi::Output *out)
00063     {
00064 
00065       std::string path;
00066       std::string mname;
00067       try 
00068         {
00069           cgicc::Cgicc cgi(in);
00070           if ( xgi::Utils::hasFormElement(cgi,"autorefresh") )
00071             autorefresh_ = xgi::Utils::getFormElement(cgi, "autorefresh")->getIntegerValue()  != 0;
00072           if ( xgi::Utils::hasFormElement(cgi,"module") )
00073             mname = xgi::Utils::getFormElement(cgi, "module")->getValue();
00074           cgicc::CgiEnvironment cgie(in);
00075           path = cgie.getPathInfo() + "?" + cgie.getQueryString();
00076         }
00077       catch (const std::exception & e) 
00078     {
00079       // don't care if it did not work
00080     }
00081 
00082 
00083         using std::endl;
00084         *out << "<html>"                                                   << endl;
00085         *out << "<head>"                                                   << endl;
00086         
00087         *out << "<title>" << typeid(FEDMonitorClient).name()
00088              << " MAIN</title>"                                            << endl;
00089         if (autorefresh_) {
00090           *out << "<meta https-equiv=\"refresh\" content=\"3\">"            << endl;
00091         }
00092         
00093         *out << "</head>"                                                  << endl;
00094         *out << "<body>"                                                   << endl;
00095 
00096         *out << cgicc::form().set("method","GET").set("action", path ) 
00097              << std::endl;
00098         *out << cgicc::input().set("type","hidden").set("name","module").set("value", mname) 
00099              << std::endl;
00100         *out << cgicc::input().set("type","hidden").set("name","autorefresh").set("value", autorefresh_?"0":"1") 
00101              << std::endl;
00102         *out << cgicc::input().set("type","submit").set("value",autorefresh_?"Toggle AutoRefresh OFF":"Toggle AutoRefresh ON")  
00103              << std::endl;
00104         *out << cgicc::form()                                              << std::endl;  
00105 
00106 
00107         *out << "<p>Run: " << runId_ << " Total updates: " << nUpdates_ << " Last Event analyzed: "
00108              << eventId_;
00109 
00110 
00111         *out << " FED Monitor status "                                     << endl;
00112 
00113 
00114         int status = dbe->getStatus();
00115         switch(status)
00116           {
00117           case dqm::qstatus::ERROR:
00118             *out << " Error(s)";
00119             break;
00120           case dqm::qstatus::WARNING:
00121             *out << " Warning(s)";
00122             break;
00123           case dqm::qstatus::OTHER:
00124             *out << " Some tests did not run;";
00125             break; 
00126           default:
00127             *out << (nUpdates_ > 2 ? " No problems" : "Starting");
00128           }
00129 
00130         *out << "<table>"                                               << endl;
00131         *out << "<tr><th>SubSystem</th><th>Present/Nominal</th><th>Errors</th><th>Warnings</th><th>Other</th></tr>" << endl;
00132         
00133         /*
00134         std::vector<std::string> contents; 
00135         mui->getContents(contents);
00136         for(unsigned int i = 0; i < contents.size() ; i++)
00137           *out << contents[i] << std::endl;
00138           */
00139         //      std::vector<MonitorElement*> plots = dbe->getContents("FEDs/Collated");
00140         int sstn = 0;
00141         int sste = 0;
00142         int sstw = 0;
00143         int ssto = 0;
00144         pair<int, int> range = FEDNumbering::getSiStripFEDIds();
00145         int sstt = range.second - range.first + 1;
00146         for (int i = range.first; i <= range.second; i++) 
00147           {
00148             ostringstream oss;
00149             oss << "FEDs/Collated/fed" << i;
00150             MonitorElement *me = dbe->get(oss.str());
00151             if(me != 0)
00152               {
00153                 sstn++;
00154                 if(me->hasError()) sste++;
00155                 if(me->hasWarning()) sstw++;
00156                 if(me->hasOtherReport()) ssto++;
00157               }
00158           }
00159         *out << "<tr><td bgcolor=";
00160         if(sstn==0)
00161           *out << "\"grey\"";
00162         else if(sste!=0)
00163           *out << "\"red\"";
00164         else if(sstw!=0)
00165           *out << "\"orange\"";
00166         else if(ssto!=0)
00167           *out << "\"yellow\"";
00168         else
00169           *out << "\"green\"";
00170 
00171         *out << ">SiStrip </td><td> " <<  sstn << "/" << sstt 
00172              << " </td><td> " << sste << " </td><td> " << sstw
00173              << " </td><td> " << ssto << " </td></tr> " << endl;
00174 
00175         sstn = 0; sste=0; sstw=0; ssto=0;
00176         range = FEDNumbering::getSiPixelFEDIds();
00177         sstt = range.second - range.first + 1;
00178         for (int i = range.first; i <= range.second; i++) 
00179           {
00180             ostringstream oss;
00181             oss << "FEDs/Collated/fed" << i;
00182             MonitorElement *me = dbe->get(oss.str());
00183             if(me != 0)
00184               {
00185                 sstn++;
00186                 if(me->hasError()) sste++;
00187                 if(me->hasWarning()) sstw++;
00188                 if(me->hasOtherReport()) ssto++;
00189               }
00190           }
00191         *out << "<tr><td bgcolor=";
00192         if(sstn==0)
00193           *out << "\"grey\"";
00194         else if(sste!=0)
00195           *out << "\"red\"";
00196         else if(sstw!=0)
00197           *out << "\"orange\"";
00198         else if(ssto!=0)
00199           *out << "\"yellow\"";
00200         else
00201           *out << "\"green\"";
00202 
00203         *out << ">SiPixel </td><td> " <<  sstn << "/" << sstt 
00204              << " </td><td> " << sste << " </td><td> " << sstw
00205              << " </td><td> " << ssto << " </td></tr> " << endl;
00206 
00207         sstn = 0; sste=0; sstw=0; ssto=0;
00208         range = FEDNumbering::getDTFEDIds();
00209         sstt = range.second - range.first + 1;
00210         for (int i = range.first; i <= range.second; i++) 
00211           {
00212             ostringstream oss;
00213             oss << "FEDs/Collated/fed" << i;
00214             MonitorElement *me = dbe->get(oss.str());
00215             if(me != 0)
00216               {
00217                 sstn++;
00218                 if(me->hasError()) sste++;
00219                 if(me->hasWarning()) sstw++;
00220                 if(me->hasOtherReport()) ssto++;
00221               }
00222           }
00223         *out << "<tr><td bgcolor=";
00224         if(sstn==0)
00225           *out << "\"grey\"";
00226         else if(sste!=0)
00227           *out << "\"red\"";
00228         else if(sstw!=0)
00229           *out << "\"orange\"";
00230         else if(ssto!=0)
00231           *out << "\"yellow\"";
00232         else
00233           *out << "\"green\"";
00234 
00235         *out << ">DT </td><td> " <<  sstn << "/" << sstt 
00236              << " </td><td> " << sste << " </td><td> " << sstw
00237              << " </td><td> " << ssto << " </td></tr> " << endl;
00238 
00239 
00240         sstn = 0; sste=0; sstw=0; ssto=0;
00241         range = FEDNumbering::getCSCFEDIds();
00242         sstt = range.second - range.first + 1;
00243         for (int i = range.first; i <= range.second; i++) 
00244           {
00245             ostringstream oss;
00246             oss << "FEDs/Collated/fed" << i;
00247             MonitorElement *me = dbe->get(oss.str());
00248             if(me != 0)
00249               {
00250                 sstn++;
00251                 if(me->hasError()) sste++;
00252                 if(me->hasWarning()) sstw++;
00253                 if(me->hasOtherReport()) ssto++;
00254               }
00255           }
00256         *out << "<tr><td bgcolor=";
00257         if(sstn==0)
00258           *out << "\"grey\"";
00259         else if(sste!=0)
00260           *out << "\"red\"";
00261         else if(sstw!=0)
00262           *out << "\"orange\"";
00263         else if(ssto!=0)
00264           *out << "\"yellow\"";
00265         else
00266           *out << "\"green\"";
00267 
00268         *out << ">CSC </td><td> " <<  sstn << "/" << sstt 
00269              << " </td><td> " << sste << " </td><td> " << sstw
00270              << " </td><td> " << ssto << " </td></tr> " << endl;
00271 
00272         sstn = 0; sste=0; sstw=0; ssto=0;
00273         range = FEDNumbering::getDTTFFEDIds();
00274         sstt = range.second - range.first + 1;
00275         for (int i = range.first; i <= range.second; i++) 
00276           {
00277             ostringstream oss;
00278             oss << "FEDs/Collated/fed" << i;
00279             MonitorElement *me = dbe->get(oss.str());
00280             if(me != 0)
00281               {
00282                 sstn++;
00283                 if(me->hasError()) sste++;
00284                 if(me->hasWarning()) sstw++;
00285                 if(me->hasOtherReport()) ssto++;
00286               }
00287           }
00288         *out << "<tr><td bgcolor=";
00289         if(sstn==0)
00290           *out << "\"grey\"";
00291         else if(sste!=0)
00292           *out << "\"red\"";
00293         else if(sstw!=0)
00294           *out << "\"orange\"";
00295         else if(ssto!=0)
00296           *out << "\"yellow\"";
00297         else
00298           *out << "\"green\"";
00299 
00300         *out << ">DTTF </td><td> " <<  sstn << "/" << sstt 
00301              << " </td><td> " << sste << " </td><td> " << sstw
00302              << " </td><td> " << ssto << " </td></tr> " << endl;
00303 
00304 
00305         sstn = 0; sste=0; sstw=0; ssto=0;
00306         range = FEDNumbering::getRPCFEDIds();
00307         sstt = range.second - range.first + 1;
00308         for (int i = range.first; i <= range.second; i++) 
00309           {
00310             ostringstream oss;
00311             oss << "FEDs/Collated/fed" << i;
00312             MonitorElement *me = dbe->get(oss.str());
00313             if(me != 0)
00314               {
00315                 sstn++;
00316                 if(me->hasError()) sste++;
00317                 if(me->hasWarning()) sstw++;
00318                 if(me->hasOtherReport()) ssto++;
00319               }
00320           }
00321         *out << "<tr><td bgcolor=";
00322         if(sstn==0)
00323           *out << "\"grey\"";
00324         else if(sste!=0)
00325           *out << "\"red\"";
00326         else if(sstw!=0)
00327           *out << "\"orange\"";
00328         else if(ssto!=0)
00329           *out << "\"yellow\"";
00330         else
00331           *out << "\"green\"";
00332 
00333         *out << ">RPC </td><td> " <<  sstn << "/" << sstt 
00334              << " </td><td> " << sste << " </td><td> " << sstw
00335              << " </td><td> " << ssto << " </td></tr> " << endl;
00336 
00337         sstn = 0; sste=0; sstw=0; ssto=0;
00338         range = FEDNumbering::getPreShowerFEDIds();
00339         sstt = range.second - range.first + 1;
00340         for (int i = range.first; i <= range.second; i++) 
00341           {
00342             ostringstream oss;
00343             oss << "FEDs/Collated/fed" << i;
00344             MonitorElement *me = dbe->get(oss.str());
00345             if(me != 0)
00346               {
00347                 sstn++;
00348                 if(me->hasError()) sste++;
00349                 if(me->hasWarning()) sstw++;
00350                 if(me->hasOtherReport()) ssto++;
00351               }
00352           }
00353         *out << "<tr><td bgcolor=";
00354         if(sstn==0)
00355           *out << "\"grey\"";
00356         else if(sste!=0)
00357           *out << "\"red\"";
00358         else if(sstw!=0)
00359           *out << "\"orange\"";
00360         else if(ssto!=0)
00361           *out << "\"yellow\"";
00362         else
00363           *out << "\"green\"";
00364 
00365         *out << ">PreShower </td><td> " <<  sstn << "/" << sstt 
00366              << " </td><td> " << sste << " </td><td> " << sstw
00367              << " </td><td> " << ssto << " </td></tr> " << endl;
00368 
00369         sstn = 0; sste=0; sstw=0; ssto=0;
00370         range = FEDNumbering::getEcalFEDIds();
00371         sstt = range.second - range.first + 1;
00372         for (int i = range.first; i <= range.second; i++) 
00373           {
00374             ostringstream oss;
00375             oss << "FEDs/Collated/fed" << i;
00376             MonitorElement *me = dbe->get(oss.str());
00377             if(me != 0)
00378               {
00379                 sstn++;
00380                 if(me->hasError()) sste++;
00381                 if(me->hasWarning()) sstw++;
00382                 if(me->hasOtherReport()) ssto++;
00383               }
00384           }
00385         *out << "<tr><td bgcolor=";
00386         if(sstn==0)
00387           *out << "\"grey\"";
00388         else if(sste!=0)
00389           *out << "\"red\"";
00390         else if(sstw!=0)
00391           *out << "\"orange\"";
00392         else if(ssto!=0)
00393           *out << "\"yellow\"";
00394         else
00395           *out << "\"green\"";
00396 
00397         *out << ">Ecal </td><td> " <<  sstn << "/" << sstt 
00398              << " </td><td> " << sste << " </td><td> " << sstw
00399              << " </td><td> " << ssto << " </td></tr> " << endl;
00400 
00401         sstn = 0; sste=0; sstw=0; ssto=0;
00402         range = FEDNumbering::getHcalFEDIds();
00403         sstt = range.second - range.first + 1;
00404         for (int i = range.first; i <= range.second; i++) 
00405           {
00406             ostringstream oss;
00407             oss << "FEDs/Collated/fed" << i;
00408             MonitorElement *me = dbe->get(oss.str());
00409             if(me != 0)
00410               {
00411                 sstn++;
00412                 if(me->hasError()) sste++;
00413                 if(me->hasWarning()) sstw++;
00414                 if(me->hasOtherReport()) ssto++;
00415               }
00416           }
00417         *out << "<tr><td bgcolor=";
00418         if(sstn==0)
00419           *out << "\"grey\"";
00420         else if(sste!=0)
00421           *out << "\"red\"";
00422         else if(sstw!=0)
00423           *out << "\"orange\"";
00424         else if(ssto!=0)
00425           *out << "\"yellow\"";
00426         else
00427           *out << "\"green\"";
00428 
00429         *out << ">Hcal </td><td> " <<  sstn << "/" << sstt 
00430              << " </td><td> " << sste << " </td><td> " << sstw
00431              << " </td><td> " << ssto << " </td></tr> " << endl;
00432 
00433         sstn = 0; sste=0; sstw=0; ssto=0;
00434         range = FEDNumbering::getTriggerGTPFEDIds();
00435         sstt = range.second - range.first + 1;
00436         for (int i = range.first; i <= range.second; i++) 
00437           {
00438             ostringstream oss;
00439             oss << "FEDs/Collated/fed" << i;
00440             MonitorElement *me = dbe->get(oss.str());
00441             if(me != 0)
00442               {
00443                 sstn++;
00444                 if(me->hasError()) sste++;
00445                 if(me->hasWarning()) sstw++;
00446                 if(me->hasOtherReport()) ssto++;
00447               }
00448           }
00449                 *out << "<tr><td bgcolor=";
00450         if(sstn==0)
00451           *out << "\"grey\"";
00452         else if(sste!=0)
00453           *out << "\"red\"";
00454         else if(sstw!=0)
00455           *out << "\"orange\"";
00456         else if(ssto!=0)
00457           *out << "\"yellow\"";
00458         else
00459           *out << "\"green\"";
00460 
00461         *out << ">GTP </td><td> " <<  sstn << "/" << sstt 
00462              << " </td><td> " << sste << " </td><td> " << sstw
00463              << " </td><td> " << ssto << " </td></tr> " << endl;
00464 
00465         sstn = 0; sste=0; sstw=0; ssto=0;
00466         range = FEDNumbering::getTriggerEGTPFEDIds();
00467         sstt = range.second - range.first + 1;
00468         for (int i = range.first; i <= range.second; i++) 
00469           {
00470             ostringstream oss;
00471             oss << "FEDs/Collated/fed" << i;
00472             MonitorElement *me = dbe->get(oss.str());
00473             if(me != 0)
00474               {
00475                 sstn++;
00476                 if(me->hasError()) sste++;
00477                 if(me->hasWarning()) sstw++;
00478                 if(me->hasOtherReport()) ssto++;
00479               }
00480           }
00481                 *out << "<tr><td bgcolor=";
00482         if(sstn==0)
00483           *out << "\"grey\"";
00484         else if(sste!=0)
00485           *out << "\"red\"";
00486         else if(sstw!=0)
00487           *out << "\"orange\"";
00488         else if(ssto!=0)
00489           *out << "\"yellow\"";
00490         else
00491           *out << "\"green\"";
00492 
00493         *out << ">EGTP </td><td> " <<  sstn << "/" << sstt 
00494              << " </td><td> " << sste << " </td><td> " << sstw
00495              << " </td><td> " << ssto << " </td></tr> " << endl;
00496 
00497 
00498         sstn = 0; sste=0; sstw=0; ssto=0;
00499         range = FEDNumbering::getCSCTFFEDIds();
00500         sstt = range.second - range.first + 1;
00501         for (int i = range.first; i <= range.second; i++) 
00502           {
00503             ostringstream oss;
00504             oss << "FEDs/Collated/fed" << i;
00505             MonitorElement *me = dbe->get(oss.str());
00506             if(me != 0)
00507               {
00508                 sstn++;
00509                 if(me->hasError()) sste++;
00510                 if(me->hasWarning()) sstw++;
00511                 if(me->hasOtherReport()) ssto++;
00512               }
00513           }
00514                 *out << "<tr><td bgcolor=";
00515         if(sstn==0)
00516           *out << "\"grey\"";
00517         else if(sste!=0)
00518           *out << "\"red\"";
00519         else if(sstw!=0)
00520           *out << "\"orange\"";
00521         else if(ssto!=0)
00522           *out << "\"yellow\"";
00523         else
00524           *out << "\"green\"";
00525 
00526         *out << ">CSCTF </td><td> " <<  sstn << "/" << sstt 
00527              << " </td><td> " << sste << " </td><td> " << sstw
00528              << " </td><td> " << ssto << " </td></tr> " << endl;
00529 
00530         sstn = 0; sste=0; sstw=0; ssto=0;
00531         range = FEDNumbering::getDAQeFEDFEDIds();
00532         sstt = range.second - range.first + 1;
00533         for (int i = range.first; i <= range.second; i++) 
00534           {
00535             ostringstream oss;
00536             oss << "FEDs/Collated/fed" << i;
00537             MonitorElement *me = dbe->get(oss.str());
00538             if(me != 0)
00539               {
00540                 sstn++;
00541                 if(me->hasError()) sste++;
00542                 if(me->hasWarning()) sstw++;
00543                 if(me->hasOtherReport()) ssto++;
00544               }
00545           }
00546                 *out << "<tr><td bgcolor=";
00547         if(sstn==0)
00548           *out << "\"grey\"";
00549         else if(sste!=0)
00550           *out << "\"red\"";
00551         else if(sstw!=0)
00552           *out << "\"orange\"";
00553         else if(ssto!=0)
00554           *out << "\"yellow\"";
00555         else
00556           *out << "\"green\"";
00557 
00558         *out << ">eFED </td><td> " <<  sstn << "/" << sstt 
00559              << " </td><td> " << sste << " </td><td> " << sstw
00560              << " </td><td> " << ssto << " </td></tr> " << endl;
00561 
00562         *out << "</table>"                                                 << endl;
00563         *out << "</body>"                                                  << endl;
00564         *out << "</html>"                                                  << endl;
00565     }
00566     std::string FEDMonitorClient::findSubsystemPath(std::string &subs)
00567     {
00568       return subs;
00569     }
00570 
00571   }
00572 }

Generated on Tue Jun 9 17:32:54 2009 for CMSSW by  doxygen 1.5.4