ROOT  6.06/09
Reference Guide
TProofLog.cxx
Go to the documentation of this file.
1 // @(#)root/proof:$Id$
2 // Author: G. Ganis 31/08/06
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2006, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 //////////////////////////////////////////////////////////////////////////
13 // //
14 // TProofLog //
15 // //
16 // Implementation of the PROOF session log handler //
17 // //
18 //////////////////////////////////////////////////////////////////////////
19 
20 #include "TFile.h"
21 #include "TMacro.h"
22 #include "TProofLog.h"
23 #include "TProofMgr.h"
24 #include "TObjString.h"
25 #include "TUrl.h"
26 
28 
29 ////////////////////////////////////////////////////////////////////////////////
30 /// Constructor.
31 
32 TProofLog::TProofLog(const char *stag, const char *url, TProofMgr *mgr)
33  : TNamed(stag, url)
34 {
35  SetLogToBox();
36  fFILE = 0;
37  fElem = new TList;
38  fElem->SetOwner();
39  fMgr = mgr;
40  // Set a fake starting time
41  fStartTime.Set((UInt_t)0);
42  // Extract real starting time
43  TString st(stag);
44  Int_t idx = st.Index('-');
45  if (idx != kNPOS) {
46  st.Remove(0, idx+1);
47  idx = st.Index('-');
48  if (idx != kNPOS) {
49  st.Remove(idx);
50  if (st.IsDigit()) {
51  fStartTime.Set(st.Atoi());
52  }
53  }
54  }
55 }
56 
57 ////////////////////////////////////////////////////////////////////////////////
58 /// Destructor.
59 
61 {
63 }
64 
65 ////////////////////////////////////////////////////////////////////////////////
66 /// Add new entry to the list of elements.
67 
68 TProofLogElem *TProofLog::Add(const char *ord, const char *url)
69 {
70  TProofLogElem *ple = new TProofLogElem(ord, url, this);
71  fElem->Add(ple);
72  // Done
73  return ple;
74 }
75 
76 ////////////////////////////////////////////////////////////////////////////////
77 /// Retrieve the content of the log file associated with worker 'ord'.
78 /// If 'ord' is "*" (default), all the workers are retrieved. If 'all'
79 /// is true, the whole files are retrieved; else a max of
80 /// fgMaxTransferSize (about 1000 lines) per file is read, starting from
81 /// the end (i.e. the last ~1000 lines).
82 /// The received buffer is added to the file fname, if the latter is defined.
83 /// If opt == TProofLog::kGrep only the lines containing 'pattern' are
84 /// retrieved (remote grep functionality); to filter out a pattern 'pat' use
85 /// pattern = "-v pat".
86 /// Return 0 on success, -1 in case of any error.
87 
89  const char *fname, const char *pattern)
90 {
91  // Validate inputs
92  if (opt == TProofLog::kGrep && (!pattern || strlen(pattern) <= 0)) {
93  Error("Retrieve", "option 'Grep' requires a pattern");
94  return -1;
95  }
96 
97  Int_t nel = (ord[0] == '*') ? fElem->GetSize() : 1;
98  // Iterate over the elements
99  TIter nxe(fElem);
100  TProofLogElem *ple = 0;
101  Int_t nd = 0, nb = 0;
102  TString msg;
103  while ((ple = (TProofLogElem *) nxe())) {
104  if (ord[0] == '*' || !strcmp(ord, ple->GetName())) {
105  if (ple->Retrieve(opt, pattern) != 0) {
106  nb++;
107  } else {
108  nd++;
109  }
110  Float_t frac = ((Float_t)nd + (Float_t)nb) * 100. / (Float_t)nel;
111  msg.Form("Retrieving logs: %d ok, %d not ok (%.0f%% processed)\r", nd, nb, frac);
112  Prt(msg.Data(), kFALSE);
113  }
114  }
115  Prt("\n");
116 
117  // Save to file, if required
118  if (fname)
119  Save(ord, fname);
120 
121  // Done
122  return 0;
123 }
124 
125 ////////////////////////////////////////////////////////////////////////////////
126 /// Display the content associated with worker 'ord' from line 'from'
127 /// to line 'to' inclusive. A negative value
128 /// for 'from' indicates lines counted from the end (tail action); 'to'
129 /// is ignored in such a case.
130 /// If 'ord' is "*" (default), all the workers are displayed.
131 
132 void TProofLog::Display(const char *ord, Int_t from, Int_t to)
133 {
134  TString msg;
135  if (ord[0] == '*') {
136  Int_t nel = (fElem) ? fElem->GetSize() : 0;
137  // Write global header
138  msg.Form("\n// --------- Displaying PROOF Session logs --------\n"
139  "// Server: %s \n// Session: %s \n// # of elements: %d \n"
140  "// ------------------------------------------------\n\n",
141  GetTitle(), GetName(), nel);
142  Prt(msg.Data());
143  }
144  // Iterate over the elements
145  TIter nxe(fElem);
146  TProofLogElem *ple = 0;
147  while ((ple = (TProofLogElem *) nxe())) {
148  if (ord[0] == '*' || !strcmp(ord, ple->GetName()))
149  ple->Display(from, to);
150  }
151  if (ord[0] == '*')
152  // Write global tail
153  Prt("// --------- End of PROOF Session logs ---------\n");
154 }
155 
156 ////////////////////////////////////////////////////////////////////////////////
157 /// Print head info about the content
158 
159 void TProofLog::Print(Option_t *opt) const
160 {
161  Int_t nel = (fElem) ? fElem->GetSize() : 0;
162  // Write global header
163  fprintf(stderr, "// --------- PROOF Session logs object --------\n");
164  fprintf(stderr, "// Server: %s \n", GetTitle());
165  fprintf(stderr, "// Session: %s \n", GetName());
166  fprintf(stderr, "// # of elements: %d \n", nel);
167  fprintf(stderr, "// --------------------------------------------\n");
168 
169  // Iterate over the elements
170  TIter nxe(fElem);
171  TProofLogElem *ple = 0;
172  while ((ple = (TProofLogElem *) nxe()))
173  ple->Print(opt);
174 
175  // Write global tail
176  fprintf(stderr, "// --------------------------------------------\n");
177 }
178 
179 ////////////////////////////////////////////////////////////////////////////////
180 /// Special printing procedure
181 
182 void TProofLog::Prt(const char *what, Bool_t newline)
183 {
184  if (what) {
185  if (LogToBox()) {
186  // Send to log box:
187  EmitVA("Prt(const char*)", 2, what, kFALSE);
188  } else {
189  FILE *where = (fFILE) ? (FILE *)fFILE : stderr;
190  fputs(what, where);
191  if (newline) fputc('\n', where);
192  }
193  }
194 }
195 
196 ////////////////////////////////////////////////////////////////////////////////
197 /// Save the content associated with worker 'ord' to finel 'fname'.
198 /// If 'ord' is "*" (default), the log from all the workers is saved.
199 /// If 'opt' is "a" the file is open in append mode; otherwise the file
200 /// is truncated.
201 
202 Int_t TProofLog::Save(const char *ord, const char *fname, Option_t *opt)
203 {
204  // Make sure we got a file name
205  if (!fname) {
206  Warning("Save", "filename undefined - do nothing");
207  return -1;
208  }
209 
210  // Open file to write header
211  // Check, if the option is to append
212  TString option = opt;
213  option.ToLower();
214  FILE *fout=0;
215  if (option.Contains("a")){
216  fout = fopen(fname, "a");
217  } else {
218  fout = fopen(fname, "w");
219  }
220  if (!fout) {
221  Warning("Save", "file could not be opened - do nothing");
222  return -1;
223  }
224  fFILE = (void *) fout;
225 
226  TString msg;
227  if (ord[0] == '*') {
228  Int_t nel = (fElem) ? fElem->GetSize() : 0;
229  // Write global header
230  msg.Form("\n// --------- Displaying PROOF Session logs --------\n"
231  "// Server: %s \n// Session: %s \n// # of elements: %d \n"
232  "// ------------------------------------------------\n\n",
233  GetTitle(), GetName(), nel);
234  Prt(msg.Data());
235  }
236 
237  // Iterate over the elements
238  TIter nxe(fElem);
239  TProofLogElem *ple = 0;
240  while ((ple = (TProofLogElem *) nxe())) {
241  if (ord[0] == '*' || !strcmp(ord, ple->GetName()))
242  ple->Display(0);
243  }
244 
245  if (ord[0] == '*') {
246  // Write global tail
247  Prt("// --------- End of PROOF Session logs ---------\n");
248  }
249 
250  // Close file
251  fclose(fout);
252  fFILE = 0;
253 
254  // Done
255  return 0;
256 }
257 
258 ////////////////////////////////////////////////////////////////////////////////
259 /// Search lines containing 'txt', starting from line 'from'.
260 /// Print the lines where this happens.
261 
262 Int_t TProofLog::Grep(const char *txt, Int_t from)
263 {
264  if (!txt || strlen(txt) <= 0) {
265  Warning("Grep", "text to be searched for is undefined - do nothing");
266  return -1;
267  }
268 
269  Int_t nel = (fElem) ? fElem->GetSize() : 0;
270  // Write global header
271  TString msg;
272  msg.Form("\n// --------- Search in PROOF Session logs --------\n"
273  "// Server: %s \n// Session: %s \n// # of elements: %d \n"
274  "// Text searched for: \"%s\"", GetTitle(), GetName(), nel, txt);
275  Prt(msg.Data());
276  if (from > 1) {
277  msg.Form("// starting from line %d \n", from);
278  } else {
279  msg = "\n";
280  }
281  Prt(msg.Data());
282  Prt("// ------------------------------------------------\n");
283 
284  // Iterate over the elements
285  TIter nxe(fElem);
286  TProofLogElem *ple = 0;
287  while ((ple = (TProofLogElem *) nxe())) {
288  TString res;
289  Int_t nf = ple->Grep(txt, res, from);
290  if (nf > 0) {
291  msg.Form("// Ord: %s - line(s): %s\n", ple->GetName(), res.Data());
292  Prt(msg.Data());
293  }
294  }
295 
296  Prt("// ------------------------------------------------\n");
297 
298  // Done
299  return 0;
300 }
301 
302 ////////////////////////////////////////////////////////////////////////////////
303 /// Set max transfer size.
304 
306 {
308 }
309 
310 //
311 // TProofLogElem
312 //
313 
314 Long64_t TProofLogElem::fgMaxTransferSize = 100000; // about 1000 lines
315 
316 ////////////////////////////////////////////////////////////////////////////////
317 /// Constructor.
318 
319 TProofLogElem::TProofLogElem(const char *ord, const char *url,
320  TProofLog *logger)
321  : TNamed(ord, url)
322 {
323  fLogger = logger;
324  fMacro = new TMacro;
325  fSize = -1;
326  fFrom = -1;
327  fTo = -1;
328 
329  //Note the role here, don't redo at each call of Display()
330  if (strstr(GetTitle(), "worker-")) {
331  fRole = "worker";
332  } else {
333  if (strchr(GetName(), '.')) {
334  fRole = "submaster";
335  } else {
336  fRole = "master";
337  }
338  }
339 }
340 
341 ////////////////////////////////////////////////////////////////////////////////
342 /// Destructor.
343 
345 {
347 }
348 
349 ////////////////////////////////////////////////////////////////////////////////
350 /// Get max transfer size.
351 
353 {
354  return fgMaxTransferSize;
355 }
356 
357 ////////////////////////////////////////////////////////////////////////////////
358 /// Set max transfer size.
359 
361 {
362  fgMaxTransferSize = maxsz;
363 }
364 
365 ////////////////////////////////////////////////////////////////////////////////
366 /// Retrieve the content of the associated file. The approximate number
367 /// of lines to be retrieved is given by 'lines', with the convention that
368 /// 0 means 'all', a positive number means the first 'lines' and a negative
369 /// number means the last '-lines'. Default is -1000.
370 /// If opt == TProofLog::kGrep only the lines containing 'pattern' are
371 /// retrieved (remote grep functionality); to filter out a pattern 'pat' use
372 /// pattern = "-v pat".
373 /// Return 0 on success, -1 in case of any error.
374 
376 {
377  // Make sure we have a reference manager
378  if (!fLogger->fMgr || !fLogger->fMgr->IsValid()) {
379  Warning("Retrieve", "No reference manager: corruption?");
380  return -1;
381  }
382 
383  // Print some info on the file
384  if (gDebug >= 2) {
385  Info("Retrieve", "Retrieving from ordinal %s file %s with pattern %s",
386  GetName(), GetTitle(), (pattern ? pattern : "(no pattern)"));
387  }
388 
389  // Determine offsets
390  if (opt == TProofLog::kAll) {
391  // Re-read everything
392  fFrom = 0;
393  fTo = -1;
394  if (gDebug >= 1)
395  Info("Retrieve", "Retrieving the whole file");
396  } else if (opt == TProofLog::kLeading) {
397  // Read leading part
398  fFrom = 0;
400  if (gDebug >= 1)
401  Info("Retrieve", "Retrieving the leading %lld lines of file", fTo);
402  } else if (opt == TProofLog::kGrep) {
403  // Retrieve lines containing 'pattern', which must be defined
404  if (!pattern || strlen(pattern) <= 0) {
405  Error("Retrieve", "option 'Grep' requires a pattern");
406  return -1;
407  }
408  if (gDebug >= 1)
409  Info("Retrieve", "Retrieving only lines filtered with %s", pattern);
410  } else {
411  // Read trailing part
413  fTo = -1;
414  if (gDebug >= 1)
415  Info("Retrieve", "Retrieving the last %lld lines of file", -fFrom);
416  }
417 
418  // Reset the macro
420  fMacro = new TMacro;
421 
422  // Size to be read
423  Long64_t len = (fTo > fFrom) ? fTo - fFrom : -1;
424 
425  // Readout the buffer
426  TObjString *os = 0;
427  if (fLogger->fMgr) {
428  TString fileName = GetTitle();
429  if (fileName.Contains("__igprof.pp__")) {
430  // File is an IgProf log. Override all patterns and preprocess it
431  if (gDebug >= 1)
432  Info("Retrieve", "Retrieving analyzed IgProf performance profile");
433  TString analyzeAndFilter = \
434  "|( T=`mktemp` && cat > \"$T\" ; igprof-analyse -d -g \"$T\" ; rm -f \"$T\" )";
435  if (pattern && (*pattern == '|'))
436  analyzeAndFilter.Append(pattern);
437  os = fLogger->fMgr->ReadBuffer(fileName.Data(), analyzeAndFilter.Data());
438  }
439  else if (opt == TProofLog::kGrep)
440  os = fLogger->fMgr->ReadBuffer(fileName.Data(), pattern);
441  else
442  os = fLogger->fMgr->ReadBuffer(fileName.Data(), fFrom, len);
443  }
444  if (os) {
445  // Loop over lines
446  TString ln;
447  Ssiz_t from = 0;
448  while (os->String().Tokenize(ln, from, "\n"))
449  fMacro->AddLine(ln.Data());
450 
451  // Cleanup
452  delete os;
453  }
454 
455  // Done
456  return 0;
457 }
458 
459 ////////////////////////////////////////////////////////////////////////////////
460 /// Display the current content starting from line 'from' to line 'to'
461 /// inclusive.
462 /// A negative value for 'from' indicates lines counted from the end
463 /// (tail action); 'to' is ignored in such a case.
464 /// TProofLog::Prt is called to display: the location (screen, file, box)
465 /// is defined there.
466 /// Return 0 on success, -1 in case of any error.
467 
469 {
470  Int_t nls = (fMacro->GetListOfLines()) ?
471  fMacro->GetListOfLines()->GetSize() : 0;
472 
473  // Starting line
474  Int_t i = 0;
475  Int_t ie = (to > -1 && to < nls) ? to : nls;
476  if (from > 1) {
477  if (from <= nls)
478  i = from - 1;
479  } else if (from < 0) {
480  // Tail action
481  if (-from <= nls)
482  i = nls + from;
483  ie = nls;
484  }
485  // Write header
486  TString msg;
487  Prt("// --------- Start of element log -----------------\n");
488  msg.Form("// Ordinal: %s (role: %s)\n", GetName(), fRole.Data());
489  Prt(msg.Data());
490  // Separate out the submaster path, if any
491  TString path(GetTitle());
492  Int_t ic = path.Index(",");
493  if (ic != kNPOS) {
494  TString subm(path);
495  path.Remove(0, ic+1);
496  subm.Remove(ic);
497  msg.Form("// Submaster: %s \n", subm.Data());
498  Prt(msg.Data());
499  }
500  msg.Form("// Path: %s \n// # of retrieved lines: %d ", path.Data(), nls);
501  Prt(msg.Data());
502  if (i > 0 || ie < nls) {
503  msg.Form("(displaying lines: %d -> %d)\n", i+1, ie);
504  } else {
505  msg = "\n";
506  }
507  Prt(msg.Data());
508  Prt("// ------------------------------------------------\n");
509  // Write lines
510  msg = "";
511  if (fMacro->GetListOfLines()) {
512  TIter nxl(fMacro->GetListOfLines());
513  TObjString *os = 0;
514  Int_t kk = 0;
515  while ((os = (TObjString *) nxl())) {
516  kk++;
517  if (kk > i) {
518  if (msg.Length() < 100000) {
519  if (msg.Length() > 0) msg += "\n";
520  msg += os->GetName();
521  } else {
522  Prt(msg.Data());
523  msg = "";
524  }
525  }
526  if (kk > ie) break;
527  }
528  }
529  if (msg.Length() > 0) Prt(msg.Data());
530  // Write tail
531  Prt("// --------- End of element log -------------------\n\n");
532 }
533 
534 ////////////////////////////////////////////////////////////////////////////////
535 /// Print a line with the relevant info.
536 
538 {
539  Int_t nls = (fMacro->GetListOfLines()) ?
540  fMacro->GetListOfLines()->GetSize() : 0;
541  const char *role = (strstr(GetTitle(), "worker-")) ? "worker" : "master";
542 
543  fprintf(stderr, "Ord: %s Host: Role: %s lines: %d\n", GetName(), role, nls);
544 }
545 
546 ////////////////////////////////////////////////////////////////////////////////
547 /// Special printing procedure.
548 
549 void TProofLogElem::Prt(const char *what)
550 {
551  if (fLogger)
552  fLogger->Prt(what);
553 }
554 
555 ////////////////////////////////////////////////////////////////////////////////
556 /// Search lines containing 'txt', starting from line 'from'. Return
557 /// their blanck-separated list into 'res'.
558 /// Return the number of lines found, or -1 in case of error.
559 
560 Int_t TProofLogElem::Grep(const char *txt, TString &res, Int_t from)
561 {
562  Int_t nls = (fMacro->GetListOfLines()) ?
563  fMacro->GetListOfLines()->GetSize() : 0;
564 
565  Int_t nf = 0;
566  Int_t i = (from > 0) ? (from - 1) : 0;
567  for( ; i < nls; i++) {
568  TObjString *os = (TObjString *) fMacro->GetListOfLines()->At(i);
569  if (os) {
570  if (strstr(os->GetName(), txt)) {
571  if (res.Length() > 0)
572  res += " ";
573  res += (i + 1);
574  nf++;
575  }
576  }
577  }
578 
579  // Done
580  return nf;
581 }
const char * GetName() const
Returns name of object.
Definition: TObjString.h:42
void Prt(const char *what, Bool_t newline=kTRUE)
Special printing procedure.
Definition: TProofLog.cxx:182
virtual const char * GetTitle() const
Returns title of object.
Definition: TNamed.h:52
long long Long64_t
Definition: RtypesCore.h:69
void Prt(const char *what)
Special printing procedure.
Definition: TProofLog.cxx:549
static void SetMaxTransferSize(Long64_t maxsz)
Set max transfer size.
Definition: TProofLog.cxx:305
Ssiz_t Length() const
Definition: TString.h:390
Collectable string class.
Definition: TObjString.h:32
float Float_t
Definition: RtypesCore.h:53
const char Option_t
Definition: RtypesCore.h:62
void EmitVA(const char *signal_name, Int_t, const T &...params)
static Long64_t fgMaxTransferSize
Definition: TProofLog.h:95
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content.
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message.
Definition: TObject.cxx:892
Bool_t LogToBox()
Definition: TProofLog.h:77
virtual ~TProofLog()
Destructor.
Definition: TProofLog.cxx:60
Class supporting a collection of lines with C++ code.
Definition: TMacro.h:33
Basic string class.
Definition: TString.h:137
ClassImp(TProofLog) TProofLog
Constructor.
Definition: TProofLog.cxx:27
void ToLower()
Change string to lower-case.
Definition: TString.cxx:1088
int Int_t
Definition: RtypesCore.h:41
bool Bool_t
Definition: RtypesCore.h:59
const Bool_t kFALSE
Definition: Rtypes.h:92
void Print(Option_t *opt=0) const
Print head info about the content.
Definition: TProofLog.cxx:159
virtual TObject * At(Int_t idx) const
Returns the object at position idx. Returns 0 if idx is out of range.
Definition: TList.cxx:310
TString fRole
Definition: TProofLog.h:93
void Display(const char *ord="*", Int_t from=-10, Int_t to=-1)
Display the content associated with worker 'ord' from line 'from' to line 'to' inclusive.
Definition: TProofLog.cxx:132
void Display(Int_t from=0, Int_t to=-1)
Display the current content starting from line 'from' to line 'to' inclusive.
Definition: TProofLog.cxx:468
virtual Bool_t IsValid() const
Definition: TProofMgr.h:87
const char * Data() const
Definition: TString.h:349
#define SafeDelete(p)
Definition: RConfig.h:436
TProofLog * fLogger
Definition: TProofLog.h:88
void * fFILE
Definition: TProofLog.h:46
const char * ord
Definition: TXSlave.cxx:46
The TNamed class is the base class for all named ROOT classes.
Definition: TNamed.h:33
Int_t Grep(const char *txt, TString &res, Int_t from=0)
Search lines containing 'txt', starting from line 'from'.
Definition: TProofLog.cxx:560
TString & Append(const char *cs)
Definition: TString.h:492
static const std::string pattern("pattern")
static void SetMaxTransferSize(Long64_t maxsz)
Set max transfer size.
Definition: TProofLog.cxx:360
Int_t Atoi() const
Return integer value of string.
Definition: TString.cxx:1964
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message.
Definition: TObject.cxx:918
A doubly linked list.
Definition: TList.h:47
static const char * what
Definition: stlLoader.cc:6
TMacro * fMacro
Definition: TProofLog.h:89
Long64_t fFrom
Definition: TProofLog.h:91
TList * GetListOfLines() const
Definition: TMacro.h:53
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor.
Definition: TString.cxx:2321
unsigned int UInt_t
Definition: RtypesCore.h:42
virtual TObjString * ReadBuffer(const char *, Long64_t, Int_t)
Definition: TProofMgr.h:107
virtual const char * GetName() const
Returns name of object.
Definition: TNamed.h:51
Long64_t fTo
Definition: TProofLog.h:92
TString & String()
Definition: TObjString.h:52
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString.
Definition: TString.cxx:2240
virtual ~TProofLogElem()
Destructor.
Definition: TProofLog.cxx:344
Long64_t fSize
Definition: TProofLog.h:90
Int_t Grep(const char *txt, Int_t from=0)
Search lines containing 'txt', starting from line 'from'.
Definition: TProofLog.cxx:262
TString & Remove(Ssiz_t pos)
Definition: TString.h:616
int Ssiz_t
Definition: RtypesCore.h:63
virtual Int_t GetSize() const
Definition: TCollection.h:95
friend class TProofLogElem
Definition: TProofLog.h:40
TProofMgr * fMgr
Definition: TProofLog.h:45
Bool_t IsDigit() const
Returns true if all characters in string are digits (0-9) or white spaces, i.e.
Definition: TString.cxx:1806
TProofLogElem * Add(const char *ord, const char *url)
Add new entry to the list of elements.
Definition: TProofLog.cxx:68
void Print(Option_t *opt=0) const
Print a line with the relevant info.
Definition: TProofLog.cxx:537
virtual void Add(TObject *obj)
Definition: TList.h:81
const Ssiz_t kNPOS
Definition: Rtypes.h:115
TProofLogElem(const char *ord, const char *url, TProofLog *logger)
Constructor.
Definition: TProofLog.cxx:319
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
Definition: TString.h:567
R__EXTERN Int_t gDebug
Definition: Rtypes.h:128
Int_t Save(const char *ord="*", const char *fname=0, Option_t *opt="w")
Save the content associated with worker 'ord' to finel 'fname'.
Definition: TProofLog.cxx:202
Int_t Retrieve(TProofLog::ERetrieveOpt opt=TProofLog::kTrailing, const char *pattern=0)
Retrieve the content of the associated file.
Definition: TProofLog.cxx:375
Ssiz_t Index(const char *pat, Ssiz_t i=0, ECaseCompare cmp=kExact) const
Definition: TString.h:582
static Long64_t GetMaxTransferSize()
Get max transfer size.
Definition: TProofLog.cxx:352
TList * fElem
Definition: TProofLog.h:47
virtual TObjString * AddLine(const char *text)
Add line with text in the list of lines of this macro.
Definition: TMacro.cxx:137
Int_t Retrieve(const char *ord="*", TProofLog::ERetrieveOpt opt=TProofLog::kTrailing, const char *fname=0, const char *pattern=0)
Retrieve the content of the log file associated with worker 'ord'.
Definition: TProofLog.cxx:88
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message.
Definition: TObject.cxx:904