// @(#)root/proofplayer:$Id$
// Author: G.Ganis July 2011

/*************************************************************************
 * Copyright (C) 1995-2004, Rene Brun and Fons Rademakers.               *
 * All rights reserved.                                                  *
 *                                                                       *
 * For the licensing terms see $ROOTSYS/LICENSE.                         *
 * For the list of contributors see $ROOTSYS/README/CREDITS.             *
 *************************************************************************/


//////////////////////////////////////////////////////////////////////////
//                                                                      //
// TProofMonSender                                                      //
//                                                                      //
// Provides the interface for PROOF monitoring to different writers.    //
// Allows to decouple the information sent from the backend.            //
//                                                                      //
//////////////////////////////////////////////////////////////////////////

#include "TProofDebug.h"
#include "TProofMonSender.h"

//________________________________________________________________________
Int_t TProofMonSender::SetSendOptions(const char *sendopts)
{
   // Parse send options from string 'sendopts'.
   // Format is:
   //              "[-,+]S[n]|[-,+]D[m]|[-,+]F[j]"
   // where:
   //   1. The big letter refers to the 'table' following
   //
   //           S      table with summary log
   //           D      table with dataset info
   //           F      table files info
   //
   //   2. The '-,+' in front disables/enables the related table; if
   //      absent '+' is assumed
   //
   //   3. The number after the letter is the version of the related
   //      table
   //
   // Returns -1 if nothing is enabled; 0 otherwise


   // Must have something to parse
   if (sendopts && strlen(sendopts) > 0) {

      PDB(kMonitoring,1) Info("SetSendOptions", "sendopts: '%s'", sendopts);

      Bool_t doit = kTRUE;
      Char_t t = 0;
      Int_t v = -1;
      TString oos(sendopts), oo;
      Ssiz_t from = 0;
      while (oos.Tokenize(oo, from, ":")) {
         PDB(kMonitoring,2) Info("SetSendOptions", "oo: '%s'", oo.Data());
         // Parse info
         doit = kTRUE;
         if (oo.BeginsWith("+")) oo.Remove(0,1);
         if (oo.BeginsWith("-")) { doit = kFALSE; oo.Remove(0,1); }
         PDB(kMonitoring,2) Info("SetSendOptions", "oo: '%s' doit:%d", oo.Data(), doit);
         t = oo[0];
         oo.Remove(0,1);
         PDB(kMonitoring,2) Info("SetSendOptions", "oo: '%s' doit:%d t:'%c'", oo.Data(), doit, t);
         v = -1;
         if (!oo.IsNull() && oo.IsDigit()) v = oo.Atoi();
         PDB(kMonitoring,2) Info("SetSendOptions", "oo: '%s' doit:%d t:'%c' v:%d", oo.Data(), doit, t, v);
         // Fill relevant variables
         TProofMonSender::EConfigBits cbit = kSendSummary;
         if (t == 'D') cbit = kSendDataSetInfo;
         if (t == 'F') cbit = kSendFileInfo;
         if (doit)
            SetBit(cbit);
         else
            ResetBit(cbit);
         if (v > -1) {
            if (t == 'S') fSummaryVrs = v;
            if (t == 'D') fDataSetInfoVrs = v;
            if (t == 'F') fFileInfoVrs = v;
         }
      }
   }

   // Something must be enabled
   if (!(TestBit(kSendSummary) || TestBit(kSendDataSetInfo) || TestBit(kSendFileInfo))) {
      Warning("SetSendOptions", "all tables are disabled!");
      return -1;
   }

   // Notify
   TString snot = TString::Format("%s: sending:", GetTitle());
   if (TestBit(kSendSummary)) snot += TString::Format(" 'summary' (v:%d)", fSummaryVrs);
   if (TestBit(kSendDataSetInfo)) snot += TString::Format(" 'dataset info' (v:%d)", fDataSetInfoVrs);
   if (TestBit(kSendFileInfo)) snot += TString::Format(" 'file info' (v:%d)", fFileInfoVrs);
   Info("SetSendOptions", "%s", snot.Data());

   // Done
   return 0;
}

 TProofMonSender.cxx:1
 TProofMonSender.cxx:2
 TProofMonSender.cxx:3
 TProofMonSender.cxx:4
 TProofMonSender.cxx:5
 TProofMonSender.cxx:6
 TProofMonSender.cxx:7
 TProofMonSender.cxx:8
 TProofMonSender.cxx:9
 TProofMonSender.cxx:10
 TProofMonSender.cxx:11
 TProofMonSender.cxx:12
 TProofMonSender.cxx:13
 TProofMonSender.cxx:14
 TProofMonSender.cxx:15
 TProofMonSender.cxx:16
 TProofMonSender.cxx:17
 TProofMonSender.cxx:18
 TProofMonSender.cxx:19
 TProofMonSender.cxx:20
 TProofMonSender.cxx:21
 TProofMonSender.cxx:22
 TProofMonSender.cxx:23
 TProofMonSender.cxx:24
 TProofMonSender.cxx:25
 TProofMonSender.cxx:26
 TProofMonSender.cxx:27
 TProofMonSender.cxx:28
 TProofMonSender.cxx:29
 TProofMonSender.cxx:30
 TProofMonSender.cxx:31
 TProofMonSender.cxx:32
 TProofMonSender.cxx:33
 TProofMonSender.cxx:34
 TProofMonSender.cxx:35
 TProofMonSender.cxx:36
 TProofMonSender.cxx:37
 TProofMonSender.cxx:38
 TProofMonSender.cxx:39
 TProofMonSender.cxx:40
 TProofMonSender.cxx:41
 TProofMonSender.cxx:42
 TProofMonSender.cxx:43
 TProofMonSender.cxx:44
 TProofMonSender.cxx:45
 TProofMonSender.cxx:46
 TProofMonSender.cxx:47
 TProofMonSender.cxx:48
 TProofMonSender.cxx:49
 TProofMonSender.cxx:50
 TProofMonSender.cxx:51
 TProofMonSender.cxx:52
 TProofMonSender.cxx:53
 TProofMonSender.cxx:54
 TProofMonSender.cxx:55
 TProofMonSender.cxx:56
 TProofMonSender.cxx:57
 TProofMonSender.cxx:58
 TProofMonSender.cxx:59
 TProofMonSender.cxx:60
 TProofMonSender.cxx:61
 TProofMonSender.cxx:62
 TProofMonSender.cxx:63
 TProofMonSender.cxx:64
 TProofMonSender.cxx:65
 TProofMonSender.cxx:66
 TProofMonSender.cxx:67
 TProofMonSender.cxx:68
 TProofMonSender.cxx:69
 TProofMonSender.cxx:70
 TProofMonSender.cxx:71
 TProofMonSender.cxx:72
 TProofMonSender.cxx:73
 TProofMonSender.cxx:74
 TProofMonSender.cxx:75
 TProofMonSender.cxx:76
 TProofMonSender.cxx:77
 TProofMonSender.cxx:78
 TProofMonSender.cxx:79
 TProofMonSender.cxx:80
 TProofMonSender.cxx:81
 TProofMonSender.cxx:82
 TProofMonSender.cxx:83
 TProofMonSender.cxx:84
 TProofMonSender.cxx:85
 TProofMonSender.cxx:86
 TProofMonSender.cxx:87
 TProofMonSender.cxx:88
 TProofMonSender.cxx:89
 TProofMonSender.cxx:90
 TProofMonSender.cxx:91
 TProofMonSender.cxx:92
 TProofMonSender.cxx:93
 TProofMonSender.cxx:94
 TProofMonSender.cxx:95
 TProofMonSender.cxx:96
 TProofMonSender.cxx:97
 TProofMonSender.cxx:98
 TProofMonSender.cxx:99
 TProofMonSender.cxx:100
 TProofMonSender.cxx:101
 TProofMonSender.cxx:102