2 #include "XrdVersion.hh"
11 if (mask == LogMask::All) {
return "all";}
13 bool has_entry =
false;
20 ss << (has_entry ?
", " :
"") <<
"info";
24 ss << (has_entry ?
", " :
"") <<
"warning";
28 ss << (has_entry ?
", " :
"") <<
"error";
40 if (duration.empty()) {
41 errmsg =
"cannot parse empty string as a time duration";
44 if (duration ==
"0") {
45 result = std::chrono::steady_clock::duration(0);
48 std::chrono::steady_clock::duration dur(0);
49 auto strValue = duration;
50 while (!strValue.empty()) {
54 value = std::stod(strValue, &pos);
55 }
catch (std::invalid_argument
const &exc) {
56 errmsg =
"Invalid number provided as timeout: " + strValue;
58 }
catch (std::out_of_range
const &exc) {
59 errmsg =
"Provided timeout out of representable range: " + std::string(exc.what());
63 errmsg =
"Provided timeout was negative";
66 strValue = strValue.substr(pos);
67 char unit[3] = {
'\0',
'\0',
'\0'};
68 if (!strValue.empty()) {
69 unit[0] = strValue[0];
70 if (unit[0] >=
'0' && unit[0] <=
'9') {unit[0] =
'\0';}
72 if (strValue.size() > 1) {
73 unit[1] = strValue[1];
74 if (unit[1] >=
'0' && unit[1] <=
'9') {unit[1] =
'\0';}
76 if (!strncmp(unit,
"ns", 2)) {
77 dur += std::chrono::duration_cast<typeof(dur)>(std::chrono::duration<double, std::nano>(value));
78 }
else if (!strncmp(unit,
"us", 2)) {
79 dur += std::chrono::duration_cast<typeof(dur)>(std::chrono::duration<double, std::micro>(value));
80 }
else if (!strncmp(unit,
"ms", 2)) {
81 dur += std::chrono::duration_cast<typeof(dur)>(std::chrono::duration<double, std::milli>(value));
82 }
else if (!strncmp(unit,
"s", 1)) {
83 dur += std::chrono::duration_cast<typeof(dur)>(std::chrono::duration<double>(value));
84 }
else if (!strncmp(unit,
"m", 1)) {
85 dur += std::chrono::duration_cast<typeof(dur)>(std::chrono::duration<
double, std::ratio<60>>(value));
86 }
else if (!strncmp(unit,
"h", 1)) {
87 dur += std::chrono::duration_cast<typeof(dur)>(std::chrono::duration<
double, std::ratio<3600>>(value));
88 }
else if (strlen(unit) > 0) {
89 errmsg =
"Unknown unit in duration: " + std::string(unit);
92 errmsg =
"Unit missing from duration: " + duration;
95 strValue = strValue.substr(strlen(unit));
109 const char *config_fn,
120 if (!new_oss->InitSuccessful(errMsg)) {
121 if (errMsg.empty()) {
124 log.
Emsg(
"Initialize",
"Encountered a fatal XrdOssStats initialization failure:", errMsg.c_str());
128 return new_oss.release();
XrdOss * XrdOssAddStorageSystem2(XrdOss *curr_oss, XrdSysLogger *logger, const char *config_fn, const char *parms, XrdOucEnv *envP)
XrdVERSIONINFO(XrdOssAddStorageSystem2, fsstats)
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
bool ParseDuration(const std::string &duration, std::chrono::steady_clock::duration &result, std::string &errmsg)
std::string LogMaskToString(int mask)