60 ClassImp(TMonaLisaWriter);
64 class MonitoredTFileInfo:
public TObject {
68 MonitoredTFileInfo(TFile *file, Double_t timenow): TObject(), fileinst(file) {
69 if (file->InheritsFrom(
"TXNetFile"))
70 fFileClassName =
"TXNetFile";
72 fFileClassName = file->ClassName();
75 fLastBytesWritten = 0;
78 fTempWrittenBytes = 0;
80 fLastResetTime = timenow;
81 fCreationTime = timenow;
86 Double_t fCreationTime;
88 TString fFileClassName;
90 Long64_t fLastBytesRead;
91 Long64_t fTempReadBytes;
92 Long64_t fLastBytesWritten;
93 Long64_t fTempWrittenBytes;
95 Double_t fLastResetTime;
99 void GetThroughputs(Long64_t &readthr, Long64_t &writethr, Double_t timenow, Double_t prectime) {
102 Double_t t = std::min(prectime, fLastResetTime);
104 Int_t mselapsed = std::round(std::floor(((timenow - t) * 1000)));
105 mselapsed = std::max(mselapsed, 1);
107 readthr = fTempReadBytes / mselapsed * 1000;
108 writethr = fTempWrittenBytes / mselapsed * 1000;
111 void UpdateFileStatus(TFile *file) {
112 fTempReadBytes = file->GetBytesRead() - fLastBytesRead;
113 fTempWrittenBytes = file->GetBytesWritten() - fLastBytesWritten;
116 void ResetFileStatus(TFile *file, Double_t timenow) {
118 fLastBytesRead = file->GetBytesRead();
119 fLastBytesWritten = file->GetBytesWritten();
121 fTempWrittenBytes = 0;
122 fLastResetTime = timenow;
125 void ResetFileStatus(Double_t timenow) {
127 ResetFileStatus(fileinst, timenow);
136 class MonitoredTFileSummary:
public TNamed {
138 MonitoredTFileSummary(TString &fileclassname): TNamed(fileclassname, fileclassname) {
142 fWriteThroughput = 0;
146 Long64_t fBytesWritten;
147 Long64_t fReadThroughput;
148 Long64_t fWriteThroughput;
150 void Update(MonitoredTFileInfo *mi, Double_t timenow, Double_t prectime) {
152 mi->GetThroughputs(rth, wth, timenow, prectime);
154 fBytesRead += mi->fTempReadBytes;
155 fBytesWritten += mi->fTempWrittenBytes;
157 if (rth > 0) fReadThroughput += rth;
158 if (wth > 0) fWriteThroughput += wth;
168 TMonaLisaWriter::TMonaLisaWriter(
const char *monserver,
const char *montag,
169 const char *monid,
const char *monsubid,
172 fMonInfoRepo =
new std::map<UInt_t, MonitoredTFileInfo *>;
174 Init(monserver, montag, monid, monsubid, option);
270 void TMonaLisaWriter::Init(
const char *monserver,
const char *montag,
const char *monid,
271 const char *monsubid,
const char *option)
278 fFileStopwatch.Start(kTRUE);
279 fLastRWSendTime = fFileStopwatch.RealTime();
280 fLastFCloseSendTime = fFileStopwatch.RealTime();
281 fLastProgressTime = time(0);
282 fFileStopwatch.Continue();
284 fReportInterval = 120;
285 if (gSystem->Getenv(
"APMON_INTERVAL")) {
286 fReportInterval = atoi(gSystem->Getenv(
"APMON_INTERVAL"));
287 if (fReportInterval < 1)
289 Info(
"TMonaLisaWriter",
"Setting APMON Report Interval to %d seconds",fReportInterval);
292 char *apmon_config[1] =
293 { ((monserver == 0) ? (
char *) gSystem->Getenv(
"APMON_CONFIG") : (
char *) monserver) };
294 if (apmon_config[0] == 0) {
295 Error(
"TMonaLisaWriter",
296 "Disabling apmon monitoring since env variable APMON_CONFIG was not found and the monitoring server is not specified in the constructor!");
297 fInitialized = kFALSE;
302 fApmon =
new ApMon(1, apmon_config);
303 fApmon->setConfRecheck(
false);
304 fApmon->setJobMonitoring(
false);
307 }
catch (runtime_error &e) {
308 Error(
"TMonaLisaWriter",
"Error initializing ApMon: %s", e.what());
309 Error(
"TMonaLisaWriter",
"Disabling apmon.");
310 fInitialized = kFALSE;
314 TString clustername=
"ROOT_";
317 if (gSystem->Getenv(
"PROOF_SITE")) {
318 clustername+=(gSystem->Getenv(
"PROOF_SITE"));
319 }
else if (gSystem->Getenv(
"GRID_SITE")) {
320 clustername+=(gSystem->Getenv(
"GRID_SITE"));
321 }
else if (gSystem->Getenv(
"LCG_SITE")) {
322 clustername+=(gSystem->Getenv(
"LCG_SITE"));
323 }
else if (gSystem->Getenv(
"ALIEN_SITE")) {
324 clustername+=(gSystem->Getenv(
"ALIEN_SITE"));
326 clustername += TString(
"none");
328 SetName(clustername);
329 SetTitle(clustername);
331 SetName(clustername+TString(montag));
332 SetTitle(clustername+TString(montag));
335 fHostname = gSystem->HostName();
336 fPid = gSystem->GetPid();
339 if (gSystem->Getenv(
"PROOF_QUERY_ID"))
340 fJobId = gSystem->Getenv(
"PROOF_QUERY_ID");
341 else if (gSystem->Getenv(
"GRID_JOB_ID"))
342 fJobId = gSystem->Getenv(
"GRID_JOB_ID");
343 else if (gSystem->Getenv(
"LCG_JOB_ID"))
344 fJobId = gSystem->Getenv(
"LCG_JOB_ID");
345 else if (gSystem->Getenv(
"ALIEN_MASTERJOBID"))
346 fJobId = gSystem->Getenv(
"ALIEN_MASTERJOBID");
347 else if (gSystem->Getenv(
"ALIEN_PROC_ID"))
348 fJobId = gSystem->Getenv(
"ALIEN_PROC_ID");
350 fJobId =
"-no-job-id";
356 if (gSystem->Getenv(
"PROOF_PROC_ID")) {
357 fSubJobId = gSystem->Getenv(
"PROOF_PROC_ID");
358 }
else if (gSystem->Getenv(
"ALIEN_PROC_ID")) {
359 fSubJobId = gSystem->Getenv(
"ALIEN_PROC_ID");
364 fSubJobId = monsubid;
369 Info(
"Initialized for ML Server <%s> - Setting ClusterID <%s> JobID <%s> SubID <%s>\n",
370 apmon_config[0], fName.Data() ,fJobId.Data(),fSubJobId.Data());
372 fInitialized = kTRUE;
374 TString optionStr(option);
375 if (optionStr.Contains(
"global"))
376 gMonitoringWriter =
this;
382 TMonaLisaWriter::~TMonaLisaWriter()
386 std::map<UInt_t, MonitoredTFileInfo *>::iterator iter = fMonInfoRepo->begin();
387 while (iter != fMonInfoRepo->end()) {
392 fMonInfoRepo->clear();
397 if (gMonitoringWriter ==
this)
398 gMonitoringWriter = 0;
407 Bool_t TMonaLisaWriter::SendInfoStatus(
const char *status)
410 Error(
"SendInfoStatus",
"Monitoring is not properly initialized!");
414 Bool_t success = kFALSE;
416 TList *valuelist =
new TList();
417 valuelist->SetOwner(kTRUE);
420 TMonaLisaText *valtext =
new TMonaLisaText(
"status", status);
421 valuelist->Add(valtext);
424 success = SendParameters(valuelist);
434 Bool_t TMonaLisaWriter::SendInfoUser(
const char *user)
437 Error(
"TMonaLisaWriter",
438 "Monitoring initialization has failed - you can't send to MonaLisa!");
442 Bool_t success = kFALSE;
444 TList *valuelist =
new TList();
445 valuelist->SetOwner(kTRUE);
447 const char *localuser;
452 localuser = gGrid->GetUser();
454 localuser =
"unknown";
459 TMonaLisaText *valtext =
new TMonaLisaText(
"user", localuser);
460 valuelist->Add(valtext);
463 success = SendParameters(valuelist);
473 Bool_t TMonaLisaWriter::SendInfoDescription(
const char *jobtag)
476 Error(
"SendInfoDescription",
477 "Monitoring is not properly initialized!");
481 Bool_t success = kFALSE;
483 TList *valuelist =
new TList();
484 valuelist->SetOwner(kTRUE);
487 TMonaLisaText *valtext =
new TMonaLisaText(
"jobname", jobtag);
488 valuelist->Add(valtext);
491 success = SendParameters(valuelist);
501 Bool_t TMonaLisaWriter::SendInfoTime()
504 Error(
"SendInfoTime",
"Monitoring is not properly initialized!");
508 Bool_t success = kFALSE;
510 TList *valuelist =
new TList();
511 valuelist->SetOwner(kTRUE);
513 TString valtime = (Int_t) time(0);
516 TMonaLisaText *valtext =
new TMonaLisaText(
"time", valtime);
517 valuelist->Add(valtext);
520 success = SendParameters(valuelist);
534 Bool_t TMonaLisaWriter::SendProcessingStatus(
const char *status, Bool_t restarttimer)
537 fStopwatch.Start(kTRUE);
541 Error(
"TMonaLisaWriter",
542 "Monitoring initialization has failed - you can't send to MonaLisa!");
546 Bool_t success = kFALSE;
548 TList *valuelist =
new TList();
549 valuelist->SetOwner(kTRUE);
552 TMonaLisaText *valtext =
new TMonaLisaText(
"status", status);
553 valuelist->Add(valtext);
555 TMonaLisaText *valhost =
new TMonaLisaText(
"hostname",fHostname);
556 valuelist->Add(valhost);
558 TMonaLisaText *valsid =
new TMonaLisaText(
"subid", fSubJobId.Data());
559 valuelist->Add(valsid);
562 success = SendParameters(valuelist);
571 Bool_t TMonaLisaWriter::SendProcessingProgress(Double_t nevent, Double_t nbytes, Bool_t force)
573 if (!force && (time(0)-fLastProgressTime) < fReportInterval) {
579 Error(
"SendProcessingProgress",
580 "Monitoring is not properly initialized!");
584 Bool_t success = kFALSE;
586 TList *valuelist =
new TList();
587 valuelist->SetOwner(kTRUE);
590 TMonaLisaValue *valevent =
new TMonaLisaValue(
"events", nevent);
591 TMonaLisaValue *valbyte =
new TMonaLisaValue(
"processedbytes", nbytes);
592 TMonaLisaValue *valrealtime =
new TMonaLisaValue(
"realtime",fStopwatch.RealTime());
593 TMonaLisaValue *valcputime =
new TMonaLisaValue(
"cputime",fStopwatch.CpuTime());
596 gSystem->GetProcInfo(&pinfo);
597 Double_t totmem = (Double_t)(pinfo.fMemVirtual) * 1024.;
598 Double_t rssmem = (Double_t)(pinfo.fMemResident) * 1024.;
599 Double_t shdmem = 0.;
601 TMonaLisaValue *valtotmem =
new TMonaLisaValue(
"totmem",totmem);
602 TMonaLisaValue *valrssmem =
new TMonaLisaValue(
"rssmem",rssmem);
603 TMonaLisaValue *valshdmem =
new TMonaLisaValue(
"shdmem",shdmem);
605 TMonaLisaText *valsid =
new TMonaLisaText(
"subid", fSubJobId.Data());
606 valuelist->Add(valsid);
607 valuelist->Add(valevent);
608 valuelist->Add(valbyte);
609 valuelist->Add(valrealtime);
610 valuelist->Add(valcputime);
611 valuelist->Add(valtotmem);
612 valuelist->Add(valrssmem);
613 valuelist->Add(valshdmem);
615 TString strevents=
"";
620 strcpu += fStopwatch.CpuTime();
622 strreal += fStopwatch.RealTime();
623 TString strtotmem=
"";
625 TString strrssmem=
"";
627 TString strshdmem=
"";
630 fStopwatch.Continue();
632 TMonaLisaText *textevent =
new TMonaLisaText(
"events_str", strevents.Data());
633 TMonaLisaText *textbyte =
new TMonaLisaText(
"processedbytes_str", strbytes.Data());
634 TMonaLisaText *textreal =
new TMonaLisaText(
"realtime_str", strreal.Data());
635 TMonaLisaText *textcpu =
new TMonaLisaText(
"cputime_str", strcpu.Data());
636 TMonaLisaText *texttotmem =
new TMonaLisaText(
"totmem_str", strtotmem.Data());
637 TMonaLisaText *textrssmem =
new TMonaLisaText(
"rssmem_str", strrssmem.Data());
638 TMonaLisaText *textshdmem =
new TMonaLisaText(
"shdmem_str", strshdmem.Data());
639 valuelist->Add(textevent);
640 valuelist->Add(textbyte);
641 valuelist->Add(textcpu);
642 valuelist->Add(textreal);
643 valuelist->Add(texttotmem);
644 valuelist->Add(textrssmem);
645 valuelist->Add(textshdmem);
647 TMonaLisaText *valhost =
new TMonaLisaText(
"hostname",fHostname);
648 valuelist->Add(valhost);
651 success = SendParameters(valuelist);
652 fLastProgressTime = time(0);
667 Bool_t TMonaLisaWriter::SendFileOpenProgress(TFile *file, TList *openphases,
668 const char *openphasename,
672 Error(
"SendFileOpenProgress",
673 "Monitoring is not properly initialized!");
678 if (!fTmpOpenPhases && !openphases) {
679 fTmpOpenPhases =
new TList;
680 fTmpOpenPhases->SetOwner();
683 if (!openphasename) {
685 fTmpOpenPhases->Clear();
690 TParameter<Double_t> *nfo =
new TParameter<Double_t>(openphasename, fFileStopwatch.RealTime());
691 fFileStopwatch.Continue();
694 fTmpOpenPhases->Add(nfo);
697 TIter nxt(fTmpOpenPhases);
698 TParameter<Double_t> *nf = 0;
699 while ((nf = (TParameter<Double_t> *)nxt()))
702 openphases->Add(nfo);
704 if (fTmpOpenPhases) {
705 fTmpOpenPhases->SetOwner(0);
706 fTmpOpenPhases->Clear();
711 if (!forcesend)
return kTRUE;
712 if (!file)
return kTRUE;
714 TList *op = openphases ? openphases : fTmpOpenPhases;
716 Bool_t success = kFALSE;
719 TList *valuelist =
new TList();
720 valuelist->SetOwner(kTRUE);
724 TMonaLisaText *valhost =
new TMonaLisaText(
"hostname",fHostname);
725 valuelist->Add(valhost);
726 TMonaLisaText *valsid =
new TMonaLisaText(
"subid", fSubJobId.Data());
727 valuelist->Add(valsid);
728 TMonaLisaText *valdest =
new TMonaLisaText(
"destname", file->GetEndpointUrl()->GetHost());
729 valuelist->Add(valdest);
731 TMonaLisaValue *valfid =
new TMonaLisaValue(
"fileid", file->GetFileCounter());
732 valuelist->Add(valfid);
733 TString strfid = Form(
"%lld", file->GetFileCounter());
734 TMonaLisaText *valstrfid =
new TMonaLisaText(
"fileid_str", strfid.Data());
735 valuelist->Add(valstrfid);
739 TParameter<Double_t> *nf1 = 0;
740 TParameter<Double_t> *nf0 = (TParameter<Double_t> *)nxt();
741 while ((nf1 = (TParameter<Double_t> *)nxt())) {
742 TString s = Form(
"openphase%d_%s", kk, nf0->GetName());
743 TMonaLisaValue *v =
new TMonaLisaValue(s.Data(), nf1->GetVal() - nf0->GetVal());
751 nf0 = (TParameter<Double_t> *)op->First();
752 nf1 = (TParameter<Double_t> *)op->Last();
753 TMonaLisaValue *valtottime =
754 new TMonaLisaValue(
"total_open_time", nf1->GetVal() - nf0->GetVal());
755 valuelist->Add(valtottime);
758 success = SendParameters(valuelist);
765 Bool_t TMonaLisaWriter::SendFileCloseEvent(TFile *file) {
767 Error(
"SendFileCloseEvent",
768 "Monitoring is not properly initialized!");
772 Bool_t success = kFALSE;
773 Double_t timenow = fFileStopwatch.RealTime();
774 fFileStopwatch.Continue();
776 MonitoredTFileInfo *mi = 0;
777 std::map<UInt_t, MonitoredTFileInfo *>::iterator iter = fMonInfoRepo->find(file->GetUniqueID());
778 if (iter != fMonInfoRepo->end()) mi = iter->second;
780 Double_t timelapsed = 0.0;
781 if (mi) timelapsed = timenow - mi->fCreationTime;
783 TList *valuelist =
new TList();
784 valuelist->SetOwner(kTRUE);
787 TString pfx = file->ClassName();
788 if (file->InheritsFrom(
"TXNetFile"))
795 TMonaLisaText *valdest =
new TMonaLisaText(
"destname",file->GetEndpointUrl()->GetHost());
796 valuelist->Add(valdest);
797 TMonaLisaValue *valfid =
new TMonaLisaValue(
"fileid",file->GetFileCounter());
798 valuelist->Add(valfid);
800 strfid+=file->GetFileCounter();
801 TMonaLisaText *valstrfid =
new TMonaLisaText(
"fileid_str",strfid.Data());
802 valuelist->Add(valstrfid);
805 valname +=
"readbytes";
806 TMonaLisaValue *valread =
new TMonaLisaValue(valname, file->GetBytesRead());
807 valuelist->Add(valread);
815 valname +=
"writtenbytes";
816 TMonaLisaValue *valwrite =
new TMonaLisaValue(valname, file->GetBytesWritten());
817 valuelist->Add(valwrite);
825 if (timelapsed > 0.001) {
826 Int_t selapsed = std::round(std::floor(timelapsed * 1000));
828 thput = file->GetBytesRead() / selapsed * 1000;
830 valname +=
"filethrpt_rd";
831 TMonaLisaValue *valreadthavg =
new TMonaLisaValue(valname, thput);
832 valuelist->Add(valreadthavg);
834 thput = file->GetBytesWritten() / selapsed * 1000;
836 valname +=
"filethrpt_wr";
837 TMonaLisaValue *valwritethavg =
new TMonaLisaValue(valname, thput);
838 valuelist->Add(valwritethavg);
843 mi->UpdateFileStatus(file);
848 success = SendParameters(valuelist);
856 Bool_t TMonaLisaWriter::SendFileReadProgress(TFile *file) {
857 return SendFileCheckpoint(file);
861 Bool_t TMonaLisaWriter::SendFileWriteProgress(TFile *file) {
862 return SendFileCheckpoint(file);
866 Bool_t TMonaLisaWriter::SendFileCheckpoint(TFile *file)
869 Error(
"SendFileCheckpoint",
870 "Monitoring is not properly initialized!");
874 if (!file->IsOpen())
return kTRUE;
882 if (!file->TestBit(kHasUUID))
return kTRUE;
884 Double_t timenow = fFileStopwatch.RealTime();
885 fFileStopwatch.Continue();
891 MonitoredTFileInfo *mi = 0;
892 std::map<UInt_t, MonitoredTFileInfo *>::iterator iter = fMonInfoRepo->find(file->GetUniqueID());
893 if (iter != fMonInfoRepo->end()) mi = iter->second;
896 mi =
new MonitoredTFileInfo(file, timenow);
897 if (mi) fMonInfoRepo->insert( make_pair( file->GetUniqueID(), mi ) );
901 if (mi) mi->UpdateFileStatus(file);
904 if ( timenow - fLastRWSendTime < fReportInterval) {
909 Bool_t success = kFALSE;
911 TList *valuelist =
new TList();
912 valuelist->SetOwner(kTRUE);
919 TMonaLisaText *valhost =
new TMonaLisaText(
"hostname",fHostname);
920 valuelist->Add(valhost);
921 TMonaLisaText *valsid =
new TMonaLisaText(
"subid", fSubJobId.Data());
922 valuelist->Add(valsid);
926 summary.SetOwner(kTRUE);
928 iter = fMonInfoRepo->begin();
929 if (iter != fMonInfoRepo->end()) mi = iter->second;
933 MonitoredTFileSummary *sum =
static_cast<MonitoredTFileSummary *
>(summary.FindObject(mi->fFileClassName));
935 sum =
new MonitoredTFileSummary(mi->fFileClassName);
936 if (sum) summary.AddLast(sum);
940 sum->Update(mi, timenow, fLastRWSendTime);
941 mi->ResetFileStatus(timenow);
950 if (iter != fMonInfoRepo->end())
956 for (iter = fMonInfoRepo->begin(); iter != fMonInfoRepo->end(); )
959 iter = fMonInfoRepo->erase(iter);
967 TIter nxt2(&summary);
968 MonitoredTFileSummary *sum;
969 while ((sum = (MonitoredTFileSummary *)nxt2())) {
971 if (sum->fReadThroughput >= 0) {
972 valname = sum->GetName();
973 valname +=
"_avgthrpt_rd";
974 TMonaLisaValue *valreadthr =
new TMonaLisaValue(valname, sum->fReadThroughput);
975 valuelist->Add(valreadthr);
978 if ( sum->fWriteThroughput >= 0 ) {
979 valname = sum->GetName();
980 valname +=
"_avgthrpt_wr";
981 TMonaLisaValue *valwritethr =
new TMonaLisaValue(valname, sum->fWriteThroughput);
982 valuelist->Add(valwritethr);
989 success = SendParameters(valuelist);
991 fLastRWSendTime = timenow;
1000 Bool_t TMonaLisaWriter::SendParameters(TList *valuelist,
const char *identifier)
1002 if (!fInitialized) {
1003 Error(
"SendParameters",
"Monitoring is not properly initialized!");
1008 Error(
"SendParameters",
"No values in the value list!");
1012 if (identifier == 0)
1013 identifier = fJobId;
1015 TIter nextvalue(valuelist);
1017 TMonaLisaValue *objval;
1018 TMonaLisaText *objtext;
1021 Int_t apmon_nparams = valuelist->GetSize();
1022 char **apmon_params = 0;
1023 Int_t *apmon_types = 0;
1024 char **apmon_values = 0;
1025 Double_t *bufDouble = 0;
1027 if (apmon_nparams) {
1029 apmon_params = (
char **) malloc(apmon_nparams *
sizeof(
char *));
1030 apmon_values = (
char **) malloc(apmon_nparams *
sizeof(
char *));
1031 apmon_types = (
int *) malloc(apmon_nparams *
sizeof(
int));
1032 bufDouble =
new Double_t[apmon_nparams];
1035 while ((monobj = nextvalue())) {
1036 if (!strcmp(monobj->ClassName(),
"TMonaLisaValue")) {
1037 objval = (TMonaLisaValue *) monobj;
1040 Info(
"SendParameters",
"adding tag %s with val %f",
1041 objval->GetName(), objval->GetValue());
1043 apmon_params[looper] = (
char *) objval->GetName();
1044 apmon_types[looper] = XDR_REAL64;
1045 apmon_values[looper] = (
char *) (objval->GetValuePtr());
1048 if (!strcmp(monobj->ClassName(),
"TMonaLisaText")) {
1049 objtext = (TMonaLisaText *) monobj;
1052 Info(
"SendParameters",
"adding tag %s with text %s",
1053 objtext->GetName(), objtext->GetText());
1055 apmon_params[looper] = (
char *) objtext->GetName();
1056 apmon_types[looper] = XDR_STRING;
1057 apmon_values[looper] = (
char *) (objtext->GetText());
1060 if (!strcmp(monobj->ClassName(),
"TNamed")) {
1061 TNamed* objNamed = (TNamed *) monobj;
1064 Info(
"SendParameters",
"adding tag %s with text %s",
1065 objNamed->GetName(), objNamed->GetTitle());
1067 apmon_params[looper] = (
char *) objNamed->GetName();
1068 apmon_types[looper] = XDR_STRING;
1069 apmon_values[looper] = (
char *) (objNamed->GetTitle());
1073 if (!strcmp(monobj->ClassName(),
"TParameter<double>")) {
1074 TParameter<double>* objParam = (TParameter<double> *) monobj;
1077 Info(
"SendParameters",
"adding tag %s with val %f",
1078 objParam->GetName(), objParam->GetVal());
1080 apmon_params[looper] = (
char *) objParam->GetName();
1081 apmon_types[looper] = XDR_REAL64;
1082 apmon_values[looper] = (
char *) &(objParam->GetVal());
1085 if (!strcmp(monobj->ClassName(),
"TParameter<Long64_t>")) {
1086 TParameter<Long64_t>* objParam = (TParameter<Long64_t> *) monobj;
1089 Info(
"SendParameters",
"adding tag %s with val %lld",
1090 objParam->GetName(), objParam->GetVal());
1092 apmon_params[looper] = (
char *) objParam->GetName();
1093 apmon_types[looper] = XDR_REAL64;
1094 bufDouble[looper] = objParam->GetVal();
1095 apmon_values[looper] = (
char *) (bufDouble + looper);
1098 if (!strcmp(monobj->ClassName(),
"TParameter<long>")) {
1099 TParameter<long>* objParam = (TParameter<long> *) monobj;
1102 Info(
"SendParameters",
"adding tag %s with val %ld",
1103 objParam->GetName(), objParam->GetVal());
1105 apmon_params[looper] = (
char *) objParam->GetName();
1106 apmon_types[looper] = XDR_REAL64;
1107 bufDouble[looper] = objParam->GetVal();
1108 apmon_values[looper] = (
char *) (bufDouble + looper);
1111 if (!strcmp(monobj->ClassName(),
"TParameter<float>")) {
1112 TParameter<float>* objParam = (TParameter<float> *) monobj;
1115 Info(
"SendParameters",
"adding tag %s with val %f",
1116 objParam->GetName(), objParam->GetVal());
1118 apmon_params[looper] = (
char *) objParam->GetName();
1119 apmon_types[looper] = XDR_REAL64;
1120 bufDouble[looper] = objParam->GetVal();
1121 apmon_values[looper] = (
char *) (bufDouble + looper);
1124 if (!strcmp(monobj->ClassName(),
"TParameter<int>")) {
1125 TParameter<int>* objParam = (TParameter<int> *) monobj;
1128 Info(
"SendParameters",
"adding tag %s with val %d",
1129 objParam->GetName(), objParam->GetVal());
1131 apmon_params[looper] = (
char *) objParam->GetName();
1132 apmon_types[looper] = XDR_REAL64;
1133 bufDouble[looper] = objParam->GetVal();
1134 apmon_values[looper] = (
char *) (bufDouble + looper);
1140 apmon_nparams = looper;
1143 Info(
"SendParameters",
"n: %d name: %s identifier %s ...,",
1144 apmon_nparams, GetName(), identifier);
1146 ((ApMon *) fApmon)->sendParameters((
char *) GetName(), (
char*)identifier,
1147 apmon_nparams, apmon_params,
1148 apmon_types, apmon_values);
1161 void TMonaLisaWriter::SetLogLevel(
const char *loglevel)
1163 ((ApMon *) fApmon)->setLogLevel((
char *) loglevel);
1169 void TMonaLisaWriter::Print(Option_t *)
const
1171 std::cout <<
"Site (Farm) : " << fName << std::endl;
1172 std::cout <<
"JobId (Node) : " << fJobId << std::endl;
1173 std::cout <<
"SubJobId (Node) : " << fSubJobId << std::endl;
1174 std::cout <<
"HostName : " << fHostname << std::endl;
1175 std::cout <<
"Pid : " << fPid << std::endl;
1176 std::cout <<
"Inititialized : " << fInitialized << std::endl;
1177 std::cout <<
"Verbose : " << fVerbose << std::endl;