29#include <unordered_map>
50 std::string op[] = {
"OpenR",
"OpenW",
"Open",
"Read",
"Write",
"Stat",
"Close",
51 "PgRead",
"PgWrite",
"Truncate",
"Sync",
"VectorRead",
"VectorWrite" };
54 std::string gain = i +
"::tgain";
55 std::string loss = i +
"::tloss";
56 std::string nomi = i +
"::tnomi";
57 std::string exec = i +
"::texec";
58 std::string meas = i +
"::tmeas";
66 std::string cnt = i +
"::n";
67 std::string vol = i +
"::b";
68 std::string err = i +
"::e";
69 std::string off = i +
"::o";
82 std::string
Dump(
bool json)
const
87 ss <<
"# -----------------------------------------------------------------" << std::endl;
90 ss <<
"# File: " <<
fname << std::endl;
91 ss <<
"# Sync: " << std::fixed << std::setprecision(2) <<
synchronicity <<
"%" << std::endl;
92 ss <<
"# Errs: " << std::fixed <<
errors << std::endl;
96 ss <<
"# Summary" << std::endl;
98 ss <<
"# -----------------------------------------------------------------" << std::endl;
101 std::string key = i.first;
102 std::transform(key.begin(), key.end(), key.begin(), ::tolower);
105 ss <<
"# " << std::setw(16) << key <<
" : " << std::setw(16) << std::fixed << i.second
106 <<
" s" << std::endl;
111 std::string key = i.first;
112 std::transform(key.begin(), key.end(), key.begin(), ::tolower);
115 ss <<
"# " << std::setw(16) << key <<
" : " << std::setw(16) << i.second << std::endl;
121 std::string name =
fname;
123 name =
"_files_summary_";
125 ss <<
" {" << std::endl;
127 <<
"\"" << name <<
"\"," << std::endl;
128 ss <<
" \"synchronicity\": " <<
synchronicity <<
"," << std::endl;
129 ss <<
" \"errors\": " <<
errors <<
"," << std::endl;
132 std::string key = i.first;
133 std::transform(key.begin(), key.end(), key.begin(), ::tolower);
136 ss <<
" \"" << key <<
"\": " << i.second <<
"," << std::endl;
141 std::string key = i.first;
142 std::transform(key.begin(), key.end(), key.begin(), ::tolower);
145 ss <<
" \"" << key <<
"\": " << i.second <<
"," << std::endl;
148 ss.seekp(-2, std::ios_base::end);
151 ss <<
" }" << std::endl;
153 ss <<
" }," << std::endl;
160 auto v1 =
ios.find(
"Read::n");
161 auto v2 =
ios.find(
"PgRead::n");
162 auto v3 =
ios.find(
"VectorRead::n");
163 return (v1->second + v2->second + v3->second);
168 auto v1 =
ios.find(
"Write::n");
169 auto v2 =
ios.find(
"PgWrite::n");
170 auto v3 =
ios.find(
"VectorWrite::n");
171 return (v1->second + v2->second + v3->second);
176 auto v1 =
ios.find(
"Read::b");
177 auto v2 =
ios.find(
"PgRead::b");
178 auto v3 =
ios.find(
"VectorRead::b");
179 return (v1->second + v2->second + v3->second);
184 auto v1 =
ios.find(
"Write::b");
185 auto v2 =
ios.find(
"PgWrite::b");
186 auto v3 =
ios.find(
"VectorWrite::b");
187 return (v1->second + v2->second + v3->second);
190 void addDelays(
const std::string& action,
const std::string& field,
double value)
193 std::unique_lock<std::mutex> guard(
mtx);
194 delays[action +
"::" + field] += value;
197 void addIos(
const std::string& action,
const std::string& field,
double value)
200 std::unique_lock<std::mutex> guard(
mtx);
201 ios[action +
"::" + field] += value;
204 ios[
"All::e"] += value;
210 for (
auto& k : other.
ios)
212 ios[k.first] += k.second;
214 for (
auto& k : other.
delays)
216 delays[k.first] += k.second;
220 auto w1 = other.
ios.find(
"Write::b");
221 auto w2 = other.
ios.find(
"PgWrite::b");
222 auto w3 = other.
ios.find(
"VectorWrite::b");
224 if (((w1 != other.
ios.end()) && w1->second) || ((w2 != other.
ios.end()) && w2->second)
225 || ((w3 != other.
ios.end()) && w3->second))
239 const uint64_t KB = 1000ll;
240 const uint64_t MB = 1000ll * KB;
241 const uint64_t GB = 1000ll * MB;
242 const uint64_t TB = 1000ll * GB;
243 const uint64_t PB = 1000ll * TB;
244 const uint64_t EB = 1000ll * PB;
245 std::stringstream ss;
246 if (insize >= (10 * KB))
259 ss << std::fixed << std::setprecision(2) << (insize * 1.0 / EB) <<
" EB";
264 ss << std::fixed << std::setprecision(2) << (insize * 1.0 / PB) <<
" PB";
270 ss << std::fixed << std::setprecision(2) << (insize * 1.0 / TB) <<
" TB";
276 ss << std::fixed << std::setprecision(2) << (insize * 1.0 / GB) <<
" GB";
282 ss << std::fixed << std::setprecision(2) << (insize * 1.0 / MB) <<
" MB";
288 ss << std::fixed << std::setprecision(2) << (insize * 1.0 / KB) <<
" KB";
293 ss << std::fixed << insize <<
" B";
336 std::map<std::string, uint64_t>
ios;
Definition XrdClAction.hh:34
Definition XrdClActionMetrics.hh:305
std::vector< double > reads
Definition XrdClActionMetrics.hh:306
std::vector< double > writes
Definition XrdClActionMetrics.hh:307
double ReadSynchronicity() const
Definition XrdClActionMetrics.hh:309
double WriteSynchronicity() const
Definition XrdClActionMetrics.hh:321
Metrics struct storing all timing and IO information of an action.
Definition XrdClActionMetrics.hh:47
std::string url
Definition XrdClActionMetrics.hh:300
synchronicity_t aggregated_synchronicity
Definition XrdClActionMetrics.hh:334
void add(const ActionMetrics &other)
Definition XrdClActionMetrics.hh:208
std::map< std::string, uint64_t > ios
Definition XrdClActionMetrics.hh:336
size_t getBytesRead() const
Definition XrdClActionMetrics.hh:174
std::mutex mtx
Definition XrdClActionMetrics.hh:338
void addIos(const std::string &action, const std::string &field, double value)
Definition XrdClActionMetrics.hh:197
size_t errors
Definition XrdClActionMetrics.hh:302
ActionMetrics()
Definition XrdClActionMetrics.hh:48
std::map< std::string, double > delays
Definition XrdClActionMetrics.hh:337
std::string fname
Definition XrdClActionMetrics.hh:299
size_t getBytesWritten() const
Definition XrdClActionMetrics.hh:182
void addDelays(const std::string &action, const std::string &field, double value)
Definition XrdClActionMetrics.hh:190
double synchronicity
Definition XrdClActionMetrics.hh:301
std::string Dump(bool json) const
Definition XrdClActionMetrics.hh:82
size_t getIopsWrite() const
Definition XrdClActionMetrics.hh:166
size_t getIopsRead() const
Definition XrdClActionMetrics.hh:158
static std::string humanreadable(uint64_t insize)
Definition XrdClActionMetrics.hh:237