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);
149 void AliStorageAdministratorPanel::InitWindow()
151 SetCleanup(kDeepCleanup);
152 // add main manubar on top of the window
154 AddFrame(new TGHorizontal3DLine(this),
155 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
156 // add toolbar with pictured buttons
158 AddFrame(new TGHorizontal3DLine(this),
159 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
160 // add dockable toolbar
161 SetupDockableMenuBar();
162 AddFrame(new TGHorizontal3DLine(this),
163 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
166 // add frame with two segments for client and server
168 SetWindowName("ALICE Storage Manager");
170 Resize(WINDOWS_WIDTH,WINDOWS_HEIGHT);
174 void AliStorageAdministratorPanel::SetupThreadsFrame()
176 // create frame for both client and server
177 TGHorizontalFrame *threadsFrame = new TGHorizontalFrame(this);
179 //create client frame and add components to it
180 TGCompositeFrame *clientThreadFrame = new TGCompositeFrame(threadsFrame,CLIENT_FRAME);
181 fConnectionLabel = new TGLabel(clientThreadFrame,"======Waiting======");
182 fDataLabel = new TGLabel(clientThreadFrame,"======Waiting======");
183 fSavingLabel = new TGLabel(clientThreadFrame,"======Waiting======");
184 fCurrentSizeLabel = new TGLabel(clientThreadFrame,"=========Waiting=========");
185 fMaxSizeLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
186 fMaxOccupationLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
187 fRemoveEventsLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
188 fEventsInChunkLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
190 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
191 "ALICE Storage Client"),
192 new TGLayoutHints(kLHintsCenterX));
195 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
197 new TGLayoutHints(kLHintsCenterX));
198 clientThreadFrame->AddFrame(fConnectionLabel,
199 new TGLayoutHints(kLHintsCenterX));
201 //data receiving label
202 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
204 new TGLayoutHints(kLHintsCenterX));
205 clientThreadFrame->AddFrame(fDataLabel,
206 new TGLayoutHints(kLHintsCenterX));
209 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
211 new TGLayoutHints(kLHintsCenterX));
212 clientThreadFrame->AddFrame(fSavingLabel,
213 new TGLayoutHints(kLHintsCenterX));
216 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
217 "Current storage size:"),
218 new TGLayoutHints(kLHintsCenterX));
219 clientThreadFrame->AddFrame(fCurrentSizeLabel,
220 new TGLayoutHints(kLHintsCenterX));
223 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
224 "Max storage size:"),
225 new TGLayoutHints(kLHintsCenterX));
226 clientThreadFrame->AddFrame(fMaxSizeLabel,
227 new TGLayoutHints(kLHintsCenterX));
229 //max occupation label
230 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
231 "Max occupation percent:"),
232 new TGLayoutHints(kLHintsCenterX));
233 clientThreadFrame->AddFrame(fMaxOccupationLabel,
234 new TGLayoutHints(kLHintsCenterX));
236 //remove events label
237 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
238 "Remove events percentage:"),
239 new TGLayoutHints(kLHintsCenterX));
240 clientThreadFrame->AddFrame(fRemoveEventsLabel,
241 new TGLayoutHints(kLHintsCenterX));
243 //events in chunk label
244 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
245 "Number of events in chunk:"),
246 new TGLayoutHints(kLHintsCenterX));
247 clientThreadFrame->AddFrame(fEventsInChunkLabel,
248 new TGLayoutHints(kLHintsCenterX));
250 //create server frame and add components to it
251 TGCompositeFrame *serverThreadFrame = new TGCompositeFrame(threadsFrame,SERVER_FRAME);
252 serverThreadFrame->AddFrame(new TGLabel(serverThreadFrame,
253 "ALICE Storage Server"),
254 new TGLayoutHints(kLHintsCenterX));
256 //add client and server frames to threads frame
257 threadsFrame->AddFrame(clientThreadFrame,
258 new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
259 threadsFrame->AddFrame(new TGVertical3DLine(threadsFrame),
260 new TGLayoutHints(kLHintsNormal | kLHintsExpandY));
261 threadsFrame->AddFrame(serverThreadFrame,
262 new TGLayoutHints(kLHintsRight | kLHintsExpandX));
264 //add threads frame to main window
265 AddFrame(threadsFrame,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
268 void AliStorageAdministratorPanel::SetupFixedMenuBar()
270 //create popup menu for client
271 TGPopupMenu *clientPopup = new TGPopupMenu(fClient->GetRoot());
272 clientPopup->AddEntry("&Set storage params",MENUBAR_CLIENT_SET_PARAMS);
273 clientPopup->Associate(this);
275 //create popup menu for server
276 TGPopupMenu *serverPopup = new TGPopupMenu(fClient->GetRoot());
277 serverPopup->AddEntry("&Get Events List",MENUBAR_SERVER_LIST_EVENTS);
278 serverPopup->AddEntry("&Mark Event",MENUBAR_SERVER_MARK_EVENT);
279 serverPopup->AddEntry("&Get Event (test)",MENUBAR_SERVER_GET_EVENT);
280 serverPopup->AddEntry("&Get Next Event (test)",MENUBAR_SERVER_GET_NEXT_EVENT);
281 serverPopup->AddEntry("&Get Last Event (test)",MENUBAR_SERVER_GET_LAST_EVENT);
282 serverPopup->Associate(this);
285 TGMenuBar *menuBar = new TGMenuBar(this,1,1,kHorizontalFrame);
286 menuBar->AddPopup("&Client",clientPopup,
287 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
288 menuBar->AddPopup("&Server", serverPopup,
289 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
291 AddFrame(menuBar,new TGLayoutHints(kLHintsTop | kLHintsExpandX));
295 Bool_t AliStorageAdministratorPanel::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
297 switch (GET_MSG(msg))
301 switch (GET_SUBMSG(msg))
303 case kCM_BUTTON://when button is pressed
305 case kCM_MENUSELECT://when mouse is over menu entry
307 case kCM_MENU://when menu entry was clicked
310 case MENUBAR_CLIENT_SET_PARAMS:onClientSetParams();break;
311 case MENUBAR_SERVER_LIST_EVENTS:onServerListEvents();break;
312 case MENUBAR_SERVER_MARK_EVENT:onServerMarkEvent();break;
313 case MENUBAR_SERVER_GET_EVENT:onServerGetEvent();break;
314 case MENUBAR_SERVER_GET_NEXT_EVENT:onServerGetNextEvent();break;
315 case MENUBAR_SERVER_GET_LAST_EVENT:onServerGetLastEvent();break;
328 void AliStorageAdministratorPanel::onServerListEvents()
330 AliStorageAdministratorPanelListEvents *listEventsWindow =
331 AliStorageAdministratorPanelListEvents::GetInstance();
332 if(listEventsWindow){cout<<"List events window created"<<endl;}
335 void AliStorageAdministratorPanel::onServerMarkEvent()
337 AliStorageAdministratorPanelMarkEvent *markEventWindow =
338 AliStorageAdministratorPanelMarkEvent::GetInstance();
339 if(markEventWindow){cout<<"Mark event window created"<<endl;}
342 void AliStorageAdministratorPanel::onClientSetParams()
344 AliStorageAdministratorPanelSetStorageParams *setParamsWindow =
345 AliStorageAdministratorPanelSetStorageParams::GetInstance();
347 setParamsWindow->Setup(fCommunicationSocket,
348 fMaxStorageSize/1000000,
354 void AliStorageAdministratorPanel::onServerGetEvent()
356 //this method is just for tests
357 int runNumber=197669;
360 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
361 struct eventStruct mark;
362 mark.runNumber = runNumber;
363 mark.eventNumber = eventNumber;
364 requestMessage->messageType = REQUEST_GET_EVENT;
365 requestMessage->event = mark;
367 fEventManager->Send(requestMessage,fServerSocket);
368 AliESDEvent *resultEvent = fEventManager->GetEvent(fServerSocket);
372 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
376 cout<<"ADMIN -- received no event"<<endl;
381 void AliStorageAdministratorPanel::onServerGetNextEvent()
383 //this method is just for tests
384 int runNumber=197669;
387 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
388 struct eventStruct mark;
389 mark.runNumber = runNumber;
390 mark.eventNumber = eventNumber;
391 requestMessage->messageType = REQUEST_GET_NEXT_EVENT;
392 requestMessage->event = mark;
394 fEventManager->Send(requestMessage,fServerSocket);
395 AliESDEvent* resultEvent= fEventManager->GetEvent(fServerSocket);
398 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
402 cout<<"ADMIN -- received no event"<<endl;
407 void AliStorageAdministratorPanel::onServerGetLastEvent()
409 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
410 requestMessage->messageType = REQUEST_GET_LAST_EVENT;
412 fEventManager->Send(requestMessage,fServerSocket);
413 AliESDEvent* resultEvent= fEventManager->GetEvent(fServerSocket);
417 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
421 cout<<"ADMIN -- received no event"<<endl;
425 void AliStorageAdministratorPanel::onExit()
427 cout<<"ADMIN -- Quiting ALICE Storage Admin Panel"<<endl;
432 void AliStorageAdministratorPanel::CloseWindow(){onExit();}
435 //methods to change labels:
436 void AliStorageAdministratorPanel::SetLabel(TGLabel *label, int option)
441 label->SetText("Waiting");
442 label->SetTextColor(kBlack);
445 label->SetText("OK");
446 label->SetTextColor(kBlack);
449 label->SetText("ERROR");
450 label->SetTextColor(kBlack);
453 label->SetText("CLIENT IS DOWN");
454 label->SetTextColor(kRed);
458 gClient->HandleInput();
461 void AliStorageAdministratorPanel::SetLabelValue(TGLabel *label, long value,int option)
471 label->SetText(Form("%lu B (%.2f MB)",value,(float)value/(1000.*1000.)));
474 label->SetText(Form("%d %%",(int)value));
477 label->SetText(Form("%d",(int)value));
481 label->SetTextColor(kBlack);
482 gClient->HandleInput();
484 //other methods that can be useful later
487 void AliStorageAdministratorPanel::SetupToolbar()
489 TGToolBar* toolBar = new TGToolBar(this);
490 toolBar->AddButton(this,new TGPictureButton(toolBar,
491 Form("%s/MONITOR/icons/start.png",
492 gSystem->Getenv("ALICE_ROOT")),
493 TOOLBUTTON_START ) );
494 toolBar->AddButton(this, new TGPictureButton(toolBar,
495 Form("%s/MONITOR/icons/stop.png",
496 gSystem->Getenv("ALICE_ROOT")),
499 AddFrame(toolBar, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
502 void AliStorageAdministratorPanel::SetupDockableMenuBar()
504 TGDockableFrame *menuDock = new TGDockableFrame(this);
505 AddFrame(menuDock,new TGLayoutHints(kLHintsExpandX,0,0,1,0));
506 menuDock->SetWindowName("ALICE Storage Dockable MenuBar");
507 menuDock->EnableUndock(kTRUE);
508 menuDock->EnableHide(kTRUE);
510 TGPopupMenu *popup1 = new TGPopupMenu(fClient->GetRoot());
511 popup1->AddEntry("&Check client state",MENUBAR_1_OPTION_1);
512 popup1->AddSeparator();
513 popup1->AddEntry("&BBB",MENUBAR_1_OPTION_2);
514 popup1->AddEntry("&CCC",MENUBAR_1_OPTION_3);
516 popup1->DisableEntry(MENUBAR_1_OPTION_2);
517 popup1->Associate(this);
520 TGMenuBar *menuBar = new TGMenuBar(menuDock,1,1,kHorizontalFrame);
521 menuBar->AddPopup("&File",
523 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
525 menuDock->AddFrame(menuBar,
526 new TGLayoutHints(kLHintsTop | kLHintsExpandX));