CMS 3D CMS Logo

Public Member Functions | Private Attributes

DQMSummaryReader Class Reference

#include <DQMSummaryReader.h>

Inheritance diagram for DQMSummaryReader:
TestBase

List of all members.

Public Member Functions

 DQMSummaryReader (const std::string &connectionString, const std::string &user, const std::string &pass)
DQMSummary readData (const std::string &table, const long long r_number)
void run ()
virtual ~DQMSummaryReader ()

Private Attributes

std::string m_connectionString
std::string m_pass
std::string m_tableToRead
std::string m_user

Detailed Description

Definition at line 8 of file DQMSummaryReader.h.


Constructor & Destructor Documentation

DQMSummaryReader::DQMSummaryReader ( const std::string &  connectionString,
const std::string &  user,
const std::string &  pass 
)

Definition at line 21 of file DQMSummaryReader.cc.

References m_tableToRead.

                                                         :
  TestBase(), /*ReadBase(),*/
  m_connectionString( connectionString ),
  m_user( user ),
  m_pass( pass ) {
  m_tableToRead="";
}
DQMSummaryReader::~DQMSummaryReader ( ) [virtual]

Definition at line 31 of file DQMSummaryReader.cc.

{}

Member Function Documentation

DQMSummary DQMSummaryReader::readData ( const std::string &  table,
const long long  r_number 
)

Definition at line 35 of file DQMSummaryReader.cc.

References TestBase::connect(), gather_cfg::cout, exception, Exception, m_connectionString, m_pass, DQMSummary::m_run, DQMSummary::m_summary, m_tableToRead, m_user, o2o::query, python::IdGenerator::schema, python::CommonUtils::session, and asciidump::table.

