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