}
+void AliEveConfigManager::ConnectEventManagerSignals()
+{
+ AliEveEventManager *manager = AliEveEventManager::GetCurrent();
+ manager->Connect("StorageManagerOk()","AliEveConfigManager",this,"StorageManagerChangedState(=1)");
+ manager->Connect("StorageManagerDown()","AliEveConfigManager",this,"StorageManagerChangedState(=0)");
+}
+
void AliEveConfigManager::AliEvePopupHandler(Int_t id)
{
// Handle user selections from AliEve popup.
}
*/
- case kStorageListEvents:
- {
+ case kStorageListEvents:
+ {
#ifdef ZMQ
- fListEventsWindow =
- AliStorageAdministratorPanelListEvents::GetInstance();
-
- fListEventsWindow->Connect("SelectedEvent()","AliEveConfigManager",this,"SetEventInEventManager()");
-#endif
-
- break;
-
- }
- case kStorageMarkEvent:
- {
+ fListEventsWindow =
+ AliStorageAdministratorPanelListEvents::GetInstance();
+
+ fListEventsWindow->Connect("SelectedEvent()","AliEveConfigManager",this,"SetEventInEventManager()");
+#endif
+ break;
+
+ }
+ case kStorageMarkEvent:
+ {
#ifdef ZMQ
- AliStorageAdministratorPanelMarkEvent *markEventWindow =
- AliStorageAdministratorPanelMarkEvent::GetInstance();
+ AliStorageAdministratorPanelMarkEvent *markEventWindow =
+ AliStorageAdministratorPanelMarkEvent::GetInstance();
#endif
- break;
-
- }
-
- default:
- {
- Warning(kEH, "Unknown menu entry.");
- break;
- }
+ break;
+ }
+
+ default:
+ {
+ Warning(kEH, "Unknown menu entry.");
+ break;
+ }
}
}
manager->SetAutoLoad(kFALSE);
manager->PrepareForNewEvent(event);
}
-
+}
+
+void AliEveConfigManager::StorageManagerChangedState(int state)
+{
+ if (state == 0)// storage manager is down
+ {
+ fStoragePopup->DisableEntry(kStorageListEvents);
+ fStoragePopup->DisableEntry(kStorageMarkEvent);
+ }
+ else if(state == 1)// storage manager is alive
+ {
+ fStoragePopup->EnableEntry(kStorageListEvents);
+ fStoragePopup->EnableEntry(kStorageMarkEvent);
+ }
}
void AliEvePopupHandler(Int_t id);
void SetEventInEventManager();
+ void StorageManagerChangedState(int state);
+
+ void ConnectEventManagerSignals();
protected:
static AliEveConfigManager* fgMaster; // Main instance.
#include "AliEveEventManager.h"
#include "AliEveEventSelector.h"
#include "AliEveMacroExecutor.h"
+#include "AliEveConfigManager.h"
+#include "AliEveVSDCreator.h"
#include <THashList.h>
#include <TEveElement.h>
AliEveEventManager* AliEveEventManager::fgMaster = 0;
AliEveEventManager* AliEveEventManager::fgCurrent = 0;
-void AliEveEventManager::GetNextEvent()
-{
-#ifdef ZMQ
- AliStorageEventManager *eventManager =
- AliStorageEventManager::GetEventManagerInstance();
- eventManager->CreateSocket(EVENTS_SERVER_SUB);
-
- fCurrentEvent[0]=0;
- fCurrentEvent[1]=0;
- fCurrentTree[0]=0;
- fCurrentTree[1]=0;
- AliESDEvent *tmpEvent = NULL;
- TTree *tmpTree = NULL;
-
- while(1)
- {
- //if(tmpEvent){delete tmpEvent;tmpEvent=0;}
- tmpEvent = eventManager->GetEvent(EVENTS_SERVER_SUB,-1,&tmpTree);
-
- if(tmpEvent)
- {
- if(tmpEvent->GetRunNumber()>=0)
- {
- fMutex.Lock();
- if(fEventInUse == 0){fWritingToEventIndex = 1;}
- else if(fEventInUse == 1){fWritingToEventIndex = 0;}
- cout<<"Writing to:"<<fWritingToEventIndex<<endl;
- if(fCurrentEvent[fWritingToEventIndex])
- {
- cout<<"DELETING:"<<fCurrentEvent[fWritingToEventIndex]<<endl;
- delete fCurrentEvent[fWritingToEventIndex];
- fCurrentEvent[fWritingToEventIndex]=0;
- delete fCurrentTree[fWritingToEventIndex];
- }
- fCurrentEvent[fWritingToEventIndex] = tmpEvent;
- fCurrentTree[fWritingToEventIndex] = tmpTree;
- fIsNewEventAvaliable = true;
- fMutex.UnLock();
- }
- }
- }
-#endif
-}
-
-void AliEveEventManager::InitInternals()
-{
- // Initialize internal members.
-
- static const TEveException kEH("AliEveEventManager::InitInternals ");
-
- if (fgCurrent != 0)
- {
- throw(kEH + "Dependent event-managers should be created via static method AddDependentManager().");
- }
-
- if (fgMaster == 0)
- {
- fgMaster = this;
- }
-
- fgCurrent = this;
-
- fAutoLoadTimer = new TTimer;
- fAutoLoadTimer->Connect("Timeout()", "AliEveEventManager", this, "AutoLoadNextEvent()");
- fAutoLoadTimer->Connect("Timeout()", "AliEveEventManager", this, "Timeout()");
-
- fExecutor = new AliEveMacroExecutor;
-
- fTransients = new TEveElementList("Transients", "Transient per-event elements.");
- fTransients->IncDenyDestroy();
- gEve->AddToListTree(fTransients, kFALSE);
-
- fTransientLists = new TEveElementList("Transient Lists", "Containers of transient elements.");
- fTransientLists->IncDenyDestroy();
- gEve->AddToListTree(fTransientLists, kFALSE);
-
- fPEventSelector = new AliEveEventSelector(this);
-
- fGlobal = new TMap; fGlobal->SetOwnerKeyValue();
-}
-
AliEveEventManager::AliEveEventManager(const TString& name, Int_t ev) :
TEveEventManager(name, ""),
fEventId(-1),
#ifdef ZMQ
cout<<"ZMQ FOUND. Starting subscriber thread."<<endl;
- fGetEventThread = new TThread("fGetEventThread",Dispatch,(void*)this);
- fGetEventThread->Run();
+ fEventListenerThread = new TThread("fEventListenerThread",DispatchEventListener,(void*)this);
+ fEventListenerThread->Run();
+
+ fStorageManagerWatcherThread = new TThread("fStorageManagerWatcherThread",DispatchStorageManagerWatcher,(void*)this);
+ fStorageManagerWatcherThread->Run();
#else
cout<<"NO ZMQ FOUND. Online events not avaliable."<<endl;
#endif
//delete fExecutor;
}
+void AliEveEventManager::GetNextEvent()
+{
+#ifdef ZMQ
+ AliStorageEventManager *eventManager =
+ AliStorageEventManager::GetEventManagerInstance();
+ eventManager->CreateSocket(EVENTS_SERVER_SUB);
+
+ fCurrentEvent[0]=0;
+ fCurrentEvent[1]=0;
+ fCurrentTree[0]=0;
+ fCurrentTree[1]=0;
+ AliESDEvent *tmpEvent = NULL;
+ TTree *tmpTree = NULL;
+
+ while(1)
+ {
+ //if(tmpEvent){delete tmpEvent;tmpEvent=0;}
+ tmpEvent = eventManager->GetEvent(EVENTS_SERVER_SUB,-1,&tmpTree);
+
+ if(tmpEvent)
+ {
+ if(tmpEvent->GetRunNumber()>=0)
+ {
+ fMutex.Lock();
+ if(fEventInUse == 0){fWritingToEventIndex = 1;}
+ else if(fEventInUse == 1){fWritingToEventIndex = 0;}
+ cout<<"Writing to:"<<fWritingToEventIndex<<endl;
+ if(fCurrentEvent[fWritingToEventIndex])
+ {
+ cout<<"DELETING:"<<fCurrentEvent[fWritingToEventIndex]<<endl;
+ delete fCurrentEvent[fWritingToEventIndex];
+ fCurrentEvent[fWritingToEventIndex]=0;
+ delete fCurrentTree[fWritingToEventIndex];
+ }
+ fCurrentEvent[fWritingToEventIndex] = tmpEvent;
+ fCurrentTree[fWritingToEventIndex] = tmpTree;
+ fIsNewEventAvaliable = true;
+ fMutex.UnLock();
+ }
+ }
+ }
+#endif
+}
+
+void AliEveEventManager::CheckStorageStatus()
+{
+#ifdef ZMQ
+ AliEveConfigManager *configManager = AliEveConfigManager::GetMaster();
+ configManager->ConnectEventManagerSignals();
+
+ AliStorageEventManager *eventManager = AliStorageEventManager::GetEventManagerInstance();
+ eventManager->CreateSocket(CLIENT_COMMUNICATION_REQ);
+
+ struct clientRequestStruct *request = new struct clientRequestStruct;
+ request->messageType = REQUEST_CONNECTION;
+
+ while (1)
+ {
+ if(eventManager->Send(request,CLIENT_COMMUNICATION_REQ,5000))
+ {
+ StorageManagerOk();
+ cout<<"WARNING -- Storage Manager is OK."<<endl;
+ long response = eventManager->GetLong(CLIENT_COMMUNICATION_REQ);
+ cout<<"RESPONSE:"<<response<<endl;
+ }
+ else
+ {
+ StorageManagerDown();
+ cout<<"WARNING -- Storage Manager is DOWN!!"<<endl;
+ }
+ sleep(1);
+ }
+#endif
+}
+
+void AliEveEventManager::InitInternals()
+{
+ // Initialize internal members.
+
+ static const TEveException kEH("AliEveEventManager::InitInternals ");
+
+ if (fgCurrent != 0)
+ {
+ throw(kEH + "Dependent event-managers should be created via static method AddDependentManager().");
+ }
+
+ if (fgMaster == 0)
+ {
+ fgMaster = this;
+ }
+
+ fgCurrent = this;
+
+ fAutoLoadTimer = new TTimer;
+ fAutoLoadTimer->Connect("Timeout()", "AliEveEventManager", this, "AutoLoadNextEvent()");
+ fAutoLoadTimer->Connect("Timeout()", "AliEveEventManager", this, "Timeout()");
+
+ fExecutor = new AliEveMacroExecutor;
+
+ fTransients = new TEveElementList("Transients", "Transient per-event elements.");
+ fTransients->IncDenyDestroy();
+ gEve->AddToListTree(fTransients, kFALSE);
+
+ fTransientLists = new TEveElementList("Transient Lists", "Containers of transient elements.");
+ fTransientLists->IncDenyDestroy();
+ gEve->AddToListTree(fTransientLists, kFALSE);
+
+ fPEventSelector = new AliEveEventSelector(this);
+
+ fGlobal = new TMap; fGlobal->SetOwnerKeyValue();
+}
+
/******************************************************************************/
void AliEveEventManager::SetESDFileName(const TString& esd, EVisibleESDTrees shown)
}
// Open RunLoader from galice.root
+// fgGAliceFileName = "/Users/Jerus/galice.root"; // temp
+
TFile *gafile = TFile::Open(fgGAliceFileName);
+ cout<<"Opening galice"<<endl;
if (gafile)
{
gafile->Close();
delete gafile;
+ cout<<"SETTING RUN LOADER in Open()"<<endl;
fRunLoader = AliRunLoader::Open(fgGAliceFileName, GetName());
if (fRunLoader)
{
}
gSystem->ProcessEvents();
-
- //if(fGetEventThread){delete fGetEventThread;fGetEventThread=0;}
+
+ /*
+ cout<<"VSD"<<endl;
+ AliEveVSDCreator *vsdCreator = new AliEveVSDCreator();
+ cout<<"contructor called"<<endl;
+ vsdCreator->CreateVSD("myVSD.root");
+ cout<<"PO"<<endl;
+*/
+ //if(fEventListenerThread){delete fEventListenerThread;fEventListenerThread=0;}
}
void AliEveEventManager::PrevEvent()
void AliEveEventManager::NewEventDataLoaded()
{
// Emit NewEventDataLoaded signal.
-
Emit("NewEventDataLoaded()");
}
-
void AliEveEventManager::NewEventLoaded()
{
// Emit NewEventLoaded signal.
-
Emit("NewEventLoaded()");
}
+void AliEveEventManager::StorageManagerOk()
+{
+ // Emit StorageManagerOk signal.
+ Emit("StorageManagerOk()");
+}
+void AliEveEventManager::StorageManagerDown()
+{
+ // Emit StorageManagerOk signal.
+ Emit("StorageManagerDown()");
+}
//------------------------------------------------------------------------------
virtual void AfterNewEventLoaded();
void NewEventDataLoaded(); // *SIGNAL*
void NewEventLoaded(); // *SIGNAL*
+ void StorageManagerOk(); // *SIGNAL*
+ void StorageManagerDown(); // *SIGNAL*
AliEveMacroExecutor* GetExecutor() const { return fExecutor; }
void InitOCDB(int runNo=-1);
static AliEveEventManager* fgMaster;
static AliEveEventManager* fgCurrent;
-
- static void* Dispatch(void *arg){static_cast<AliEveEventManager*>(arg)->GetNextEvent();}
+ static void* DispatchEventListener(void *arg){static_cast<AliEveEventManager*>(arg)->GetNextEvent();}
+ static void* DispatchStorageManagerWatcher(void *arg){static_cast<AliEveEventManager*>(arg)->CheckStorageStatus();}
void GetNextEvent();
- TThread *fGetEventThread;
+ void CheckStorageStatus();
+ TThread *fEventListenerThread;
+ TThread *fStorageManagerWatcherThread;
TMutex fMutex;
AliESDEvent *fCurrentEvent[2];
TTree *fCurrentTree[2];
fTrigSel->Select(-1,kFALSE);
f->AddFrame(fTrigSel, new TGLayoutHints(kLHintsNormal, 10, 5, 0, 0));
fTrigSel->Connect("Selected(char*)", cls, this, "DoSetTrigSel()");
- }
+ fStorageStatus = MkLabel(f,"Storage: Waiting",0,8,8);
+
+ }
+
fEventInfo = new TGTextView(this, 400, 600);
AddFrame(fEventInfo, new TGLayoutHints(kLHintsNormal | kLHintsExpandX | kLHintsExpandY));
fM->Connect("NewEventLoaded()", cls, this, "Update()");
+ fM->Connect("StorageManagerOk()",cls,this,"StorageManagerChangedState(=1)");
+ fM->Connect("StorageManagerDown()",cls,this,"StorageManagerChangedState(=0)");
SetCleanup(kDeepCleanup);
Layout();
Layout();
}
+void AliEveEventManagerWindow::StorageManagerChangedState(int state)
+{
+ if (state == 0)
+ {
+ fStorageStatus->SetText("Storage: DOWN");
+ fMarkEvent->SetEnabled(false);
+ }
+ else if(state == 1)
+ {
+ fStorageStatus->SetText("Storage: OK");
+ fMarkEvent->SetEnabled(true);
+ }
+}
+
//------------------------------------------------------------------------------
// Protected methods
//------------------------------------------------------------------------------
void DoSetTrigSel();
void Update();
+
+ void StorageManagerChangedState(int state);
protected:
AliEveEventManager *fM; // Model object.
TEveGValuator *fAutoLoadTime; // Time for automatic loading of events
TGComboBox *fTrigSel; // Trigger selection combo box
+ TGLabel *fStorageStatus; // Display status of Storage Manager
TGTextView *fEventInfo; // Text box with event info
//______________DEFAULT SETTINGS________________
#define DEFAULT_SERVER_HOST "tcp://*"
#define DEFAULT_SERVER_PORT 5024
-#define DEFAULT_SERVER_SAVE_RECO_DIR "/opt/reco"
-#define DEFAULT_CDB_STORAGE "local:///opt/OCDB/2013"
-#define DEFAULT_CDB_SPEC_STORAGE_PATH1 "opt/reco/GRP/GRP/Data"
+#define DEFAULT_SERVER_SAVE_RECO_DIR "/local/reco"
+#define DEFAULT_CDB_STORAGE "local:///local/OCDB/2013"
+#define DEFAULT_CDB_SPEC_STORAGE_PATH1 "/local/reco/GRP/GRP/Data"
#define DEFAULT_CDB_SPEC_STORAGE_VALUE1 ""
-#define DEFAULT_CDB_SPEC_STORAGE_PATH2 "opt/reco/GRP/CTP/Config"
+#define DEFAULT_CDB_SPEC_STORAGE_PATH2 "/local/reco/GRP/CTP/Config"
#define DEFAULT_CDB_SPEC_STORAGE_VALUE2 ""
#define DEFAULT_CDB_SPEC_STORAGE_PATH3 ""
#define DEFAULT_CDB_SPEC_STORAGE_VALUE3 ""
server.host: tcp://*
server.port: 5024
-server.saveRecoDir: /opt/reco
-cdb.defaultStorage: local:///opt/OCDB/2013
-cdb.specificStoragePath1: local:///opt/reco/GRP/GRP/Data
+server.saveRecoDir: /local/reco
+cdb.defaultStorage: local:///local/OCDB/2013
+cdb.specificStoragePath1: local:///local/reco/GRP/GRP/Data
cdb.specificStorageValue1:
-cdb.specificStoragePath2: local:///opt/reco/GRP/CTP/Config
+cdb.specificStoragePath2: local:///local/reco/GRP/CTP/Config
cdb.specificStorageValue2:
cdb.specificStoragePath3:
cdb.specificStorageValue3:
// global variables:
AliESDEvent *currentEvent[2];
TTree *currentTree[2];
-TMutex mutex;
+TMutex myMutex;
int eventInUse=1;
int writingToEventIndex=0;
bool isNewEventAvaliable=false;
if(isNewEventAvaliable)
{
cout<<"new event"<<endl;
- mutex.Lock();
+ myMutex.Lock();
if(writingToEventIndex == 0) eventInUse = 0;
else if(writingToEventIndex == 1) eventInUse = 1;
cout<<"Using:"<<eventInUse<<endl;
}
}
isNewEventAvaliable = false;
- mutex.UnLock();
+ myMutex.UnLock();
}
else{cout<<"No new event is avaliable."<<endl;}
{
if(tmpEvent->GetRunNumber()>=0)
{
- mutex.Lock();
+ myMutex.Lock();
if(eventInUse == 0){writingToEventIndex = 1;}
else if(eventInUse == 1){writingToEventIndex = 0;}
cout<<"Writing to:"<<writingToEventIndex<<endl;
currentEvent[writingToEventIndex] = tmpEvent;
currentTree[writingToEventIndex] = tmpTree;
isNewEventAvaliable = true;
- mutex.UnLock();
+ myMutex.UnLock();
}
}
}
USER="storage"
PASS="storage123"
TABLE="events"
-STORAGE_PATH="/local/home/edis/storedFiles"
+STORAGE_PATH="/Users/Jerus/storedFiles"
MAX_SIZE="10000000"
MAX_OCCUPATION="80"
REMOVE_PERCENT="60"
--- /dev/null
+// !$*UTF8*$!
+{
+ archiveVersion = 1;
+ classes = {
+ };
+ objectVersion = 46;
+ objects = {
+
+/* Begin PBXGroup section */
+ E60595D7199B671F009B3D1B = {
+ isa = PBXGroup;
+ children = (
+ );
+ sourceTree = "<group>";
+ };
+/* End PBXGroup section */
+
+/* Begin PBXProject section */
+ E60595D8199B671F009B3D1B /* Project object */ = {
+ isa = PBXProject;
+ attributes = {
+ LastUpgradeCheck = 0600;
+ };
+ buildConfigurationList = E60595DB199B671F009B3D1B /* Build configuration list for PBXProject "xAliroot" */;
+ compatibilityVersion = "Xcode 3.2";
+ developmentRegion = English;
+ hasScannedForEncodings = 0;
+ knownRegions = (
+ en,
+ );
+ mainGroup = E60595D7199B671F009B3D1B;
+ projectDirPath = "";
+ projectRoot = "";
+ targets = (
+ );
+ };
+/* End PBXProject section */
+
+/* Begin XCBuildConfiguration section */
+ E60595DC199B671F009B3D1B /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Debug;
+ };
+ E60595DD199B671F009B3D1B /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ };
+ name = Release;
+ };
+/* End XCBuildConfiguration section */
+
+/* Begin XCConfigurationList section */
+ E60595DB199B671F009B3D1B /* Build configuration list for PBXProject "xAliroot" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ E60595DC199B671F009B3D1B /* Debug */,
+ E60595DD199B671F009B3D1B /* Release */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
+/* End XCConfigurationList section */
+ };
+ rootObject = E60595D8199B671F009B3D1B /* Project object */;
+}