35 TProofMonSenderSQL::TProofMonSenderSQL(
const char *serv,
const char *user,
36 const char *pass,
const char *table,
37 const char *dstab,
const char *filestab)
38 : TProofMonSender(serv,
"ProofMonSenderSQL"),
39 fDSetSendOpts(
"bulk,table=proofquerydsets"),
40 fFilesSendOpts(
"bulk,table=proofqueryfiles")
44 TPluginHandler *h = 0;
45 if ((h = gROOT->GetPluginManager()->FindHandler(
"TVirtualMonitoringWriter",
"SQL"))) {
46 if (h->LoadPlugin() != -1) {
47 fWriter = (TVirtualMonitoringWriter *) h->ExecPlugin(4, serv, user, pass, table);
48 if (fWriter && fWriter->IsZombie()) SafeDelete(fWriter);
52 if (fWriter) ResetBit(TObject::kInvalidObject);
55 SetBit(TProofMonSender::kSendSummary);
56 SetBit(TProofMonSender::kSendDataSetInfo);
57 SetBit(TProofMonSender::kSendFileInfo);
63 PDB(kMonitoring,1) if (fWriter) fWriter->Verbose(kTRUE);
66 if (dstab && strlen(dstab) > 0) fDSetSendOpts.Form("bulk,table=%s", dstab);
67 if (filestab && strlen(filestab) > 0) fFilesSendOpts.Form("bulk,table=%s", filestab);
73 TProofMonSenderSQL::~TProofMonSenderSQL()
135 Int_t TProofMonSenderSQL::SendSummary(TList *recs,
const char *dumid)
159 Error(
"SendSummary",
"invalid instance: do nothing!");
164 if (!TestBit(TProofMonSender::kSendSummary))
return 0;
166 PDB(kMonitoring,1) Info("SendSummary", "preparing (qid: '%s')", dumid);
169 if (!recs || (recs && recs->GetSize() <= 0)) {
170 Error(
"SendSummary",
"records list undefined or empty!");
178 if (fSummaryVrs > 1) {
179 if ((nm = (TNamed *) recs->FindObject(
"user"))) nm->SetName(
"proofuser");
180 if ((nm = (TNamed *) recs->FindObject(
"begin"))) nm->SetName(
"querybegin");
181 if ((nm = (TNamed *) recs->FindObject(
"end"))) nm->SetName(
"queryend");
182 if ((dsn = recs->FindObject(
"dataset"))) recs->Remove(dsn);
183 }
else if (fSummaryVrs == 0) {
186 xrecs->SetOwner(kFALSE);
189 while ((o = nxr())) {
190 if (!strcmp(o->GetName(),
"vmemmxw"))
break;
195 PDB(kMonitoring,1) Info("SendSummary", "sending (%d entries)", xrecs->GetSize());
198 Bool_t rc = fWriter->SendParameters(xrecs, dumid);
201 if (fSummaryVrs > 1 && dsn && xrecs == recs) {
202 TObject *num = recs->FindObject(
"numfiles");
204 recs->AddBefore(num, dsn);
208 if (xrecs != recs) SafeDelete(xrecs);
211 return (rc ? 0 : -1);
253 Int_t TProofMonSenderSQL::SendDataSetInfo(TDSet *dset, TList *missing,
254 const char *begin,
const char *qid)
257 Error(
"SendDataSetInfo",
"invalid instance: do nothing!");
262 if (!TestBit(TProofMonSender::kSendDataSetInfo))
return 0;
265 if (!qid || (qid && strlen(qid) <= 0)) {
266 Error(
"SendDataSetInfo",
"query id (tag) undefined!");
271 Error(
"SendDataSetInfo",
"TDSet object undefined! (qid: '%s')", qid);
275 PDB(kMonitoring,1) Info("SendDataSetInfo", "preparing (qid: '%s')", qid);
279 TString dss(dset->GetName()), ds;
281 while ((dss.Tokenize(ds, from , "[,| ]"))) {
283 plets.Add(
new TDSetPlet(ds.Data(), dset));
290 TDSetElement *e = 0, *ee = 0;
292 TIter nxe(dset->GetListOfElements());
294 while ((o = nxe())) {
295 if ((e = dynamic_cast<TDSetElement *>(o))) {
296 dse = e->GetDataSet();
299 while ((plet = (TDSetPlet *) nxpl())) {
300 if (dse == plet->GetName()) {
306 }
else if ((dsete = dynamic_cast<TDSet *>(o))) {
308 Info("SendDataSetInfo", "dset '%s' (%d files)",
309 o->GetName(), dsete->GetListOfElements()->GetSize());
310 TIter nxee(dsete->GetListOfElements());
311 while ((ee = (TDSetElement *) nxee())) {
312 dse = ee->GetDataSet();
315 while ((plet = (TDSetPlet *) nxpl())) {
316 if (dse == plet->GetName()) {
325 Warning(
"SendDataSetInfo",
"ignoring unknown element type: '%s'", o->ClassName());
334 while ((fi = (TFileInfo *) nxm())) {
335 dsfi = fi->GetTitle();
336 if (!dsfi.IsNull() && dsfi !=
"TFileInfo") {
338 while ((plet = (TDSetPlet *) nxpl())) {
339 if (dsfi == plet->GetName()) {
340 fn = fi->GetCurrentUrl()->GetUrl();
341 if (plet->fDSet && plet->fDSet->GetListOfElements() &&
342 !(plet->fDSet->GetListOfElements()->FindObject(fn))) plet->fFiles += 1;
353 TString ent(
"dsn,querytag,querybegin,numfiles,missfiles");
354 if (fDataSetInfoVrs == 0) ent =
"dsn,querytag,numfiles,missfiles";
355 values.Add(
new TObjString(ent.Data()));
357 while ((plet = (TDSetPlet *) nxpl())) {
358 if (fDataSetInfoVrs == 0)
359 ent.Form(
"'%s','%s',%d,%d", plet->GetName(), qid, plet->fFiles, plet->fMissing);
361 ent.Form(
"'%s','%s','%s',%d,%d", plet->GetName(), qid, begin, plet->fFiles, plet->fMissing);
362 values.Add(
new TObjString(ent.Data()));
366 Info("SendDataSetInfo", "sending (%d entries)", values.GetSize());
369 Bool_t rc = fWriter->SendParameters(&values, fDSetSendOpts);
372 return (rc ? 0 : -1);
414 Int_t TProofMonSenderSQL::SendFileInfo(TDSet *dset, TList *missing,
415 const
char *begin, const
char *qid)
418 Error(
"SendFileInfo",
"invalid instance: do nothing!");
423 if (!TestBit(TProofMonSender::kSendFileInfo))
return 0;
426 if (!qid || (qid && strlen(qid) <= 0)) {
427 Error(
"SendFileInfo",
"query id (tag) undefined!");
432 Error(
"SendFileInfo",
"TDSet object undefined! (qid: '%s')", qid);
436 PDB(kMonitoring,1) Info("SendFileInfo", "preparing (qid: '%s')", qid);
441 while ((fi = (TFileInfo *)nxfm())) {
442 hmiss.Add(
new TObjString(fi->GetCurrentUrl()->GetUrl()));
444 PDB(kMonitoring,2) hmiss.Print();
448 TString ent("lfn,path,querytag,querybegin,status");
449 if (fFileInfoVrs == 0) ent = "lfn,path,querytag,status";
450 values.Add(new TObjString(ent.Data()));
454 TDSetElement *e = 0, *ee = 0;
456 TIter nxe(dset->GetListOfElements());
458 while ((o = nxe())) {
459 if ((e = dynamic_cast<TDSetElement *>(o))) {
463 if (hmiss.FindObject(fne)) status =
"Failed";
464 if (fFileInfoVrs == 0)
465 ent.Form(
"'%s','%s','%s','%s'", gSystem->BaseName(fne), gSystem->DirName(fne),
468 ent.Form(
"'%s','%s','%s','%s','%s'", gSystem->BaseName(fne), gSystem->DirName(fne),
469 qid, begin, status.Data());
470 values.Add(
new TObjString(ent.Data()));
471 }
else if ((dsete = dynamic_cast<TDSet *>(o))) {
473 Info("SendFileInfo", "dset '%s' (%d files)",
474 o->GetName(), dsete->GetListOfElements()->GetSize());
475 TIter nxee(dsete->GetListOfElements());
476 while ((ee = (TDSetElement *) nxee())) {
480 if (hmiss.FindObject(fne)) status =
"Failed";
481 if (fFileInfoVrs == 0)
482 ent.Form(
"'%s','%s','%s','%s'", gSystem->BaseName(fne), gSystem->DirName(fne),
485 ent.Form(
"'%s','%s','%s','%s','%s'", gSystem->BaseName(fne), gSystem->DirName(fne),
486 qid, begin, status.Data());
487 values.Add(
new TObjString(ent.Data()));
490 Warning(
"SendFileInfo",
"ignoring unknown element type: '%s'", o->ClassName());
494 PDB(kMonitoring,1) Info("SendFileInfo", "sending (%d entries)", values.GetSize());
497 Bool_t rc = fWriter->SendParameters(&values, fFilesSendOpts);
500 return (rc ? 0 : -1);