36 TProofMonSenderML::TProofMonSenderML(
const char *serv,
const char *tag,
37 const char *
id,
const char *subid,
39 : TProofMonSender(serv,
"ProofMonSenderML")
43 TPluginHandler *h = 0;
44 if ((h = gROOT->GetPluginManager()->FindHandler(
"TVirtualMonitoringWriter",
"MonaLisa"))) {
45 if (h->LoadPlugin() != -1) {
46 fWriter = (TVirtualMonitoringWriter *) h->ExecPlugin(5, serv, tag,
id, subid, opt);
47 if (fWriter && fWriter->IsZombie()) SafeDelete(fWriter);
51 if (fWriter) ResetBit(TObject::kInvalidObject);
54 SetBit(TProofMonSender::kSendSummary);
55 ResetBit(TProofMonSender::kSendDataSetInfo);
56 ResetBit(TProofMonSender::kSendFileInfo);
62 PDB(kMonitoring,1) if (fWriter) fWriter->Verbose(kTRUE);
68 TProofMonSenderML::~TProofMonSenderML()
138 Int_t TProofMonSenderML::SendSummary(TList *recs,
const char *
id)
141 Error(
"SendSummary",
"invalid instance: do nothing!");
146 if (!TestBit(TProofMonSender::kSendSummary))
return 0;
149 if (!recs || (recs && recs->GetSize() <= 0)) {
150 Error(
"SendSummary",
"records list undefined or empty!");
155 PDB(kMonitoring,1) Info("SendSummary", "preparing (qid: '%s')",
id);
158 TObject *qtag = recs->FindObject("querytag");
159 if (qtag) recs->Remove(qtag);
163 if (fSummaryVrs > 1) {
164 if ((dsn = recs->FindObject(
"dataset"))) recs->Remove(dsn);
165 }
else if (fSummaryVrs == 0) {
168 xrecs->SetOwner(kFALSE);
171 while ((o = nxr())) {
172 if (!strcmp(o->GetName(),
"vmemmxw"))
break;
178 Info("SendSummary", "sending (%d entries)", xrecs->GetSize());
181 Bool_t rc = fWriter->SendParameters(xrecs,
id);
184 if (fSummaryVrs > 1 && dsn && xrecs == recs) {
185 TObject *num = recs->FindObject(
"numfiles");
187 recs->AddBefore(num, dsn);
193 TObject *wrks = recs->FindObject(
"workers");
195 recs->AddAfter(wrks, qtag);
199 if (xrecs != recs) SafeDelete(xrecs);
202 return (rc ? 0 : -1);
236 Int_t TProofMonSenderML::SendDataSetInfo(TDSet *dset, TList *missing,
237 const char *begin,
const char *qid)
240 Error(
"SendDataSetInfo",
"invalid instance: do nothing!");
245 if (!TestBit(TProofMonSender::kSendDataSetInfo))
return 0;
248 if (!qid || (qid && strlen(qid) <= 0)) {
249 Error(
"SendDataSetInfo",
"query id (tag) undefined!");
254 Error(
"SendDataSetInfo",
"TDSet object undefined! (qid: '%s')", qid);
259 Info("SendDataSetInfo", "preparing (qid: '%s')", qid);
263 TString dss(dset->GetName()), ds;
265 while ((dss.Tokenize(ds, from , "[,| ]"))) {
267 plets.Add(
new TDSetPlet(ds.Data()));
273 TDSetElement *e = 0, *ee = 0;
275 TIter nxe(dset->GetListOfElements());
277 while ((o = nxe())) {
278 if ((e = dynamic_cast<TDSetElement *>(o))) {
279 dse = e->GetDataSet();
282 while ((plet = (TDSetPlet *) nxpl())) {
283 if (dse == plet->GetName()) {
289 }
else if ((dsete = dynamic_cast<TDSet *>(o))) {
291 Info("SendDataSetInfo", "dset '%s' (%d files)",
292 o->GetName(), dsete->GetListOfElements()->GetSize());
293 TIter nxee(dsete->GetListOfElements());
294 while ((ee = (TDSetElement *) nxee())) {
295 dse = ee->GetDataSet();
298 while ((plet = (TDSetPlet *) nxpl())) {
299 if (dse == plet->GetName()) {
308 Warning(
"SendDataSetInfo",
"ignoring unknown element type: '%s'", o->ClassName());
317 while ((fi = (TFileInfo *) nxm())) {
318 dsfi = fi->GetTitle();
319 if (!dsfi.IsNull() && dsfi !=
"TFileInfo") {
321 while ((plet = (TDSetPlet *) nxpl())) {
322 if (dsfi == plet->GetName()) {
323 fn = fi->GetCurrentUrl()->GetUrl();
324 if (plet->fDSet && plet->fDSet->GetListOfElements() &&
325 !(plet->fDSet->GetListOfElements()->FindObject(fn))) plet->fFiles += 1;
336 TNamed *nm_dsn =
new TNamed(
"dsn",
"");
338 TNamed *nm_querytag =
new TNamed(
"querytag", qid);
339 values.Add(nm_querytag);
340 TNamed *nm_begin = 0;
341 if (fDataSetInfoVrs > 0) {
342 nm_begin =
new TNamed(
"begin", begin);
343 values.Add(nm_begin);
345 TParameter<Int_t> *pi_numfiles =
new TParameter<Int_t>(
"numfiles", -1);
346 values.Add(pi_numfiles);
347 TParameter<Int_t> *pi_missfiles =
new TParameter<Int_t>(
"missfiles", -1);
348 values.Add(pi_missfiles);
351 Info("SendDataSetInfo", "sending (%d entries)", plets.GetSize());
356 while ((plet = (TDSetPlet *) nxpl())) {
357 nm_dsn->SetTitle(plet->GetName());
358 pi_numfiles->SetVal(plet->fFiles);
359 pi_missfiles->SetVal(plet->fMissing);
360 dsnh.Form(
"dataset_%x", TString(plet->GetName()).Hash());
361 if (!(rc = fWriter->SendParameters(&values, dsnh.Data())))
break;
365 return (rc ? 0 : -1);
399 Int_t TProofMonSenderML::SendFileInfo(TDSet *dset, TList *missing,
400 const char *begin,
const char *qid)
403 Error(
"SendFileInfo",
"invalid instance: do nothing!");
408 if (!TestBit(TProofMonSender::kSendFileInfo))
return 0;
411 if (!qid || (qid && strlen(qid) <= 0)) {
412 Error(
"SendFileInfo",
"query id (tag) undefined!");
417 Error(
"SendFileInfo",
"TDSet object undefined! (qid: '%s')", qid);
421 PDB(kMonitoring,1) Info("SendFileInfo", "preparing (qid: '%s')", qid);
427 while ((fi = (TFileInfo *)nxfm())) {
428 hmiss.Add(
new TObjString(fi->GetCurrentUrl()->GetUrl()));
435 TNamed *nm_lnf =
new TNamed(
"lnf",
"");
437 TNamed *nm_path =
new TNamed(
"path",
"");
439 TNamed *nm_querytag =
new TNamed(
"querytag", qid);
440 values.Add(nm_querytag);
441 TNamed *nm_begin = 0;
442 if (fFileInfoVrs > 0) {
443 nm_begin =
new TNamed(
"begin", begin);
444 values.Add(nm_begin);
446 TParameter<Int_t> *pi_status =
new TParameter<Int_t>(
"status", -1);
447 values.Add(pi_status);
450 Info("SendFileInfo", "sending (%d entries)",
451 dset->GetListOfElements()->GetSize());
456 TDSetElement *e = 0, *ee = 0;
458 TIter nxe(dset->GetListOfElements());
461 while ((o = nxe())) {
462 if ((e = dynamic_cast<TDSetElement *>(o))) {
466 if (hmiss.FindObject(fne)) status = 0;
468 nm_lnf->SetTitle(gSystem->BaseName(fne));
469 nm_path->SetTitle(gSystem->DirName(fne));
470 pi_status->SetVal(status);
471 fneh.Form(
"file_%x", TString(TUrl(fne.Data()).GetFile()).Hash());
472 if (!(rc = fWriter->SendParameters(&values, fneh.Data())))
break;
473 }
else if ((dsete = dynamic_cast<TDSet *>(o))) {
475 Info("SendFileInfo", "dset '%s' (%d files)",
476 o->GetName(), dsete->GetListOfElements()->GetSize());
477 TIter nxee(dsete->GetListOfElements());
478 while ((ee = (TDSetElement *) nxee())) {
482 if (hmiss.FindObject(fne)) status = 0;
484 nm_lnf->SetTitle(gSystem->BaseName(fne));
485 nm_path->SetTitle(gSystem->DirName(fne));
486 pi_status->SetVal(status);
487 fneh.Form(
"file_%x", TString(TUrl(fne.Data()).GetFile()).Hash());
488 if (!(rc = fWriter->SendParameters(&values, fneh.Data())))
break;
491 Warning(
"SendFileInfo",
"ignoring unknown element type: '%s'", o->ClassName());
496 return (rc ? 0 : -1);