File indexing completed on 2025-08-05 08:16:05
0001 #include "CDBUtils.h"
0002
0003 #include "SphenixClient.h"
0004
0005 #include <nlohmann/json.hpp>
0006
0007 #include <iostream>
0008 #include <map>
0009 #include <set>
0010 #include <stdexcept> // for out_of_range
0011 #include <tuple>
0012 #include <utility> // for pair, make_pair
0013
0014 CDBUtils::CDBUtils()
0015 : cdbclient(new SphenixClient())
0016 {
0017 }
0018
0019 CDBUtils::CDBUtils(const std::string &globaltag)
0020 : cdbclient(new SphenixClient(globaltag))
0021 {
0022 }
0023
0024 int CDBUtils::createGlobalTag(const std::string &tagname)
0025 {
0026 nlohmann::json resp = cdbclient->createGlobalTag(tagname);
0027 int iret = resp["code"];
0028 nlohmann::json msgcont = resp["msg"];
0029 std::cout << msgcont << std::endl;
0030 return iret;
0031 }
0032
0033 int CDBUtils::deleteGlobalTag(const std::string &tagname)
0034 {
0035 nlohmann::json resp = cdbclient->deleteGlobalTag(tagname);
0036 int iret = resp["code"];
0037 nlohmann::json msgcont = resp["msg"];
0038 std::cout << msgcont << std::endl;
0039 return iret;
0040 }
0041
0042 int CDBUtils::lockGlobalTag(const std::string &tagname)
0043 {
0044 nlohmann::json resp = cdbclient->lockGlobalTag(tagname);
0045 int iret = resp["code"];
0046 nlohmann::json msgcont = resp["msg"];
0047 std::cout << msgcont << std::endl;
0048 return iret;
0049 }
0050
0051 int CDBUtils::unlockGlobalTag(const std::string &tagname)
0052 {
0053 nlohmann::json resp = cdbclient->unlockGlobalTag(tagname);
0054 int iret = resp["code"];
0055 nlohmann::json msgcont = resp["msg"];
0056 std::cout << "message: " << msgcont << std::endl;
0057 return iret;
0058 }
0059
0060 void CDBUtils::clearCache()
0061 {
0062 nlohmann::json resp = cdbclient->clearCache();
0063 std::cout << resp["msg"] << std::endl;
0064 return;
0065 }
0066
0067 std::string CDBUtils::getUrl(const std::string &type, uint64_t iov)
0068 {
0069 nlohmann::json resp = cdbclient->getUrl(type, iov);
0070 return resp["msg"];
0071 }
0072
0073 int CDBUtils::createPayloadType(const std::string &pt)
0074 {
0075 return cdbclient->createDomain(pt);
0076 }
0077
0078 void CDBUtils::listPayloadIOVs(uint64_t iov)
0079 {
0080 nlohmann::json resp = cdbclient->getPayloadIOVs(iov);
0081 if (resp["code"] != 0)
0082 {
0083 std::cout << resp["msg"] << std::endl;
0084 return;
0085 }
0086 nlohmann::json payload_iovs = resp["msg"];
0087 std::map<std::string, std::tuple<std::string, uint64_t, uint64_t>> iovs;
0088 for (auto &[pt, val] : payload_iovs.items())
0089 {
0090 std::string url = val["payload_url"];
0091 uint64_t bts = val["minor_iov_start"];
0092 uint64_t ets = val["minor_iov_end"];
0093 iovs.insert(std::make_pair(pt, std::make_tuple(url, bts, ets)));
0094 }
0095 for (const auto &it : iovs)
0096 {
0097 std::cout << it.first << ": " << std::get<0>(it.second)
0098 << ", begin ts: " << std::get<1>(it.second)
0099 << ", end ts: " << std::get<2>(it.second)
0100 << std::endl;
0101 }
0102 return;
0103 }
0104
0105 int CDBUtils::cloneGlobalTag(const std::string &source, const std::string &target)
0106 {
0107 nlohmann::json resp = cdbclient->getGlobalTags();
0108 nlohmann::json msgcont = resp["msg"];
0109 std::set<std::string> gtset;
0110 for (auto &it : msgcont.items())
0111 {
0112 std::string exist_gt = it.value().at("name");
0113 gtset.insert(exist_gt);
0114 }
0115 if (gtset.find(source) == gtset.end())
0116 {
0117 std::cout << "source tag " << source << " does not exist" << std::endl;
0118 return -1;
0119 }
0120 if (gtset.find(target) != gtset.end())
0121 {
0122 std::cout << "Target tag " << target << " exists, delete it first" << std::endl;
0123 return -1;
0124 }
0125 resp = cdbclient->cloneGlobalTag(source, target);
0126 int iret = resp["code"];
0127 std::cout << resp["msg"] << std::endl;
0128 return iret;
0129 }
0130
0131 void CDBUtils::listGlobalTags()
0132 {
0133 nlohmann::json resp = cdbclient->getGlobalTags();
0134 nlohmann::json msgcont = resp["msg"];
0135 std::set<std::string> globaltags;
0136 for (auto &it : msgcont.items())
0137 {
0138 std::string exist_gt = it.value().at("name");
0139 globaltags.insert(exist_gt);
0140 }
0141 for (const auto &it : globaltags)
0142 {
0143 std::cout << "global tag: " << it << std::endl;
0144 }
0145 return;
0146 }
0147
0148 void CDBUtils::listPayloadTypes()
0149 {
0150 nlohmann::json resp = cdbclient->getPayloadTypes();
0151 nlohmann::json msgcont = resp["msg"];
0152 std::set<std::string> payloadtypes;
0153 for (auto &it : msgcont.items())
0154 {
0155 std::string exist_pl = it.value().at("name");
0156 payloadtypes.insert(exist_pl);
0157 }
0158 for (const auto &it : payloadtypes)
0159 {
0160 std::cout << "payload type: " << it << std::endl;
0161 }
0162 return;
0163 }
0164
0165 int CDBUtils::insertPayload(const std::string &pl_type, const std::string &file_url, uint64_t iov_start)
0166 {
0167 if (!isGlobalTagSet())
0168 {
0169 std::cout << "No Global Tag set" << std::endl;
0170 return -1;
0171 }
0172 nlohmann::json resp = cdbclient->insertPayload(pl_type, file_url, iov_start);
0173 int iret = resp["code"];
0174 if (iret != 0)
0175 {
0176 std::cout << "Error inserting payload " << file_url << ", msg: " << resp["msg"] << std::endl;
0177 }
0178 else
0179 {
0180 std::cout << resp["msg"] << std::endl;
0181 }
0182 return iret;
0183 }
0184
0185 int CDBUtils::insertPayload(const std::string &pl_type, const std::string &file_url, uint64_t iov_start, uint64_t iov_end)
0186 {
0187 if (!isGlobalTagSet())
0188 {
0189 std::cout << "No Global Tag set" << std::endl;
0190 return -1;
0191 }
0192 nlohmann::json resp = cdbclient->insertPayload(pl_type, file_url, iov_start, iov_end);
0193 int iret = resp["code"];
0194 if (iret != 0)
0195 {
0196 std::cout << "Error inserting payload " << file_url << ", msg: " << resp["msg"] << std::endl;
0197 }
0198 else
0199 {
0200 std::cout << resp["msg"] << std::endl;
0201 }
0202 return iret;
0203 }
0204
0205 int CDBUtils::setGlobalTag(const std::string &tagname)
0206 {
0207 nlohmann::json resp = cdbclient->setGlobalTag(tagname);
0208 int iret = resp["code"];
0209 std::cout << "message: " << resp["msg"] << std::endl;
0210 return iret;
0211 }
0212
0213 bool CDBUtils::isGlobalTagSet()
0214 {
0215 return cdbclient->isGlobalTagSet();
0216 }
0217
0218 void CDBUtils::Verbosity(int i)
0219 {
0220 if (cdbclient)
0221 {
0222 cdbclient->Verbosity(i);
0223 }
0224 m_Verbosity = i;
0225 }
0226
0227 int CDBUtils::deletePayloadIOV(const std::string &pl_type, uint64_t iov_start)
0228 {
0229 nlohmann::json resp = cdbclient->deletePayloadIOV(pl_type, iov_start);
0230 int iret = resp["code"];
0231 if (iret != 0)
0232 {
0233 std::cout << "Error deleting payload iov, type " << pl_type
0234 << ", iov_start: " << iov_start
0235 << ", msg: " << resp["msg"] << std::endl;
0236 }
0237 else
0238 {
0239 std::cout << resp["msg"] << std::endl;
0240 }
0241 return iret;
0242 }
0243
0244 int CDBUtils::deletePayloadIOV(const std::string &pl_type, uint64_t iov_start, uint64_t iov_end)
0245 {
0246 nlohmann::json resp = cdbclient->deletePayloadIOV(pl_type, iov_start, iov_end);
0247 int iret = resp["code"];
0248 if (iret != 0)
0249 {
0250 std::cout << "Error deleting payload iov, type " << pl_type
0251 << ", iov_start: " << iov_start
0252 << ", iov_end: " << iov_end
0253 << ", msg: " << resp["msg"] << std::endl;
0254 }
0255 else
0256 {
0257 std::cout << resp["msg"] << std::endl;
0258 }
0259 return iret;
0260 }