File indexing completed on 2023-03-17 10:47:46
0001 #include "CondTools/DQM/interface/DQMSummaryReader.h"
0002 #include "FWCore/Utilities/interface/Exception.h"
0003 #include "RelationalAccess/ISession.h"
0004
0005
0006 #include "RelationalAccess/ITransaction.h"
0007 #include "RelationalAccess/ISchema.h"
0008 #include "RelationalAccess/ITable.h"
0009 #include "RelationalAccess/ITableDataEditor.h"
0010 #include "RelationalAccess/TableDescription.h"
0011 #include "RelationalAccess/IQuery.h"
0012 #include "RelationalAccess/ICursor.h"
0013 #include "CoralBase/AttributeList.h"
0014 #include "CoralBase/Attribute.h"
0015 #include "CoralBase/AttributeSpecification.h"
0016 #include <iostream>
0017 #include <stdexcept>
0018 #include <vector>
0019 #include <cmath>
0020
0021 DQMSummaryReader::DQMSummaryReader(const std::string& connectionString,
0022 const std::string& user,
0023 const std::string& pass)
0024 : TestBase(),
0025 m_connectionString(connectionString),
0026 m_user(user),
0027 m_pass(pass) {
0028 m_tableToRead = "";
0029 }
0030
0031 DQMSummaryReader::~DQMSummaryReader() {}
0032
0033 void DQMSummaryReader::run() {}
0034
0035 DQMSummary DQMSummaryReader::readData(const std::string& table,
0036 const long long r_number) {
0037 m_tableToRead = table;
0038
0039 DQMSummary dqmSummary;
0040 dqmSummary.m_run = r_number;
0041 std::cout << "Entering readData" << std::endl;
0042 coral::ISession* session = this->connect(m_connectionString, m_user, m_pass);
0043
0044
0045 try {
0046
0047
0048 session->transaction().start();
0049 std::cout << "Starting session on the connection " << m_connectionString << std::endl;
0050 coral::ISchema& schema = session->nominalSchema();
0051 std::cout << "--- accessing schema for user " << m_user << std::endl;
0052 std::cout << "------ trying to handle table " << m_tableToRead << std::endl;
0053
0054 coral::IQuery* query = schema.tableHandle(m_tableToRead).newQuery();
0055 query->addToOutputList("count(*)", "count");
0056
0057 std::string condition = "run=:n_run";
0058 coral::AttributeList conditionData;
0059 conditionData.extend<long long>("n_run");
0060
0061 conditionData[0].data<long long>() = r_number;
0062 query->setCondition(condition, conditionData);
0063
0064 coral::ICursor& cursor = query->execute();
0065 DQMSummary::DQMSummary::RunItem runItem;
0066 DQMSummary::DQMSummary::RunItem::LumiItem lumiItem;
0067 double nRows = 0;
0068 if (cursor.next()) {
0069
0070 const coral::AttributeList& row = cursor.currentRow();
0071 nRows = row["count"].data<double>();
0072
0073
0074
0075
0076
0077 std::cout << "Rows for count query " << nRows << std::endl;
0078 if (nRows != 0) {
0079 std::cout << "Starting to build DQMSummary" << std::endl;
0080
0081 coral::IQuery* queryI = schema.tableHandle(m_tableToRead).newQuery();
0082 queryI->setDistinct();
0083 queryI->addToOutputList("lumisec");
0084
0085 std::string conditionI = "run=:n_run";
0086 coral::AttributeList conditionDataI;
0087 conditionDataI.extend<long long>("n_run");
0088
0089 conditionDataI[0].data<long long>() = r_number;
0090 queryI->setCondition(conditionI, conditionDataI);
0091
0092 coral::ICursor& cursorI = queryI->execute();
0093
0094 int nRowsI = 0;
0095 while (cursorI.next()) {
0096
0097 ++nRowsI;
0098 const coral::AttributeList& rowI = cursorI.currentRow();
0099 runItem.m_lumisec = rowI["lumisec"].data<long long>();
0100
0101 coral::IQuery* queryII = schema.tableHandle(m_tableToRead).newQuery();
0102 queryII->addToOutputList("subsystem");
0103 queryII->addToOutputList("reportcontent");
0104
0105 queryII->addToOutputList("status");
0106 std::string conditionII = "run= :n_run AND lumisec= :n_lumisec";
0107 coral::AttributeList conditionDataII;
0108 conditionDataII.extend<long long>("n_run");
0109
0110 conditionDataII[0].data<long long>() = r_number;
0111 conditionDataII.extend<long long>("n_lumisec");
0112
0113 conditionDataII[1].data<long long>() = rowI["lumisec"].data<long long>();
0114 queryII->setCondition(conditionII, conditionDataII);
0115
0116 coral::ICursor& cursorII = queryII->execute();
0117
0118 int nRowsII = 0;
0119 while (cursorII.next()) {
0120
0121 ++nRowsII;
0122 const coral::AttributeList& rowII = cursorII.currentRow();
0123 lumiItem.m_subsystem = rowII["subsystem"].data<std::string>();
0124 lumiItem.m_reportcontent = rowII["reportcontent"].data<std::string>();
0125
0126 lumiItem.m_type = "reportSummary";
0127 lumiItem.m_status = rowII["status"].data<double>();
0128 runItem.m_lumisummary.push_back(lumiItem);
0129 std::cout << "DQMSummary::DQMSummary::RunItem::LumiItem filled" << std::endl;
0130 }
0131 std::cout << "Returned rows for lumisection query " << nRowsII << std::endl;
0132 dqmSummary.m_summary.push_back(runItem);
0133 std::cout << "DQMSummary::DQMSummary::RunItem filled" << std::endl;
0134 delete queryII;
0135 }
0136 std::cout << "Returned rows for run number query " << nRowsI << std::endl;
0137 delete queryI;
0138 } else {
0139 runItem.m_lumisec = 0;
0140 lumiItem.m_subsystem = " ";
0141 lumiItem.m_reportcontent = " ";
0142 lumiItem.m_type = " ";
0143 lumiItem.m_status = -2;
0144 std::cout << "[lumisec (long long) : " << runItem.m_lumisec
0145 << "], [subsystem (string) : " << lumiItem.m_subsystem
0146 << "], [reportcontent (string) : " << lumiItem.m_reportcontent
0147 << "], [type (string) : " << lumiItem.m_type << "], [status (double) : " << lumiItem.m_status << "]"
0148 << std::endl;
0149 runItem.m_lumisummary.push_back(lumiItem);
0150 dqmSummary.m_summary.push_back(runItem);
0151 std::cout << "No information in DQMSummary for run " << r_number << std::endl;
0152 }
0153 } else
0154 throw cms::Exception("UnconsistentData") << "What is wrong with you?" << std::endl;
0155 std::cout << "DQMSummary built" << std::endl;
0156 delete query;
0157 session->transaction().commit();
0158 } catch (const std::exception& e) {
0159 std::cout << "Exception: " << e.what() << std::endl;
0160 }
0161 delete session;
0162 return dqmSummary;
0163 }