18#include <boost/lexical_cast.hpp>
19#include <fairlogger/Logger.h>
32void CCDBManagerInstance::reportFatal(std::string_view err)
39 if (headers.size() != 0) {
41 auto strt = headers.find(
"STF");
42 auto stop = headers.find(
"ETF");
43 long valStrt = (strt == headers.end()) ? -1L :
boost::lexical_cast<
int64_t>(strt->second);
44 long valStop = (stop == headers.end()) ? -1L :
boost::lexical_cast<
int64_t>(stop->second);
45 if (valStrt < 0 || valStop < 0) {
46 report +=
"Missing STF/EFT -> use SOX/EOX;";
47 strt = headers.find(
"SOX");
48 valStrt = (strt == headers.end()) ? -1L :
boost::lexical_cast<
int64_t>(strt->second);
50 report += fmt::format(
" Missing/invalid SOX -> use SOR");
51 strt = headers.find(
"SOR");
52 valStrt = (strt == headers.end()) ? -1L :
boost::lexical_cast<
int64_t>(strt->second);
54 stop = headers.find(
"EOX");
55 valStop = (stop == headers.end()) ? -1L :
boost::lexical_cast<
int64_t>(stop->second);
57 report += fmt::format(
" | Missing/invalid EOX -> use EOR");
58 stop = headers.find(
"EOR");
59 valStop = (stop == headers.end()) ? -1L :
boost::lexical_cast<
int64_t>(stop->second);
65 return std::make_pair(valStrt, valStop);
67 return std::make_pair(-1L, -1L);
72 auto headers = api.
retrieveHeaders(
"RCT/Info/RunInformation", std::map<std::string, std::string>(), runnumber);
74 if ((response.first <= 0 || response.second < response.first) && fatal) {
75 LOG(fatal) <<
"Empty, missing or invalid response from query to RCT/Info/RunInformation for run " << runnumber;
86 auto& cached = mCache[
"RCT-Run-Info HeaderOnly"];
87 std::pair<int64_t, int64_t>
rd;
89 if (cached.startvalidity != runnumber) {
91 cached.objPtr = std::make_shared<std::pair<int64_t, int64_t>>(
rd);
92 cached.startvalidity = runnumber;
93 cached.endvalidity = runnumber + 1;
94 cached.minSize = cached.maxSize = 0;
97 rd = *
reinterpret_cast<std::pair<int64_t, int64_t>*
>(cached.objPtr.get());
104 std::string
res = fmt::format(
"{} queries, {} bytes", mQueries, fmt::group_digits(mFetchedSize));
105 if (mCachingEnabled) {
106 res += fmt::format(
" for {} objects", mCache.size());
108 res += fmt::format(
", {} good fetches (and {} failed ones", mFetches, mFailures);
109 if (mCachingEnabled && mFailures) {
111 for (
const auto& obj : mCache) {
112 if (obj.second.failures) {
116 res += fmt::format(
" for {} objects", nfailObj);
118 res += fmt::format(
") in {} ms, instance: {}", fmt::group_digits(mTimerMS), mCCDBAccessor.
getUniqueAgentID());
125 if (longrep && mCachingEnabled) {
126 LOGP(info,
"CCDB cache miss/hit/failures");
127 for (
const auto& obj : mCache) {
128 LOGP(info,
" {}: {}/{}/{} ({}-{} bytes)", obj.first, obj.second.fetches, obj.second.queries - obj.second.fetches - obj.second.failures, obj.second.failures, obj.second.minSize, obj.second.maxSize);
void report(bool longrep=false)
bool isCachingEnabled() const
check if caching is enabled
std::pair< int64_t, int64_t > getRunDuration(int runnumber, bool fatal=true)
std::string getSummaryString() const
void setURL(const std::string &url)
set a URL to query from
const std::string getUniqueAgentID() const
void init(std::string const &hosts)
std::map< std::string, std::string > retrieveHeaders(std::string const &path, std::map< std::string, std::string > const &metadata, long timestamp=-1) const
a couple of static helper functions to create timestamp values for CCDB queries or override obsolete ...
LOG(info)<< "Compressed in "<< sw.CpuTime()<< " s"