1 #include "AliStorageAdministratorPanel.h"
2 #include "AliStorageAdministratorPanelMarkEvent.h"
3 #include "AliStorageAdministratorPanelListEvents.h"
4 #include "AliStorageAdministratorPanelSetStorageParams.h"
5 #include "AliESDEvent.h"
14 ClassImp(AliStorageAdministratorPanel);
16 #define WINDOWS_WIDTH 500
17 #define WINDOWS_HEIGHT 350
22 TOOLBUTTON_PREFERENCES,
27 MENUBAR_CLIENT_SET_PARAMS=1,
28 MENUBAR_SERVER_LIST_EVENTS,
29 MENUBAR_SERVER_MARK_EVENT,
30 MENUBAR_SERVER_GET_EVENT,
31 MENUBAR_SERVER_GET_NEXT_EVENT,
32 MENUBAR_SERVER_GET_LAST_EVENT
40 AliStorageAdministratorPanel::AliStorageAdministratorPanel() :
41 TGMainFrame(gClient->GetRoot(), 400, 400),
48 fMaxOccupationLabel(0),
49 fRemoveEventsLabel(0),
50 fEventsInChunkLabel(0),
55 fCommunicationThread(0),
56 fCommunicationSocket(CLIENT_COMMUNICATION_REQ),
57 fServerSocket(SERVER_COMMUNICATION_REQ),
62 //create event manager
63 fEventManager = AliStorageEventManager::GetEventManagerInstance();
64 fEventManager->CreateSocket(fServerSocket);
65 fEventManager->CreateSocket(fCommunicationSocket);
67 // start communication with client thread
68 fCommunicationThread = new TThread("fCommunicationThread",
69 Dispatch,(void*)this);
70 fCommunicationThread->Run();
73 AliStorageAdministratorPanel::~AliStorageAdministratorPanel()
75 cout<<"ADMIN -- AliStorageAdministratorPanel descructor called";
76 cout<<" --- OK"<<endl;
79 void AliStorageAdministratorPanel::CheckStateHandle()//ask client about its state
83 CheckClientState(REQUEST_CONNECTION);
85 CheckClientState(REQUEST_RECEIVING);
87 CheckClientState(REQUEST_SAVING);
89 CheckClientState(REQUEST_CURRENT_SIZE);
91 CheckClientState(REQUEST_GET_PARAMS);
96 void AliStorageAdministratorPanel::CheckClientState(int option)
98 struct clientRequestStruct *request = new struct clientRequestStruct;
99 request->messageType = option;
100 if(!fEventManager->Send(request,fCommunicationSocket,10000))
102 SetLabel(fConnectionLabel,STATUS_DOWN);
103 SetLabel(fDataLabel,STATUS_DOWN);
104 SetLabel(fSavingLabel,STATUS_DOWN);
105 cout<<"ADMIN -- CLIENT IS DOWN"<<endl;
110 struct clientRequestStruct *responseParams = NULL;
112 if(option == REQUEST_GET_PARAMS)
114 responseParams = fEventManager->GetClientStruct(fCommunicationSocket);
118 response = fEventManager->GetLong(fCommunicationSocket);
122 case REQUEST_CONNECTION:
123 SetLabel(fConnectionLabel,response);
125 case REQUEST_RECEIVING:
126 SetLabel(fDataLabel,response);
129 SetLabel(fSavingLabel,response);
131 case REQUEST_CURRENT_SIZE:
132 SetLabelValue(fCurrentSizeLabel,response,1);
134 case REQUEST_GET_PARAMS:
135 fMaxStorageSize = responseParams->maxStorageSize;
136 fMaxOccupation = responseParams->maxOccupation;
137 fRemoveEvents = responseParams->removeEvents;
138 fEventsInChunk = responseParams->eventsInChunk;
140 SetLabelValue(fMaxSizeLabel,fMaxStorageSize,1);
141 SetLabelValue(fMaxOccupationLabel,fMaxOccupation,2);
142 SetLabelValue(fRemoveEventsLabel,fRemoveEvents,2);
143 SetLabelValue(fEventsInChunkLabel,fEventsInChunk,3);
147 if(request){delete request;}
150 void AliStorageAdministratorPanel::InitWindow()
152 SetCleanup(kDeepCleanup);
153 // add main manubar on top of the window
155 AddFrame(new TGHorizontal3DLine(this),
156 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
157 // add toolbar with pictured buttons
159 AddFrame(new TGHorizontal3DLine(this),
160 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
161 // add dockable toolbar
162 SetupDockableMenuBar();
163 AddFrame(new TGHorizontal3DLine(this),
164 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
167 // add frame with two segments for client and server
169 SetWindowName("ALICE Storage Manager");
171 Resize(WINDOWS_WIDTH,WINDOWS_HEIGHT);
175 void AliStorageAdministratorPanel::SetupThreadsFrame()
177 // create frame for both client and server
178 TGHorizontalFrame *threadsFrame = new TGHorizontalFrame(this);
180 //create client frame and add components to it
181 TGCompositeFrame *clientThreadFrame = new TGCompositeFrame(threadsFrame,CLIENT_FRAME);
182 fConnectionLabel = new TGLabel(clientThreadFrame,"======Waiting======");
183 fDataLabel = new TGLabel(clientThreadFrame,"======Waiting======");
184 fSavingLabel = new TGLabel(clientThreadFrame,"======Waiting======");
185 fCurrentSizeLabel = new TGLabel(clientThreadFrame,"=========Waiting=========");
186 fMaxSizeLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
187 fMaxOccupationLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
188 fRemoveEventsLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
189 fEventsInChunkLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
191 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
192 "ALICE Storage Client"),
193 new TGLayoutHints(kLHintsCenterX));
196 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
198 new TGLayoutHints(kLHintsCenterX));
199 clientThreadFrame->AddFrame(fConnectionLabel,
200 new TGLayoutHints(kLHintsCenterX));
202 //data receiving label
203 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
205 new TGLayoutHints(kLHintsCenterX));
206 clientThreadFrame->AddFrame(fDataLabel,
207 new TGLayoutHints(kLHintsCenterX));
210 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
212 new TGLayoutHints(kLHintsCenterX));
213 clientThreadFrame->AddFrame(fSavingLabel,
214 new TGLayoutHints(kLHintsCenterX));
217 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
218 "Current storage size:"),
219 new TGLayoutHints(kLHintsCenterX));
220 clientThreadFrame->AddFrame(fCurrentSizeLabel,
221 new TGLayoutHints(kLHintsCenterX));
224 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
225 "Max storage size:"),
226 new TGLayoutHints(kLHintsCenterX));
227 clientThreadFrame->AddFrame(fMaxSizeLabel,
228 new TGLayoutHints(kLHintsCenterX));
230 //max occupation label
231 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
232 "Max occupation percent:"),
233 new TGLayoutHints(kLHintsCenterX));
234 clientThreadFrame->AddFrame(fMaxOccupationLabel,
235 new TGLayoutHints(kLHintsCenterX));
237 //remove events label
238 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
239 "Remove events percentage:"),
240 new TGLayoutHints(kLHintsCenterX));
241 clientThreadFrame->AddFrame(fRemoveEventsLabel,
242 new TGLayoutHints(kLHintsCenterX));
244 //events in chunk label
245 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
246 "Number of events in chunk:"),
247 new TGLayoutHints(kLHintsCenterX));
248 clientThreadFrame->AddFrame(fEventsInChunkLabel,
249 new TGLayoutHints(kLHintsCenterX));
251 //create server frame and add components to it
252 TGCompositeFrame *serverThreadFrame = new TGCompositeFrame(threadsFrame,SERVER_FRAME);
253 serverThreadFrame->AddFrame(new TGLabel(serverThreadFrame,
254 "ALICE Storage Server"),
255 new TGLayoutHints(kLHintsCenterX));
257 //add client and server frames to threads frame
258 threadsFrame->AddFrame(clientThreadFrame,
259 new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
260 threadsFrame->AddFrame(new TGVertical3DLine(threadsFrame),
261 new TGLayoutHints(kLHintsNormal | kLHintsExpandY));
262 threadsFrame->AddFrame(serverThreadFrame,
263 new TGLayoutHints(kLHintsRight | kLHintsExpandX));
265 //add threads frame to main window
266 AddFrame(threadsFrame,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
269 void AliStorageAdministratorPanel::SetupFixedMenuBar()
271 //create popup menu for client
272 TGPopupMenu *clientPopup = new TGPopupMenu(fClient->GetRoot());
273 clientPopup->AddEntry("&Set storage params",MENUBAR_CLIENT_SET_PARAMS);
274 clientPopup->Associate(this);
276 //create popup menu for server
277 TGPopupMenu *serverPopup = new TGPopupMenu(fClient->GetRoot());
278 serverPopup->AddEntry("&Get Events List",MENUBAR_SERVER_LIST_EVENTS);
279 serverPopup->AddEntry("&Mark Event",MENUBAR_SERVER_MARK_EVENT);
280 serverPopup->AddEntry("&Get Event (test)",MENUBAR_SERVER_GET_EVENT);
281 serverPopup->AddEntry("&Get Next Event (test)",MENUBAR_SERVER_GET_NEXT_EVENT);
282 serverPopup->AddEntry("&Get Last Event (test)",MENUBAR_SERVER_GET_LAST_EVENT);
283 serverPopup->Associate(this);
286 TGMenuBar *menuBar = new TGMenuBar(this,1,1,kHorizontalFrame);
287 menuBar->AddPopup("&Client",clientPopup,
288 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
289 menuBar->AddPopup("&Server", serverPopup,
290 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
292 AddFrame(menuBar,new TGLayoutHints(kLHintsTop | kLHintsExpandX));
296 Bool_t AliStorageAdministratorPanel::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
298 switch (GET_MSG(msg))
302 switch (GET_SUBMSG(msg))
304 case kCM_BUTTON://when button is pressed
306 case kCM_MENUSELECT://when mouse is over menu entry
308 case kCM_MENU://when menu entry was clicked
311 case MENUBAR_CLIENT_SET_PARAMS:onClientSetParams();break;
312 case MENUBAR_SERVER_LIST_EVENTS:onServerListEvents();break;
313 case MENUBAR_SERVER_MARK_EVENT:onServerMarkEvent();break;
314 case MENUBAR_SERVER_GET_EVENT:onServerGetEvent();break;
315 case MENUBAR_SERVER_GET_NEXT_EVENT:onServerGetNextEvent();break;
316 case MENUBAR_SERVER_GET_LAST_EVENT:onServerGetLastEvent();break;
329 void AliStorageAdministratorPanel::onServerListEvents()
331 AliStorageAdministratorPanelListEvents *listEventsWindow =
332 AliStorageAdministratorPanelListEvents::GetInstance();
333 if(listEventsWindow){cout<<"List events window created"<<endl;}
336 void AliStorageAdministratorPanel::onServerMarkEvent()
338 AliStorageAdministratorPanelMarkEvent *markEventWindow =
339 AliStorageAdministratorPanelMarkEvent::GetInstance();
340 if(markEventWindow){cout<<"Mark event window created"<<endl;}
343 void AliStorageAdministratorPanel::onClientSetParams()
345 AliStorageAdministratorPanelSetStorageParams *setParamsWindow =
346 AliStorageAdministratorPanelSetStorageParams::GetInstance();
348 setParamsWindow->Setup(fCommunicationSocket,
349 fMaxStorageSize/1000000,
355 void AliStorageAdministratorPanel::onServerGetEvent()
357 //this method is just for tests
358 int runNumber=197669;
361 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
362 struct eventStruct mark;
363 mark.runNumber = runNumber;
364 mark.eventNumber = eventNumber;
365 requestMessage->messageType = REQUEST_GET_EVENT;
366 requestMessage->event = mark;
368 fEventManager->Send(requestMessage,fServerSocket);
369 AliESDEvent *resultEvent = fEventManager->GetEvent(fServerSocket);
373 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
377 cout<<"ADMIN -- received no event"<<endl;
382 void AliStorageAdministratorPanel::onServerGetNextEvent()
384 //this method is just for tests
385 int runNumber=197669;
388 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
389 struct eventStruct mark;
390 mark.runNumber = runNumber;
391 mark.eventNumber = eventNumber;
392 requestMessage->messageType = REQUEST_GET_NEXT_EVENT;
393 requestMessage->event = mark;
395 fEventManager->Send(requestMessage,fServerSocket);
396 AliESDEvent* resultEvent= fEventManager->GetEvent(fServerSocket);
399 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
403 cout<<"ADMIN -- received no event"<<endl;
408 void AliStorageAdministratorPanel::onServerGetLastEvent()
410 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
411 requestMessage->messageType = REQUEST_GET_LAST_EVENT;
413 fEventManager->Send(requestMessage,fServerSocket);
414 AliESDEvent* resultEvent= fEventManager->GetEvent(fServerSocket);
418 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
422 cout<<"ADMIN -- received no event"<<endl;
426 void AliStorageAdministratorPanel::onExit()
428 cout<<"ADMIN -- Quiting ALICE Storage Admin Panel"<<endl;
433 void AliStorageAdministratorPanel::CloseWindow(){onExit();}
436 //methods to change labels:
437 void AliStorageAdministratorPanel::SetLabel(TGLabel *label, int option)
442 label->SetText("Waiting");
443 label->SetTextColor(kBlack);
446 label->SetText("OK");
447 label->SetTextColor(kBlack);
450 label->SetText("ERROR");
451 label->SetTextColor(kBlack);
454 label->SetText("CLIENT IS DOWN");
455 label->SetTextColor(kRed);
459 gClient->HandleInput();
462 void AliStorageAdministratorPanel::SetLabelValue(TGLabel *label, long value,int option)
472 label->SetText(Form("%lu B (%.2f MB)",value,(float)value/(1000.*1000.)));
475 label->SetText(Form("%d %%",(int)value));
478 label->SetText(Form("%d",(int)value));
482 label->SetTextColor(kBlack);
483 gClient->HandleInput();
485 //other methods that can be useful later
488 void AliStorageAdministratorPanel::SetupToolbar()
490 TGToolBar* toolBar = new TGToolBar(this);
491 toolBar->AddButton(this,new TGPictureButton(toolBar,
492 Form("%s/MONITOR/icons/start.png",
493 gSystem->Getenv("ALICE_ROOT")),
494 TOOLBUTTON_START ) );
495 toolBar->AddButton(this, new TGPictureButton(toolBar,
496 Form("%s/MONITOR/icons/stop.png",
497 gSystem->Getenv("ALICE_ROOT")),
500 AddFrame(toolBar, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
503 void AliStorageAdministratorPanel::SetupDockableMenuBar()
505 TGDockableFrame *menuDock = new TGDockableFrame(this);
506 AddFrame(menuDock,new TGLayoutHints(kLHintsExpandX,0,0,1,0));
507 menuDock->SetWindowName("ALICE Storage Dockable MenuBar");
508 menuDock->EnableUndock(kTRUE);
509 menuDock->EnableHide(kTRUE);
511 TGPopupMenu *popup1 = new TGPopupMenu(fClient->GetRoot());
512 popup1->AddEntry("&Check client state",MENUBAR_1_OPTION_1);
513 popup1->AddSeparator();
514 popup1->AddEntry("&BBB",MENUBAR_1_OPTION_2);
515 popup1->AddEntry("&CCC",MENUBAR_1_OPTION_3);
517 popup1->DisableEntry(MENUBAR_1_OPTION_2);
518 popup1->Associate(this);
521 TGMenuBar *menuBar = new TGMenuBar(menuDock,1,1,kHorizontalFrame);
522 menuBar->AddPopup("&File",
524 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
526 menuDock->AddFrame(menuBar,
527 new TGLayoutHints(kLHintsTop | kLHintsExpandX));