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_MARK_ALL_EVENTS,
31 MENUBAR_SERVER_GET_EVENT,
32 MENUBAR_SERVER_GET_NEXT_EVENT,
33 MENUBAR_SERVER_GET_LAST_EVENT
41 AliStorageAdministratorPanel::AliStorageAdministratorPanel() :
42 TGMainFrame(gClient->GetRoot(), 400, 400),
49 fMaxOccupationLabel(0),
50 fRemoveEventsLabel(0),
51 fEventsInChunkLabel(0),
56 fCommunicationThread(0),
57 fCommunicationSocket(CLIENT_COMMUNICATION_REQ),
58 fServerSocket(SERVER_COMMUNICATION_REQ),
63 //create event manager
64 fEventManager = AliStorageEventManager::GetEventManagerInstance();
65 fEventManager->CreateSocket(fServerSocket);
66 fEventManager->CreateSocket(fCommunicationSocket);
68 // start communication with client thread
69 fCommunicationThread = new TThread("fCommunicationThread",
70 Dispatch,(void*)this);
71 fCommunicationThread->Run();
74 AliStorageAdministratorPanel::~AliStorageAdministratorPanel()
76 cout<<"ADMIN -- AliStorageAdministratorPanel descructor called";
77 cout<<" --- OK"<<endl;
80 void AliStorageAdministratorPanel::CheckStateHandle()//ask client about its state
84 CheckClientState(REQUEST_CONNECTION);
86 CheckClientState(REQUEST_RECEIVING);
88 CheckClientState(REQUEST_SAVING);
90 CheckClientState(REQUEST_CURRENT_SIZE);
92 CheckClientState(REQUEST_GET_PARAMS);
97 void AliStorageAdministratorPanel::CheckClientState(int option)
99 struct clientRequestStruct *request = new struct clientRequestStruct;
100 request->messageType = option;
101 if(!fEventManager->Send(request,fCommunicationSocket,10000))
103 SetLabel(fConnectionLabel,STATUS_DOWN);
104 SetLabel(fDataLabel,STATUS_DOWN);
105 SetLabel(fSavingLabel,STATUS_DOWN);
106 cout<<"ADMIN -- CLIENT IS DOWN"<<endl;
111 struct clientRequestStruct *responseParams = NULL;
113 if(option == REQUEST_GET_PARAMS)
115 responseParams = fEventManager->GetClientStruct(fCommunicationSocket);
119 response = fEventManager->GetLong(fCommunicationSocket);
123 case REQUEST_CONNECTION:
124 SetLabel(fConnectionLabel,response);
126 case REQUEST_RECEIVING:
127 SetLabel(fDataLabel,response);
130 SetLabel(fSavingLabel,response);
132 case REQUEST_CURRENT_SIZE:
133 SetLabelValue(fCurrentSizeLabel,response,1);
135 case REQUEST_GET_PARAMS:
136 fMaxStorageSize = responseParams->maxStorageSize;
137 fMaxOccupation = responseParams->maxOccupation;
138 fRemoveEvents = responseParams->removeEvents;
139 fEventsInChunk = responseParams->eventsInChunk;
141 SetLabelValue(fMaxSizeLabel,fMaxStorageSize,1);
142 SetLabelValue(fMaxOccupationLabel,fMaxOccupation,2);
143 SetLabelValue(fRemoveEventsLabel,fRemoveEvents,2);
144 SetLabelValue(fEventsInChunkLabel,fEventsInChunk,3);
148 if(request){delete request;}
151 void AliStorageAdministratorPanel::InitWindow()
153 SetCleanup(kDeepCleanup);
154 // add main manubar on top of the window
156 AddFrame(new TGHorizontal3DLine(this),
157 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
158 // add toolbar with pictured buttons
160 AddFrame(new TGHorizontal3DLine(this),
161 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
162 // add dockable toolbar
163 SetupDockableMenuBar();
164 AddFrame(new TGHorizontal3DLine(this),
165 new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
168 // add frame with two segments for client and server
170 SetWindowName("ALICE Storage Manager");
172 Resize(WINDOWS_WIDTH,WINDOWS_HEIGHT);
176 void AliStorageAdministratorPanel::SetupThreadsFrame()
178 // create frame for both client and server
179 TGHorizontalFrame *threadsFrame = new TGHorizontalFrame(this);
181 //create client frame and add components to it
182 TGCompositeFrame *clientThreadFrame = new TGCompositeFrame(threadsFrame,CLIENT_FRAME);
183 fConnectionLabel = new TGLabel(clientThreadFrame,"======Waiting======");
184 fDataLabel = new TGLabel(clientThreadFrame,"======Waiting======");
185 fSavingLabel = new TGLabel(clientThreadFrame,"======Waiting======");
186 fCurrentSizeLabel = new TGLabel(clientThreadFrame,"=========Waiting=========");
187 fMaxSizeLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
188 fMaxOccupationLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
189 fRemoveEventsLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
190 fEventsInChunkLabel = new TGLabel(clientThreadFrame,"==========Waiting=========");
192 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
193 "ALICE Storage Client"),
194 new TGLayoutHints(kLHintsCenterX));
197 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
199 new TGLayoutHints(kLHintsCenterX));
200 clientThreadFrame->AddFrame(fConnectionLabel,
201 new TGLayoutHints(kLHintsCenterX));
203 //data receiving label
204 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
206 new TGLayoutHints(kLHintsCenterX));
207 clientThreadFrame->AddFrame(fDataLabel,
208 new TGLayoutHints(kLHintsCenterX));
211 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
213 new TGLayoutHints(kLHintsCenterX));
214 clientThreadFrame->AddFrame(fSavingLabel,
215 new TGLayoutHints(kLHintsCenterX));
218 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
219 "Current storage size:"),
220 new TGLayoutHints(kLHintsCenterX));
221 clientThreadFrame->AddFrame(fCurrentSizeLabel,
222 new TGLayoutHints(kLHintsCenterX));
225 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
226 "Max storage size:"),
227 new TGLayoutHints(kLHintsCenterX));
228 clientThreadFrame->AddFrame(fMaxSizeLabel,
229 new TGLayoutHints(kLHintsCenterX));
231 //max occupation label
232 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
233 "Max occupation percent:"),
234 new TGLayoutHints(kLHintsCenterX));
235 clientThreadFrame->AddFrame(fMaxOccupationLabel,
236 new TGLayoutHints(kLHintsCenterX));
238 //remove events label
239 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
240 "Remove events percentage:"),
241 new TGLayoutHints(kLHintsCenterX));
242 clientThreadFrame->AddFrame(fRemoveEventsLabel,
243 new TGLayoutHints(kLHintsCenterX));
245 //events in chunk label
246 clientThreadFrame->AddFrame(new TGLabel(clientThreadFrame,
247 "Number of events in chunk:"),
248 new TGLayoutHints(kLHintsCenterX));
249 clientThreadFrame->AddFrame(fEventsInChunkLabel,
250 new TGLayoutHints(kLHintsCenterX));
252 //create server frame and add components to it
253 TGCompositeFrame *serverThreadFrame = new TGCompositeFrame(threadsFrame,SERVER_FRAME);
254 serverThreadFrame->AddFrame(new TGLabel(serverThreadFrame,
255 "ALICE Storage Server"),
256 new TGLayoutHints(kLHintsCenterX));
258 //add client and server frames to threads frame
259 threadsFrame->AddFrame(clientThreadFrame,
260 new TGLayoutHints(kLHintsLeft | kLHintsExpandX));
261 threadsFrame->AddFrame(new TGVertical3DLine(threadsFrame),
262 new TGLayoutHints(kLHintsNormal | kLHintsExpandY));
263 threadsFrame->AddFrame(serverThreadFrame,
264 new TGLayoutHints(kLHintsRight | kLHintsExpandX));
266 //add threads frame to main window
267 AddFrame(threadsFrame,new TGLayoutHints(kLHintsExpandX | kLHintsExpandY));
270 void AliStorageAdministratorPanel::SetupFixedMenuBar()
272 //create popup menu for client
273 TGPopupMenu *clientPopup = new TGPopupMenu(fClient->GetRoot());
274 clientPopup->AddEntry("&Set storage params",MENUBAR_CLIENT_SET_PARAMS);
275 clientPopup->Associate(this);
277 //create popup menu for server
278 TGPopupMenu *serverPopup = new TGPopupMenu(fClient->GetRoot());
279 serverPopup->AddEntry("&Get Events List",MENUBAR_SERVER_LIST_EVENTS);
280 serverPopup->AddEntry("&Mark Event",MENUBAR_SERVER_MARK_EVENT);
281 serverPopup->AddEntry("&Mark ALL Events",MENUBAR_SERVER_MARK_ALL_EVENTS);
282 serverPopup->AddEntry("&Get Event (test)",MENUBAR_SERVER_GET_EVENT);
283 serverPopup->AddEntry("&Get Next Event (test)",MENUBAR_SERVER_GET_NEXT_EVENT);
284 serverPopup->AddEntry("&Get Last Event (test)",MENUBAR_SERVER_GET_LAST_EVENT);
285 serverPopup->Associate(this);
288 TGMenuBar *menuBar = new TGMenuBar(this,1,1,kHorizontalFrame);
289 menuBar->AddPopup("&Client",clientPopup,
290 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
291 menuBar->AddPopup("&Server", serverPopup,
292 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
294 AddFrame(menuBar,new TGLayoutHints(kLHintsTop | kLHintsExpandX));
298 Bool_t AliStorageAdministratorPanel::ProcessMessage(Long_t msg, Long_t parm1, Long_t)
300 switch (GET_MSG(msg))
304 switch (GET_SUBMSG(msg))
306 case kCM_BUTTON://when button is pressed
308 case kCM_MENUSELECT://when mouse is over menu entry
310 case kCM_MENU://when menu entry was clicked
313 case MENUBAR_CLIENT_SET_PARAMS:onClientSetParams();break;
314 case MENUBAR_SERVER_LIST_EVENTS:onServerListEvents();break;
315 case MENUBAR_SERVER_MARK_EVENT:onServerMarkEvent();break;
316 case MENUBAR_SERVER_MARK_ALL_EVENTS:onServerMarkAllEvents();break;
317 case MENUBAR_SERVER_GET_EVENT:onServerGetEvent();break;
318 case MENUBAR_SERVER_GET_NEXT_EVENT:onServerGetNextEvent();break;
319 case MENUBAR_SERVER_GET_LAST_EVENT:onServerGetLastEvent();break;
332 void AliStorageAdministratorPanel::onServerListEvents()
334 AliStorageAdministratorPanelListEvents *listEventsWindow =
335 AliStorageAdministratorPanelListEvents::GetInstance();
336 if(listEventsWindow){cout<<"List events window created"<<endl;}
339 void AliStorageAdministratorPanel::onServerMarkEvent()
341 AliStorageAdministratorPanelMarkEvent *markEventWindow =
342 AliStorageAdministratorPanelMarkEvent::GetInstance();
343 if(markEventWindow){cout<<"Mark event window created"<<endl;}
346 void AliStorageAdministratorPanel::onServerMarkAllEvents()
348 // get list of all events:
349 struct listRequestStruct list;
352 list.runNumber[1]=999999;
353 list.eventNumber[0]=0;
354 list.eventNumber[1]=999999;
357 list.multiplicity[0]=1;
358 list.multiplicity[1]=999999;
359 strcpy(list.system[0],"p-p");
360 strcpy(list.system[1],"A-A");
362 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
363 requestMessage->messageType = REQUEST_LIST_EVENTS;
364 requestMessage->list = list;
366 fEventManager->Send(requestMessage,SERVER_COMMUNICATION_REQ);
367 vector<serverListStruct> receivedList = fEventManager->GetServerListVector(SERVER_COMMUNICATION_REQ);
369 cout<<"ADMIN PANEL -- received list of marked events:"<<receivedList.size()<<endl;
374 for(i=0;i<receivedList.size();i++)
376 cout<<"marking:"<<i<<endl;
377 struct eventStruct mark;
378 mark.runNumber = receivedList[i].runNumber;
379 mark.eventNumber = receivedList[i].eventNumber;
381 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
382 requestMessage->messageType = REQUEST_MARK_EVENT;
383 requestMessage->event = mark;
385 fEventManager->Send(requestMessage,SERVER_COMMUNICATION_REQ);
386 bool response = fEventManager->GetBool(SERVER_COMMUNICATION_REQ);
387 delete requestMessage;
388 if(!response){failCounter++;}
390 cout<<"Tried to mark: "<<i<<"events"<<endl;
391 cout<<"Could not mark: "<<failCounter<<" events"<<endl;
394 void AliStorageAdministratorPanel::onClientSetParams()
396 AliStorageAdministratorPanelSetStorageParams *setParamsWindow =
397 AliStorageAdministratorPanelSetStorageParams::GetInstance();
399 setParamsWindow->Setup(fCommunicationSocket,
400 fMaxStorageSize/1000000,
406 void AliStorageAdministratorPanel::onServerGetEvent()
408 //this method is just for tests
409 int runNumber=197669;
412 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
413 struct eventStruct mark;
414 mark.runNumber = runNumber;
415 mark.eventNumber = eventNumber;
416 requestMessage->messageType = REQUEST_GET_EVENT;
417 requestMessage->event = mark;
419 fEventManager->Send(requestMessage,fServerSocket);
420 AliESDEvent *resultEvent = fEventManager->GetEvent(fServerSocket);
424 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
428 cout<<"ADMIN -- received no event"<<endl;
433 void AliStorageAdministratorPanel::onServerGetNextEvent()
435 //this method is just for tests
436 int runNumber=197669;
439 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
440 struct eventStruct mark;
441 mark.runNumber = runNumber;
442 mark.eventNumber = eventNumber;
443 requestMessage->messageType = REQUEST_GET_NEXT_EVENT;
444 requestMessage->event = mark;
446 fEventManager->Send(requestMessage,fServerSocket);
447 AliESDEvent* resultEvent= fEventManager->GetEvent(fServerSocket);
450 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
454 cout<<"ADMIN -- received no event"<<endl;
459 void AliStorageAdministratorPanel::onServerGetLastEvent()
461 struct serverRequestStruct *requestMessage = new struct serverRequestStruct;
462 requestMessage->messageType = REQUEST_GET_LAST_EVENT;
464 fEventManager->Send(requestMessage,fServerSocket);
465 AliESDEvent* resultEvent= fEventManager->GetEvent(fServerSocket);
469 cout<<"ADMIN -- received event. Run no:"<<resultEvent->GetRunNumber()<<"\tEvent no in file:"<<resultEvent->GetEventNumberInFile()<<endl;
473 cout<<"ADMIN -- received no event"<<endl;
477 void AliStorageAdministratorPanel::onExit()
479 cout<<"ADMIN -- Quiting ALICE Storage Admin Panel"<<endl;
484 void AliStorageAdministratorPanel::CloseWindow(){onExit();}
487 //methods to change labels:
488 void AliStorageAdministratorPanel::SetLabel(TGLabel *label, int option)
493 label->SetText("Waiting");
494 label->SetTextColor(kBlack);
497 label->SetText("OK");
498 label->SetTextColor(kBlack);
501 label->SetText("ERROR");
502 label->SetTextColor(kBlack);
505 label->SetText("CLIENT IS DOWN");
506 label->SetTextColor(kRed);
510 gClient->HandleInput();
513 void AliStorageAdministratorPanel::SetLabelValue(TGLabel *label, long value,int option)
523 label->SetText(Form("%lu B (%.2f MB)",value,(float)value/(1000.*1000.)));
526 label->SetText(Form("%d %%",(int)value));
529 label->SetText(Form("%d",(int)value));
533 label->SetTextColor(kBlack);
534 gClient->HandleInput();
536 //other methods that can be useful later
539 void AliStorageAdministratorPanel::SetupToolbar()
541 TGToolBar* toolBar = new TGToolBar(this);
542 toolBar->AddButton(this,new TGPictureButton(toolBar,
543 Form("%s/MONITOR/icons/start.png",
544 gSystem->Getenv("ALICE_ROOT")),
545 TOOLBUTTON_START ) );
546 toolBar->AddButton(this, new TGPictureButton(toolBar,
547 Form("%s/MONITOR/icons/stop.png",
548 gSystem->Getenv("ALICE_ROOT")),
551 AddFrame(toolBar, new TGLayoutHints(kLHintsNormal | kLHintsExpandX));
554 void AliStorageAdministratorPanel::SetupDockableMenuBar()
556 TGDockableFrame *menuDock = new TGDockableFrame(this);
557 AddFrame(menuDock,new TGLayoutHints(kLHintsExpandX,0,0,1,0));
558 menuDock->SetWindowName("ALICE Storage Dockable MenuBar");
559 menuDock->EnableUndock(kTRUE);
560 menuDock->EnableHide(kTRUE);
562 TGPopupMenu *popup1 = new TGPopupMenu(fClient->GetRoot());
563 popup1->AddEntry("&Check client state",MENUBAR_1_OPTION_1);
564 popup1->AddSeparator();
565 popup1->AddEntry("&BBB",MENUBAR_1_OPTION_2);
566 popup1->AddEntry("&CCC",MENUBAR_1_OPTION_3);
568 popup1->DisableEntry(MENUBAR_1_OPTION_2);
569 popup1->Associate(this);
572 TGMenuBar *menuBar = new TGMenuBar(menuDock,1,1,kHorizontalFrame);
573 menuBar->AddPopup("&File",
575 new TGLayoutHints(kLHintsTop | kLHintsLeft, 0, 4, 0, 0));
577 menuDock->AddFrame(menuBar,
578 new TGLayoutHints(kLHintsTop | kLHintsExpandX));