SHUTTLE configuration updated:
authoracolla <acolla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 7 Jan 2008 18:05:45 +0000 (18:05 +0000)
committeracolla <acolla@f7af4fe6-9843-0410-8265-dc069ae4e863>
Mon, 7 Jan 2008 18:05:45 +0000 (18:05 +0000)
- List of SHUTTLE, Amanda and FXS sytem administrators, to whom email is sent in case of running problems;
- sendMail flag (1/0), to switch on/off sending of emails in case of running problems;
- keepDCSMap flag (1/0), to keep DCS map in the Shuttle temp folder also in case of successful processing
- keepTempFolder flag (1/0), to keep temporary folders on the Shuttle machine also in case of successful processing

SHUTTLE/AliShuttle.cxx
SHUTTLE/AliShuttleConfig.cxx
SHUTTLE/AliShuttleConfig.h
SHUTTLE/schema/DAQsys.ldif
SHUTTLE/schema/DCSsys.ldif
SHUTTLE/schema/Global.ldif
SHUTTLE/schema/HLTsys.ldif
SHUTTLE/schema/shuttle.schema

index f77456d458bf2e49d2744bff4ea297b5605b42dd..7236beca2a26a595cd82458e87bebc86adc8ad5b 100644 (file)
@@ -15,6 +15,9 @@
 
 /*
 $Log$
+Revision 1.82  2007/12/20 16:29:43  jgrosseo
+sending number of open runs also at the end of processing
+
 Revision 1.81  2007/12/20 14:24:59  jgrosseo
 Do not increase count in case of StoreError
 
@@ -1744,9 +1747,14 @@ Bool_t AliShuttle::Process(AliShuttleLogbookEntry* entry)
                                                
                        if (success) // Preprocessor finished successfully!
                        { 
-                               // remove temporary folder
-                                // temporary commented (JF)
-                               //gSystem->Exec(Form("rm -rf %s",tmpDir.Data()));
+                               // remove temporary folder or DCS map
+                               if (!fConfig->KeepTempFolder())
+                               {
+                                       gSystem->Exec(Form("rm -rf %s",tmpDir.Data()));
+                               } else if (!fConfig->KeepDCSMap())
+                               {
+                                       gSystem->Exec(Form("rm -f %s/DCSMap.root",tmpDir.Data()));
+                               }
                                
                                // Update time_processed field in FXS DB
                                if (UpdateTable() == kFALSE)
@@ -1911,8 +1919,9 @@ Bool_t AliShuttle::ProcessCurrentDetector()
                                                        " Sending mail to DCS experts!", host.Data()));
                                        UpdateShuttleStatus(AliShuttleStatus::kDCSError);
                                        
-                                       //if (!SendMailToDCS())
-                                       //      Log("SHUTTLE", Form("ProcessCurrentDetector - Could not send mail to DCS experts!"));
+                                       if (!SendMailToDCS())
+                                               Log("SHUTTLE", Form("ProcessCurrentDetector - "
+                                                       "Could not send mail to DCS experts!"));
 
                                        delete dcsMap;
                                        return kFALSE;
@@ -1932,8 +1941,9 @@ Bool_t AliShuttle::ProcessCurrentDetector()
                                                        " Sending mail to DCS experts!", host.Data()));
                                        UpdateShuttleStatus(AliShuttleStatus::kDCSError);
                                        
-                                       //if (!SendMailToDCS())
-                                       //      Log("SHUTTLE", Form("ProcessCurrentDetector - Could not send mail to DCS experts!"));
+                                       if (!SendMailToDCS())
+                                               Log("SHUTTLE", Form("ProcessCurrentDetector - "
+                                                       "Could not send mail to DCS experts!"));
                                        
                                        if (aliasMap) delete aliasMap;
                                        delete dcsMap;
@@ -3307,6 +3317,8 @@ Bool_t AliShuttle::SendMail()
        
        if (fTestMode != kNone)
                return kTRUE;
+               
+       if (!fConfig->SendMail()) return kTRUE;
 
        TString to="";
        TIter iterExperts(fConfig->GetResponsibles(fCurrentDetector));
@@ -3320,7 +3332,7 @@ Bool_t AliShuttle::SendMail()
        AliDebug(2, Form("to: %s",to.Data()));
 
        if (to.IsNull()) {
-               Log("SHUTTLE", "List of detector responsibles not yet set!");
+               Log("SHUTTLE", "List of detector responsibles not set!");
                return kFALSE;
        }
 
@@ -3350,7 +3362,16 @@ Bool_t AliShuttle::SendMail()
                return kFALSE;
        }
 
-       TString cc="alberto.colla@cern.ch";
+       TString cc="";
+       TIter iterAdmins(fConfig->GetAdmins(AliShuttleConfig::kGlobal));
+       TObjString *anAdmin=0;
+       while ((anAdmin = (TObjString*) iterAdmins.Next()))
+       {
+               cc += Form("%s,", anAdmin->GetName());
+       }
+       if (cc.Length() > 0)
+         cc.Remove(to.Length()-1);
+       AliDebug(2, Form("cc: %s",to.Data()));
 
        TString subject = Form("%s Shuttle preprocessor FAILED in run %d (run type = %s)!",
                                fCurrentDetector.Data(), GetCurrentRun(), GetRunType());
@@ -3423,12 +3444,14 @@ Bool_t AliShuttle::SendMail()
 Bool_t AliShuttle::SendMailToDCS()
 {
        //
-       // sends a mail to the DCS experts in case of DCS error
+       // sends a mail to the DCS Amanda experts in case of DCS data point retrieval error
        //
        
        if (fTestMode != kNone)
                return kTRUE;
 
+       if (!fConfig->SendMail()) return kTRUE;
+
        void* dir = gSystem->OpenDirectory(GetShuttleLogDir());
        if (dir == NULL)
        {
@@ -3455,16 +3478,32 @@ Bool_t AliShuttle::SendMailToDCS()
                return kFALSE;
        }
 
-       TString to="Vladimir.Fekete@cern.ch, Svetozar.Kapusta@cern.ch";
-       //TString to="alberto.colla@cern.ch";
+       TString to="";
+       TIter iterExperts(fConfig->GetAdmins(AliShuttleConfig::kAmanda));
+       TObjString *anExpert=0;
+       while ((anExpert = (TObjString*) iterExperts.Next()))
+       {
+               to += Form("%s,", anExpert->GetName());
+       }
+       if (to.Length() > 0)
+         to.Remove(to.Length()-1);
        AliDebug(2, Form("to: %s",to.Data()));
 
        if (to.IsNull()) {
-               Log("SHUTTLE", "List of detector responsibles not yet set!");
+               Log("SHUTTLE", "List of Amanda server administrators not set!");
                return kFALSE;
        }
 
-       TString cc="alberto.colla@cern.ch";
+       TString cc="";
+       TIter iterAdmins(fConfig->GetAdmins(AliShuttleConfig::kGlobal));
+       TObjString *anAdmin=0;
+       while ((anAdmin = (TObjString*) iterAdmins.Next()))
+       {
+               cc += Form("%s,", anAdmin->GetName());
+       }
+       if (cc.Length() > 0)
+         cc.Remove(to.Length()-1);
+       AliDebug(2, Form("cc: %s",to.Data()));
 
        TString subject = Form("Retrieval of data points for %s FAILED in run %d !",
                                fCurrentDetector.Data(), GetCurrentRun());
index dcdad71f15d9ec267ca8016bd1b8325f8db212a5..042b7d42260b97fa89de1aef068a4a8bb1d6c813 100644 (file)
 
 /*
 $Log$
+Revision 1.27  2007/12/17 03:23:32  jgrosseo
+several bugfixes
+added "empty preprocessor" as placeholder for Acorde in FDR
+
 Revision 1.26  2007/12/07 19:14:36  acolla
 in AliShuttleTrigger:
 
@@ -258,7 +262,7 @@ fIsValid(kFALSE)
                ExpandAndAdd(fDCSDataPoints, aDataPoint);
                }
        }
-
+       
        fIsValid = kTRUE;
 }
 
@@ -540,10 +544,15 @@ AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
        fRunMode(kTest),
        fDetectorMap(), 
        fDetectorList(),
+       fAdmin(),
        fShuttleInstanceHost(""), 
        fProcessedDetectors(), 
+       fKeepDCSMap(kFALSE),
+       fKeepTempFolder(kFALSE),
+       fSendMail(kFALSE),
        fProcessAll(kFALSE), 
        fIsValid(kFALSE)
+
 {
        //
        // host: ldap server host
@@ -556,6 +565,12 @@ AliShuttleConfig::AliShuttleConfig(const char* host, Int_t port,
        fDetectorMap.SetOwner(1);
        fDetectorList.SetOwner(0); //fDetectorList and fDetectorMap share the same object!
        fProcessedDetectors.SetOwner();
+       
+       for (int i=0; i<5; i++)
+       {
+               fAdmin[i] = new TObjArray(); 
+               fAdmin[i]->SetOwner();
+       }
 
        TLDAPServer aServer(host, port, binddn, password, 3);
 
@@ -646,6 +661,9 @@ AliShuttleConfig::~AliShuttleConfig()
        fDetectorMap.DeleteAll();
        fDetectorList.Clear();
        fProcessedDetectors.Delete();
+       
+       delete[] fAdmin;
+       
 }
 
 //______________________________________________________________________________________________
@@ -829,6 +847,18 @@ const TObjArray* AliShuttleConfig::GetResponsibles(const char* detector) const
        return aHolder->GetResponsibles();
 }
 
+//______________________________________________________________________________________________
+const TObjArray* AliShuttleConfig::GetAdmins(Int_t sys) const
+{
+       //
+       // returns collection of TObjString which represents the list of mail addresses
+       // of the system's administrator(s) (DAQ, DCS, HLT, Global, Amanda)
+       //
+
+       if (sys < 0 || sys > 4) return 0;
+       return fAdmin[sys];
+}
+
 //______________________________________________________________________________________________
 Bool_t AliShuttleConfig::HostProcessDetector(const char* detector) const
 {
@@ -1004,7 +1034,78 @@ UInt_t AliShuttleConfig::SetGlobalConfig(TList* list)
            AliWarning("Valid run modes are \"test\" and \"prod\". Running in test mode.");
          }
        }
-               
+
+       anAttribute = anEntry->GetAttribute("keepDCSMap"); // MAY
+        if (!anAttribute)
+       {
+               AliWarning("keepDCSMap flag not set - default is FALSE");
+        } else {
+               TString keepDCSMapStr = anAttribute->GetValue();
+               if (!(keepDCSMapStr == "0" || keepDCSMapStr == "1"))
+               {
+                       AliError("keepDCSMap flag must be 0 or 1!");
+                       return 4;
+               }
+               fKeepDCSMap = (Bool_t) keepDCSMapStr.Atoi();
+       }
+       
+       anAttribute = anEntry->GetAttribute("keepTempFolder"); // MAY
+        if (!anAttribute)
+       {
+               AliWarning("keepTempFolder flag not set - default is FALSE");
+        } else {
+               TString keepTempFolderStr = anAttribute->GetValue();
+               if (!(keepTempFolderStr == "0" || keepTempFolderStr == "1"))
+               {
+                       AliError("keepTempFolder flag must be 0 or 1!");
+                       return 4;
+               }
+               fKeepTempFolder = (Bool_t) keepTempFolderStr.Atoi();
+       }
+       
+
+       anAttribute = anEntry->GetAttribute("shuttleAdmin"); // MAY
+        if (!anAttribute)
+       {
+               AliDebug(2, "Warning! No \"shuttleAdmin\" attribute!");
+        }
+       else
+       {
+               const char* anAdmin;
+               while ((anAdmin = anAttribute->GetValue()))
+               {
+                       fAdmin[kGlobal]->AddLast(new TObjString(anAdmin));
+               }
+       }
+
+       anAttribute = anEntry->GetAttribute("amandaAdmin"); // MAY
+        if (!anAttribute)
+       {
+               AliDebug(2, "Warning! No \"amandaAdmin\" attribute!");
+        }
+       else
+       {
+               const char* anAdmin;
+               while ((anAdmin = anAttribute->GetValue()))
+               {
+                       fAdmin[kAmanda]->AddLast(new TObjString(anAdmin));
+               }
+       }
+       
+       anAttribute = anEntry->GetAttribute("sendMail"); // MAY
+        if (!anAttribute)
+       {
+               AliWarning("sendMail flag not set - default is FALSE");
+        } else {
+               TString sendMailStr = anAttribute->GetValue();
+               if (!(sendMailStr == "0" || sendMailStr == "1"))
+               {
+                       AliError("sendMail flag must be 0 or 1!");
+                       return 4;
+               }
+               fSendMail = (Bool_t) sendMailStr.Atoi();
+       }
+                                               
        return 0;
 }
 
@@ -1023,7 +1124,9 @@ UInt_t AliShuttleConfig::SetSysConfig(TList* list)
        } 
 
        TIter iter(list);
-       Int_t iSys=0, count = 0;
+       Int_t count = 0;
+       SystemCode iSys=kDAQ;
+       
        while ((anEntry = dynamic_cast<TLDAPEntry*> (iter.Next())))
        {
                anAttribute = anEntry->GetAttribute("system");
@@ -1031,17 +1134,17 @@ UInt_t AliShuttleConfig::SetSysConfig(TList* list)
                
                if (sysName == "DAQ") 
                {
-                       iSys = 0;
+                       iSys = kDAQ;
                        count += 1;
                }
                else if (sysName == "DCS")
                {
-                       iSys = 1;
+                       iSys = kDCS;
                        count += 10;
                }
                else if (sysName == "HLT")
                {
-                       iSys = 2;
+                       iSys = kHLT;
                        count += 100;
                }
                
@@ -1119,6 +1222,21 @@ UInt_t AliShuttleConfig::SetSysConfig(TList* list)
 
                anAttribute = anEntry->GetAttribute("fxsPasswd");
                if (anAttribute) fFXSPass[iSys] = anAttribute->GetValue();
+       
+               anAttribute = anEntry->GetAttribute("fxsAdmin"); // MAY
+               if (!anAttribute)
+               {
+                       AliDebug(2, "Warning! No \"fxsAdmin\" attribute!");
+               }
+               else
+               {
+                       const char* anAdmin;
+                       while ((anAdmin = anAttribute->GetValue()))
+                       {
+                               fAdmin[iSys]->AddLast(new TObjString(anAdmin));
+                       }
+               }
+       
        }
        
        if(count != 111) {
@@ -1243,8 +1361,34 @@ void AliShuttleConfig::Print(Option_t* option) const
        }
 
        result += Form("PP time out = %d - max PP mem size = %d KB - max retries = %d "
-                      "- DIM trigger waiting timeout = %d\n\n", 
+                      "- DIM trigger waiting timeout = %d\n", 
                                fPPTimeOut, fPPMaxMem, fMaxRetries, fTriggerWait);
+       result += Form("FLAGS: keepDCSMap = %d - keepTempFolder = %d - SendMail = %d \n", 
+                               fKeepDCSMap, fKeepTempFolder, fSendMail);
+       const TObjArray* shuttleAdmins = GetAdmins(kGlobal);
+       if (shuttleAdmins->GetEntries() != 0)
+       {
+               result += "SHUTTLE administrator(s): ";
+               TIter it(shuttleAdmins);
+               TObjString* anAdmin;
+               while ((anAdmin = (TObjString*) it.Next()))
+               {
+                       result += Form("%s ", anAdmin->String().Data());
+               }
+               result += "\n";
+       }
+       const TObjArray* amandaAdmins = GetAdmins(kAmanda);
+       if (amandaAdmins->GetEntries() != 0)
+       {
+               result += "Amanda server administrator(s): ";
+               TIter it(amandaAdmins);
+               TObjString* anAdmin;
+               while ((anAdmin = (TObjString*) it.Next()))
+               {
+                       result += Form("%s ", anAdmin->String().Data());
+               }
+               result += "\n\n";
+       }
        result += "------------------------------------------------------\n";
 
        result += Form("Logbook Configuration \n\n \tHost: %s:%d; \tUser: %s; ",
@@ -1256,7 +1400,7 @@ void AliShuttleConfig::Print(Option_t* option) const
                fDAQlbDB.Data(), fDAQlbTable.Data(), fShuttlelbTable.Data(), fRunTypelbTable.Data());
 
        result += "\n\n";
-
+       
        result += "------------------------------------------------------\n";
        result += "FXS configuration\n\n";
 
@@ -1266,9 +1410,21 @@ void AliShuttleConfig::Print(Option_t* option) const
                                                fFXSdbHost[iSys].Data(), fFXSdbPort[iSys], fFXSdbUser[iSys].Data(),
                                                fFXSdbName[iSys].Data(), fFXSdbTable[iSys].Data());
                // result += Form("DB Password:",fFXSdbPass[iSys].Data());
-               result += Form("\tFXS host: %s:%d; \tUser: %s\n\n", fFXSHost[iSys].Data(), fFXSPort[iSys],
+               result += Form("\tFXS host: %s:%d; \tUser: %s\n", fFXSHost[iSys].Data(), fFXSPort[iSys],
                                                fFXSUser[iSys].Data());
                // result += Form("FXS Password:",fFXSPass[iSys].Data());
+               const TObjArray* fxsAdmins = GetAdmins(iSys);
+               if (fxsAdmins->GetEntries() != 0)
+               {
+                       result += "\tAdministrator(s): ";
+                       TIter it(fxsAdmins);
+                       TObjString* anAdmin;
+                       while ((anAdmin = (TObjString*) it.Next()))
+                       {
+                               result += Form("%s ", anAdmin->String().Data());
+                       }
+                       result += "\n\n";
+               }
        }
 
        result += "------------------------------------------------------\n";
@@ -1278,7 +1434,7 @@ void AliShuttleConfig::Print(Option_t* option) const
                fMonitorHost.Data(), fMonitorTable.Data());
                
        result += "\n\n";
-       
+               
        TString optStr(option);
 
        result += "------------------------------------------------------\n";
index 1422a9fda05ded733fbcb1428933533ecb0bc1fa..d98ae22cf96e89fc0b9ac382a408270ef8c18d38 100644 (file)
@@ -21,6 +21,7 @@
 class AliShuttleConfig: public TObject {
 public:
        enum RunMode {kTest=0, kProd};
+        enum SystemCode { kDAQ = 0, kDCS, kHLT, kGlobal, kAmanda };
        
        AliShuttleConfig(const char* host, Int_t port = LDAP_PORT,
                        const char* binddn = 0, const char* password = 0,
@@ -40,23 +41,31 @@ public:
        const char* GetShuttlelbTable() const {return fShuttlelbTable.Data();}
        const char* GetRunTypelbTable() const {return fRunTypelbTable.Data();}
 
-       const char* GetFXSHost(Int_t system) const {return fFXSHost[system].Data();}
-       UInt_t      GetFXSPort(Int_t system) const {return fFXSPort[system];}
-       const char* GetFXSUser(Int_t system) const {return fFXSUser[system].Data();}
-       const char* GetFXSPass(Int_t system) const {return fFXSPass[system].Data();}
+       const char* GetFXSHost(Int_t sys) const {return fFXSHost[sys].Data();}
+       UInt_t      GetFXSPort(Int_t sys) const {return fFXSPort[sys];}
+       const char* GetFXSUser(Int_t sys) const {return fFXSUser[sys].Data();}
+       const char* GetFXSPass(Int_t sys) const {return fFXSPass[sys].Data();}
 
-       const char* GetFXSdbHost(Int_t system) const {return fFXSdbHost[system].Data();}
-       UInt_t      GetFXSdbPort(Int_t system) const {return fFXSdbPort[system];}
-       const char* GetFXSdbUser(Int_t system) const {return fFXSdbUser[system].Data();}
-       const char* GetFXSdbPass(Int_t system) const {return fFXSdbPass[system].Data();}
-       const char* GetFXSdbName(Int_t system) const {return fFXSdbName[system].Data();}
-       const char* GetFXSdbTable(Int_t system) const {return fFXSdbTable[system].Data();}
+       const char* GetFXSdbHost(Int_t sys) const {return fFXSdbHost[sys].Data();}
+       UInt_t      GetFXSdbPort(Int_t sys) const {return fFXSdbPort[sys];}
+       const char* GetFXSdbUser(Int_t sys) const {return fFXSdbUser[sys].Data();}
+       const char* GetFXSdbPass(Int_t sys) const {return fFXSdbPass[sys].Data();}
+       const char* GetFXSdbName(Int_t sys) const {return fFXSdbName[sys].Data();}
+       const char* GetFXSdbTable(Int_t sys) const {return fFXSdbTable[sys].Data();}
 
+       const TObjArray* GetAdmins(Int_t sys) const;
+       
+       Bool_t SendMail() const { return fSendMail; }
+       
        Int_t GetMaxRetries() const { return fMaxRetries; }
 
        Int_t GetPPTimeOut() const { return fPPTimeOut; }
        Int_t GetPPMaxMem() const { return fPPMaxMem; }
+
+       Bool_t KeepDCSMap() const { return fKeepDCSMap; }
+       Bool_t KeepTempFolder() const { return fKeepTempFolder; }
        
+               
        const char* GetMonitorHost() const {return fMonitorHost.Data();}
        const char* GetMonitorTable() const {return fMonitorTable.Data();}
 
@@ -206,9 +215,17 @@ private:
 
        TMap fDetectorMap;              // Map of the detector-by-detector configuration
        TObjArray fDetectorList;        // List of detectors with valid configuration
+       
+       TObjArray *fAdmin[4];           // Array of system administrators' email addresses (DAQ, DCS, HLT, Global, Amanda)
 
        TString fShuttleInstanceHost;   // Instance of the SHUTTLE
        TObjArray fProcessedDetectors;  // list of the detector to be processed by this machine
+       
+       Bool_t fKeepDCSMap;             // Flag to keep DCS map also in case of success 
+       Bool_t fKeepTempFolder;         // Flag to keep temp folder also in case of success
+
+       Bool_t fSendMail;               // Send mail flag
+       
        Bool_t fProcessAll;             // flag indicating that all detectors will be processed
        Bool_t fIsValid;                // flag for the validity of the configuration
 
index 2e465fd995d6033df968c4d3a31885c26ffa4bd3..6e58b2e9eeffb8e26dc511c375623609cba015b2 100644 (file)
@@ -12,4 +12,4 @@ dbTable: daqFES_files
 fxsHost: aldaqgw01-gpn.cern.ch
 fxsPort: 1443
 fxsUser: shuttle_test_rw
-
+fxsAdmin: sylvain.chapeland@cern.ch
\ No newline at end of file
index 005e2907189d8b973b22a0bdd05056b3fb6fec27..efbf0840018b6de5733cbeba2033411577da64ec 100644 (file)
@@ -10,4 +10,4 @@ dbName: dcsfileserver
 dbTable: dcsfes
 fxsHost: aldcs030.cern.ch
 fxsUser: sshd
-
+fxsAdmin: peter.chochula@cern.ch
index 7a80f25dd11d3cf0cef8c6941971cae480edf9c7..b7299790dafff46515a4781fa395aef42b7a5b38 100644 (file)
@@ -18,3 +18,9 @@ monitorHost: aliendb1.cern.ch
 monitorTable: SHUTTLE
 triggerWait: 10
 mode: test
+keepDCSMap: 0
+keepTempFolder: 0
+shuttleAdmin: alberto.colla@cern.ch
+shuttleAdmin: Jan.Fiete.Grosse-Oetringhaus@cern.ch
+amandaAdmin: svetozar.kapusta@cern.ch
+sendMail: 1
\ No newline at end of file
index 4fbf37c356a242d77bbefb1296c80f39c14c1b2d..41beebf511c9ece0f8923af50db41f0eddd580a1 100644 (file)
@@ -10,4 +10,4 @@ dbTable: calib_data
 dbHost: alihlt-shuttle1.cern.ch
 fxsHost: alihlt-shuttle1.cern.ch
 fxsUser: hlt-fxs
-
+fxsAdmin: sebastian.bablok@cern.ch
index d16b755c2c79a0446b0fb4892659a13300d64d41..d63bd1c7a072db1cab0c71f84b92db438adac5e3 100644 (file)
@@ -41,13 +41,14 @@ attributetype ( FXS_CONFIG:8  NAME 'fxsHost'         DESC 'FXS host'                     EQUALITY ca
 attributetype ( FXS_CONFIG:9  NAME 'fxsPort'    DESC 'FXS port'                                               SUP ipServicePort SINGLE-VALUE )
 attributetype ( FXS_CONFIG:10 NAME 'fxsUser'    DESC 'FXS user'                     EQUALITY caseIgnoreMatch  SUP name SINGLE-VALUE )
 attributetype ( FXS_CONFIG:11 NAME 'fxsPasswd'   DESC 'FXS Password'                EQUALITY caseIgnoreMatch  SUP name SINGLE-VALUE )
+attributetype ( FXS_CONFIG:12 NAME 'fxsAdmin'    DESC 'FXS admin(s) email address' EQUALITY caseIgnoreIA5Match SUP mail )
 
 objectclass ( FXS_CONFIG
         NAME 'fxsConfig'
         DESC 'ALICE: Configuration of the Shuttle for access to the File Exchange Servers'
         SUP top
         MUST (system $ dbHost $ dbUser $ dbPasswd $ dbName $ dbTable $ fxsHost $ fxsUser )
-        MAY ( dbPort $ fxsPasswd $ fxsPort) )
+        MAY ( dbPort $ fxsPasswd $ fxsPort $ fxsAdmin) )
 
 
 objectidentifier GLOBAL_CONFIG SHUTTLE_BASE:4
@@ -68,13 +69,19 @@ attributetype ( GLOBAL_CONFIG:13 NAME 'monitorTable'   DESC 'monitoring table na
 attributetype ( GLOBAL_CONFIG:14 NAME 'triggerWait'    DESC 'max time waiting for next trigger before starting a new collection'   
                                                                                           EQUALITY integerMatch       SUP uidNumber SINGLE-VALUE )
 attributetype ( GLOBAL_CONFIG:15 NAME 'mode'           DESC 'production mode (test, prod)' EQUALITY caseIgnoreMatch    SUP name SINGLE-VALUE )
+attributetype ( GLOBAL_CONFIG:16 NAME 'shuttleAdmin'    DESC 'SHUTTLE administrator(s) email address' EQUALITY caseIgnoreIA5Match SUP mail )
+attributetype ( GLOBAL_CONFIG:17 NAME 'amandaAdmin'    DESC 'Amanda admin(s) email address' EQUALITY caseIgnoreIA5Match SUP mail )
+
+attributetype ( GLOBAL_CONFIG:18 NAME 'sendMail'       DESC 'Send email flag (1/0)'  EQUALITY integerMatch       SUP uidNumber SINGLE-VALUE )
+attributetype ( GLOBAL_CONFIG:19 NAME 'keepDCSMap'     DESC 'keep DCS map flag (1/0)'  EQUALITY integerMatch       SUP uidNumber SINGLE-VALUE )
+attributetype ( GLOBAL_CONFIG:20 NAME 'keepTempFolder'         DESC 'keep temp folder flag (1/0)'  EQUALITY integerMatch       SUP uidNumber SINGLE-VALUE )
 
 objectclass ( GLOBAL_CONFIG
         NAME 'globalConfig'
         DESC 'ALICE: settings for DAQ logbook access'
         SUP top
         MUST (name $ daqLbHost $ daqLbUser $ daqLbPasswd $ daqLbDB $ daqLbTable $ shuttleLbTable $ runTypeLbTable $ ppMaxRetries $ ppTimeOut $ ppMaxMem $ monitorHost $ monitorTable)
-        MAY ( daqLbPort $ triggerWait $ mode) )
+        MAY ( daqLbPort $ triggerWait $ mode $ keepDCSMap $ keepTempFolder $ shuttleAdmin $ amandaAdmin $ sendMail) )
 
 
 objectidentifier INSTANCE_CONFIG SHUTTLE_BASE:5