Referenced by popcon::DQMSummarySourceHandler::getNewObjects().

                                                                                         {
  m_tableToRead = table; // to be  CMS_DQM_SUMMARY.summarycontent
  //m_columnToRead = column;  // to be run, lumisec
  DQMSummary dqmSummary;
  dqmSummary.m_run = r_number;
  std::cout<< "Entering readData" << std::endl;
  coral::ISession* session = this->connect(m_connectionString,
                                           m_user, m_pass);
  //coral::ISessionProxy* session = this->connect(m_connectionString,
  //                                              m_user, m_pass);
  try{
    //session->typeConverter().setCppTypeForSqlType(coral::AttributeSpecification::typeNameForId(typeid(std::string)), "VARCHAR2(20)");
    //session->typeConverter().setCppTypeForSqlType(coral::AttributeSpecification::typeNameForId(typeid(std::string)), "VARCHAR2(40)");
    session->transaction().start();
    std::cout<< "Starting session on the connection " << m_connectionString << std::endl;
    coral::ISchema& schema = session->nominalSchema();
    std::cout<< "--- accessing schema for user " << m_user << std::endl;
    std::cout<< "------ trying to handle table " << m_tableToRead << std::endl;
    //defining count query
    coral::IQuery* query = schema.tableHandle(m_tableToRead).newQuery();
    query->addToOutputList("count(*)", "count");
    //condition for the WHERE clause in the count query
    std::string condition = "run=:n_run";
    coral::AttributeList conditionData;
    conditionData.extend<long long>( "n_run" );
    //conditionData[0].setValue<long long>(r_number); 
    conditionData[0].data<long long>() = r_number;
    query->setCondition(condition, conditionData);
    //performing count query
    coral::ICursor& cursor = query->execute();
    DQMSummary::DQMSummary::RunItem runItem;
    DQMSummary::DQMSummary::RunItem::LumiItem lumiItem;
    double nRows = 0;
    if( cursor.next() ) {
      //cursor.currentRow().toOutputStream(std::cout) << std::endl;
      const coral::AttributeList& row = cursor.currentRow();
      nRows = row["count"].data<double>();
      /*const coral::Attribute& count = cursor.currentRow()["count"];
        if(count.specification().type() == typeid(double))
      nRows = count.data<double>();
      else
      nRows = count.data<float>();*/
      std::cout << "Rows for count query " << nRows << std::endl;
      if( nRows != 0 ) {
        std::cout << "Starting to build DQMSummary" << std::endl;
        //defining first query
        coral::IQuery* queryI = schema.tableHandle(m_tableToRead).newQuery();
        queryI->setDistinct();
        queryI->addToOutputList("lumisec");
        //condition for the WHERE clause in the first query
        std::string conditionI = "run=:n_run";
        coral::AttributeList conditionDataI;
        conditionDataI.extend<long long>( "n_run" );
        //conditionDataI[0].setValue<long long>(r_number); 
        conditionDataI[0].data<long long>() = r_number;
        queryI->setCondition(conditionI, conditionDataI);
        //performing query
        coral::ICursor& cursorI = queryI->execute();
        //a little printout, then filling DQMSummary
        int nRowsI = 0;
        while( cursorI.next() ) {
          //cursorI.currentRow().toOutputStream(std::cout) << std::endl;
          ++nRowsI;
          const coral::AttributeList& rowI = cursorI.currentRow();
          runItem.m_lumisec = rowI["lumisec"].data<long long>();
          //defining second query
          coral::IQuery* queryII = schema.tableHandle(m_tableToRead).newQuery();
          queryII->addToOutputList("subsystem");
          queryII->addToOutputList("reportcontent");
          //queryII->addToOutputList("type"); // when implemented in OMDS
          queryII->addToOutputList("status");
          std::string conditionII = "run= :n_run AND lumisec= :n_lumisec";
          coral::AttributeList conditionDataII;
          conditionDataII.extend<long long>( "n_run" );
          //conditionDataII[0].setValue<long long>(r_number); 
          conditionDataII[0].data<long long>() = r_number;
          conditionDataII.extend<long long>( "n_lumisec" );
          //conditionDataII[1].setValue<long long>(rowI["lumisec"].data<long long>()); 
          conditionDataII[1].data<long long>() = rowI["lumisec"].data<long long>();
          queryII->setCondition(conditionII, conditionDataII);
          //performing query
          coral::ICursor& cursorII = queryII->execute();
          //a little printout, then filling DQMSummary
          int nRowsII = 0;
          while( cursorII.next() ) {
            //cursorII.currentRow().toOutputStream(std::cout) << std::endl;
            ++nRowsII;
            const coral::AttributeList& rowII = cursorII.currentRow();
            lumiItem.m_subsystem = rowII["subsystem"].data<std::string>();
            lumiItem.m_reportcontent = rowII["reportcontent"].data<std::string>();
            //lumiItem.m_type = rowII["type"].data<std::string>(); // when implemented in OMDS
            lumiItem.m_type = "reportSummary";
            lumiItem.m_status = rowII["status"].data<double>();
            runItem.m_lumisummary.push_back(lumiItem);
            std::cout << "DQMSummary::DQMSummary::RunItem::LumiItem filled" << std::endl;
          }
          std::cout << "Returned rows for lumisection query " << nRowsII << std::endl;
          dqmSummary.m_summary.push_back(runItem);
          std::cout << "DQMSummary::DQMSummary::RunItem filled" << std::endl;
          delete queryII;
        }
        std::cout << "Returned rows for run number query " << nRowsI << std::endl;
        delete queryI;
      }
      else {
        runItem.m_lumisec = 0;
        lumiItem.m_subsystem = " ";
        lumiItem.m_reportcontent = " ";
        lumiItem.m_type = " ";
        lumiItem.m_status = -2;
        std::cout << "[lumisec (long long) : " << runItem.m_lumisec
                  << "], [subsystem (string) : " << lumiItem.m_subsystem
                  << "], [reportcontent (string) : " << lumiItem.m_reportcontent
                  << "], [type (string) : " << lumiItem.m_type
                  << "], [status (double) : " << lumiItem.m_status
                  << "]" << std::endl;
        runItem.m_lumisummary.push_back(lumiItem);
        dqmSummary.m_summary.push_back(runItem);
        std::cout << "No information in DQMSummary for run " 
                  << r_number <<std::endl;
      }
    }
    else 
      throw cms::Exception("UnconsistentData") << "What is wrong with you?" << std::endl;
    std::cout << "DQMSummary built" << std::endl;
    delete query;
    session->transaction().commit();
  } 
  catch (const std::exception& e) { 
    std::cout << "Exception: "<<e.what()<<std::endl; 
  }
  delete session;
  return dqmSummary;
}
void DQMSummaryReader::run ( ) [virtual]

Implements TestBase.

Definition at line 33 of file DQMSummaryReader.cc.

{}

Member Data Documentation

std::string DQMSummaryReader::m_connectionString [private]

Definition at line 19 of file DQMSummaryReader.h.

Referenced by readData().

std::string DQMSummaryReader::m_pass [private]

Definition at line 21 of file DQMSummaryReader.h.

Referenced by readData().

std::string DQMSummaryReader::m_tableToRead [private]

Definition at line 17 of file DQMSummaryReader.h.

Referenced by DQMSummaryReader(), and readData().

std::string DQMSummaryReader::m_user [private]

Definition at line 20 of file DQMSummaryReader.h.

Referenced by readData().