Go to the documentation of this file.00001 #include "CondTools/DQM/interface/DQMSummaryReader.h"
00002 #include "FWCore/Utilities/interface/Exception.h"
00003 #include "RelationalAccess/ISession.h"
00004
00005
00006 #include "RelationalAccess/ITransaction.h"
00007 #include "RelationalAccess/ISchema.h"
00008 #include "RelationalAccess/ITable.h"
00009 #include "RelationalAccess/ITableDataEditor.h"
00010 #include "RelationalAccess/TableDescription.h"
00011 #include "RelationalAccess/IQuery.h"
00012 #include "RelationalAccess/ICursor.h"
00013 #include "CoralBase/AttributeList.h"
00014 #include "CoralBase/Attribute.h"
00015 #include "CoralBase/AttributeSpecification.h"
00016 #include <iostream>
00017 #include <stdexcept>
00018 #include <vector>
00019 #include <cmath>
00020
00021 DQMSummaryReader::DQMSummaryReader(const std::string& connectionString,
00022 const std::string& user,
00023 const std::string& pass):
00024 TestBase(),
00025 m_connectionString( connectionString ),
00026 m_user( user ),
00027 m_pass( pass ) {
00028 m_tableToRead="";
00029 }
00030
00031 DQMSummaryReader::~DQMSummaryReader() {}
00032
00033 void DQMSummaryReader::run() {}
00034
00035 DQMSummary DQMSummaryReader::readData(const std::string & table, const long long r_number) {
00036 m_tableToRead = table;
00037
00038 DQMSummary dqmSummary;
00039 dqmSummary.m_run = r_number;
00040 std::cout<< "Entering readData" << std::endl;
00041 coral::ISession* session = this->connect(m_connectionString,
00042 m_user, m_pass);
00043
00044
00045 try{
00046
00047
00048 session->transaction().start();
00049 std::cout<< "Starting session on the connection " << m_connectionString << std::endl;
00050 coral::ISchema& schema = session->nominalSchema();
00051 std::cout<< "--- accessing schema for user " << m_user << std::endl;
00052 std::cout<< "------ trying to handle table " << m_tableToRead << std::endl;
00053
00054 coral::IQuery* query = schema.tableHandle(m_tableToRead).newQuery();
00055 query->addToOutputList("count(*)", "count");
00056
00057 std::string condition = "run=:n_run";
00058 coral::AttributeList conditionData;
00059 conditionData.extend<long long>( "n_run" );
00060
00061 conditionData[0].data<long long>() = r_number;
00062 query->setCondition(condition, conditionData);
00063
00064 coral::ICursor& cursor = query->execute();
00065 DQMSummary::DQMSummary::RunItem runItem;
00066 DQMSummary::DQMSummary::RunItem::LumiItem lumiItem;
00067 double nRows = 0;
00068 if( cursor.next() ) {
00069
00070 const coral::AttributeList& row = cursor.currentRow();
00071 nRows = row["count"].data<double>();
00072
00073
00074
00075
00076
00077 std::cout << "Rows for count query " << nRows << std::endl;
00078 if( nRows != 0 ) {
00079 std::cout << "Starting to build DQMSummary" << std::endl;
00080
00081 coral::IQuery* queryI = schema.tableHandle(m_tableToRead).newQuery();
00082 queryI->setDistinct();
00083 queryI->addToOutputList("lumisec");
00084
00085 std::string conditionI = "run=:n_run";
00086 coral::AttributeList conditionDataI;
00087 conditionDataI.extend<long long>( "n_run" );
00088
00089 conditionDataI[0].data<long long>() = r_number;
00090 queryI->setCondition(conditionI, conditionDataI);
00091
00092 coral::ICursor& cursorI = queryI->execute();
00093
00094 int nRowsI = 0;
00095 while( cursorI.next() ) {
00096
00097 ++nRowsI;
00098 const coral::AttributeList& rowI = cursorI.currentRow();
00099 runItem.m_lumisec = rowI["lumisec"].data<long long>();
00100
00101 coral::IQuery* queryII = schema.tableHandle(m_tableToRead).newQuery();
00102 queryII->addToOutputList("subsystem");
00103 queryII->addToOutputList("reportcontent");
00104
00105 queryII->addToOutputList("status");
00106 std::string conditionII = "run= :n_run AND lumisec= :n_lumisec";
00107 coral::AttributeList conditionDataII;
00108 conditionDataII.extend<long long>( "n_run" );
00109
00110 conditionDataII[0].data<long long>() = r_number;
00111 conditionDataII.extend<long long>( "n_lumisec" );
00112
00113 conditionDataII[1].data<long long>() = rowI["lumisec"].data<long long>();
00114 queryII->setCondition(conditionII, conditionDataII);
00115
00116 coral::ICursor& cursorII = queryII->execute();
00117
00118 int nRowsII = 0;
00119 while( cursorII.next() ) {
00120
00121 ++nRowsII;
00122 const coral::AttributeList& rowII = cursorII.currentRow();
00123 lumiItem.m_subsystem = rowII["subsystem"].data<std::string>();
00124 lumiItem.m_reportcontent = rowII["reportcontent"].data<std::string>();
00125
00126 lumiItem.m_type = "reportSummary";
00127 lumiItem.m_status = rowII["status"].data<double>();
00128 runItem.m_lumisummary.push_back(lumiItem);
00129 std::cout << "DQMSummary::DQMSummary::RunItem::LumiItem filled" << std::endl;
00130 }
00131 std::cout << "Returned rows for lumisection query " << nRowsII << std::endl;
00132 dqmSummary.m_summary.push_back(runItem);
00133 std::cout << "DQMSummary::DQMSummary::RunItem filled" << std::endl;
00134 delete queryII;
00135 }
00136 std::cout << "Returned rows for run number query " << nRowsI << std::endl;
00137 delete queryI;
00138 }
00139 else {
00140 runItem.m_lumisec = 0;
00141 lumiItem.m_subsystem = " ";
00142 lumiItem.m_reportcontent = " ";
00143 lumiItem.m_type = " ";
00144 lumiItem.m_status = -2;
00145 std::cout << "[lumisec (long long) : " << runItem.m_lumisec
00146 << "], [subsystem (string) : " << lumiItem.m_subsystem
00147 << "], [reportcontent (string) : " << lumiItem.m_reportcontent
00148 << "], [type (string) : " << lumiItem.m_type
00149 << "], [status (double) : " << lumiItem.m_status
00150 << "]" << std::endl;
00151 runItem.m_lumisummary.push_back(lumiItem);
00152 dqmSummary.m_summary.push_back(runItem);
00153 std::cout << "No information in DQMSummary for run "
00154 << r_number <<std::endl;
00155 }
00156 }
00157 else
00158 throw cms::Exception("UnconsistentData") << "What is wrong with you?" << std::endl;
00159 std::cout << "DQMSummary built" << std::endl;
00160 delete query;
00161 session->transaction().commit();
00162 }
00163 catch (const std::exception& e) {
00164 std::cout << "Exception: "<<e.what()<<std::endl;
00165 }
00166 delete session;
00167 return dqmSummary;
00168 }