44extern XrdSysError
Log;
52XrdMonitor::RegInfo* XrdMonitor::FindSet(
const char* setName,
int sType)
54 for (
auto it = regVec.begin(); it != regVec.end(); it++)
55 if ((*it)->setType & sType && !std::strcmp((*it)->setName, setName))
68 if (item < 0 || item >= (
int)regVec.size())
return 0;
72 while((regVec[item]->setType &
opts) == 0)
74 if (item >= (
int)regVec.size())
return 0;
79 if (
opts &
F_JSON) bsize = FormJSON(*regVec[item], buff, bsize);
80 else bsize = FormXML (*regVec[item], buff, bsize);
91 RegInfo* regInfo = FindSet(setName,
opts);
92 if (!regInfo)
return 0;
93 if (
opts &
F_JSON) bsize = FormJSON(*regInfo, buff, bsize);
94 else bsize = FormXML (*regInfo, buff, bsize);
102#define Updt(x) if (x >= bsize) return 0; bsize -= x; buff += x; bLen += x
104int XrdMonitor::FormJSON(XrdMonitor::RegInfo& regInfo,
char* buff,
int bsize)
111 n = snprintf(buff, bsize,
"%s", regInfo.Json.hdr);
116 for (
int i = 0; i < (int)regInfo.Json.key.size(); i++)
117 {kVal = *regInfo.keyVal[i];
118 n = snprintf(buff, bsize,
"%s%u", regInfo.Json.key[i], kVal);
124 n = snprintf(buff, bsize,
"}");
133int XrdMonitor::FormXML(XrdMonitor::RegInfo& regInfo,
char* buff,
int bsize)
140 n = snprintf(buff, bsize,
"%s", regInfo.Xml.hdr);
145 for (
int i = 0; i < (int)regInfo.Xml.keyBeg.size(); i++)
146 {kVal = *regInfo.keyVal[i];
147 n = snprintf(buff, bsize,
"%s%u%s", regInfo.Xml.keyBeg[i], kVal,
148 regInfo.Xml.keyEnd[i]);
154 n = snprintf(buff, bsize,
"%s",
"</stats>");
170 if (FindSet(setName,-1))
return false;
174 for(
int i = 0; setVec[i].
varName; i++) numE++;
175 if (!numE)
return true;
185 default: sType = isPlug;
break;
190 RegInfo* regInfo =
new RegInfo(setName, sType);
191 regInfo->Json.key.reserve(numE);
192 regInfo->Xml.keyBeg.reserve(numE);
193 regInfo->Xml.keyEnd.reserve(numE);
198 for(
int i = 0;i < numE; i++)
199 {snprintf(buff,
sizeof(buff),
",\"%s\":", setVec[i].varName);
200 regInfo->Json.key.push_back(strdup(buff));
201 snprintf(buff,
sizeof(buff),
"<%s>", setVec[i].varName);
202 regInfo->Xml.keyBeg.push_back(strdup(buff));
203 snprintf(buff,
sizeof(buff),
"</%s>", setVec[i].varName);
204 regInfo->Xml.keyEnd.push_back(strdup(buff));
205 regInfo->keyVal[i] = &setVec[i].
varValu;
207 regInfo->Json.key[0]++;
211 snprintf(buff,
sizeof(buff),
"\"stats_%s\":{", setName);
212 regInfo->Json.hdr = strdup(buff);
213 snprintf(buff,
sizeof(buff),
"<stats id=\"%s\">", setName);
214 regInfo->Xml.hdr = strdup(buff);
218 regVec.push_back(regInfo);
223 snprintf(etxt,
sizeof(etxt),
"%s set %s registered with %d variable(s)",
225 Log.Say(
"Config monitor: ", etxt);
XrdSys::RAtomic< unsigned int > RAtomic_uint
int Format(char *buff, int bsize, int &item, int opts=0)
bool Register(XrdMonRoll::rollType setType, const char *setName, XrdMonRoll::setMember setVec[])