last run is stored after each run
[u/mrichter/AliRoot.git] / SHUTTLE / AliShuttleTrigger.h
1 #ifndef ALI_SHUTTLE_TRIGGER_H
2 #define ALI_SHUTTLE_TRIGGER_H
3
4 /* Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
5  * See cxx source for full Copyright notice                               */
6
7 /* $Id$ */
8
9 //
10 // This class is to deal with DAQ LogBook and DAQ end run notification.
11 // It executes AliShuttle for retrieval of conditions data.
12 // For more info see AliShuttleTrigger.cxx
13 //
14
15 #include <TObject.h>
16 #include <TSysEvtHandler.h>
17 #include <TMutex.h>
18 #include <TCondition.h>
19
20
21 class AliCDBStorage;
22 class AliShuttle;
23 class AliShuttleConfig;
24
25 class AliShuttleTrigger;
26 class DATENotifier;
27
28 class TerminateSignalHandler: public TSignalHandler {
29         
30 public:
31         TerminateSignalHandler(): TSignalHandler((ESignals) 0,0), fTrigger(0) { }
32         TerminateSignalHandler(AliShuttleTrigger* trigger, ESignals signal):
33                 TSignalHandler(signal, kFALSE), fTrigger(trigger) {}
34
35         virtual ~TerminateSignalHandler() { }
36         virtual Bool_t Notify();
37
38 private:
39
40         TerminateSignalHandler(const TerminateSignalHandler& other);    
41         TerminateSignalHandler& operator= (const TerminateSignalHandler& other);        
42
43         AliShuttleTrigger* fTrigger;  // pointer to the current AliShuttleTrigger
44
45         ClassDef(TerminateSignalHandler, 0)
46 };
47
48 class AliShuttleTrigger: public TObject {
49 public:
50         AliShuttleTrigger(const AliShuttleConfig* config, UInt_t timeout = 5000, Int_t retries = 5);
51         ~AliShuttleTrigger();
52
53         AliShuttle* GetShuttle() {return fShuttle;}
54
55         Bool_t Collect(Int_t run);
56         Bool_t CollectNew();
57         Bool_t CollectAll();
58
59   Bool_t SetNewLastRun(Int_t run);
60
61         virtual Bool_t Notify();
62         void Terminate();
63
64         void Run();
65
66 private:
67
68         AliShuttleTrigger(const AliShuttleTrigger& other);
69         AliShuttleTrigger& operator= (const AliShuttleTrigger& other);
70
71         class AliShuttleTriggerDATEEntry: public TObject {
72         public:
73                 AliShuttleTriggerDATEEntry(Int_t run, UInt_t startTime, UInt_t endTime):
74                         fRun(run), fStartTime(startTime), fEndTime(endTime) {}
75
76                 Int_t GetRun() const {return fRun;}
77                 UInt_t GetStartTime() const  {return fStartTime;}
78                 UInt_t GetEndTime() const {return fEndTime;}
79
80         private:
81                 Int_t fRun;             // Run number
82                 UInt_t fStartTime;      // Run start time
83                 UInt_t fEndTime;        // Run end time
84                 ClassDef(AliShuttleTriggerDATEEntry, 0)
85         };
86
87         Bool_t RetrieveDATEEntries(const char* whereClause, TObjArray& entries);
88         Bool_t RetrieveConditionsData(const TObjArray& dateEntries, Bool_t updateLastRun);
89
90   Bool_t ReadLastRun();
91   Bool_t WriteLastRun();
92
93         const AliShuttleConfig* fConfig;
94         //AliCDBStorage* fLocalStorage;
95
96         AliShuttle* fShuttle;           // Pointer to the actual Shuttle instance
97
98         Bool_t fNotified;               // Notified flag
99         Bool_t fTerminate;              // Terminate flag
100
101         Int_t fLastRun; // last sucessfully processed run
102
103         TMutex fMutex;                  // Mutex
104         TCondition fCondition;          // Condition 
105
106         TerminateSignalHandler fQuitSignalHandler;              // Quit signal 
107         TerminateSignalHandler fInterruptSignalHandler;         // Interrupt signal
108
109
110         ClassDef(AliShuttleTrigger, 0)
111 };
112
113 #endif