Update master to aliroot
[u/mrichter/AliRoot.git] / MONITOR / alistoragemanager / alistorage.cxx
1 #include "AliStorageClientThread.h"
2 #include "AliStorageServerThread.h"
3
4 #include <TThread.h>
5 #include <iostream>
6 #include <string.h>
7 #include <sstream>
8 #include <cstdlib>
9
10 using namespace std;
11
12 void *ClientThreadHandle(void*)
13 {
14         cout<<"ALICE Storage Manager -- Starting client thread"<<endl;
15         AliStorageClientThread *client = new AliStorageClientThread();
16         if(client){delete client;}
17         return 0;
18 }
19
20 void *ServerThreadHandle(void*)
21 {
22         cout<<"\nALICE Storage Manager -- Starting server thread"<<endl;
23         AliStorageServerThread *server = new AliStorageServerThread();
24         if(server){delete server;}
25         return 0;
26 }
27
28 bool isStorageRunning()
29 {
30  // check if there is events server already running
31
32   // first mathod with pidof
33   const char *pid = gSystem->GetFromPipe("pidof alistorage").Data();
34   int pidSize = gSystem->GetFromPipe("pidof alistorage").Sizeof();
35   std::string pidOfAll(pid,pidSize);
36   std::stringstream pidStream(pidOfAll);
37   int word_count=0; 
38   std::string word;
39   while( pidStream >> word ) ++word_count;
40   if(word_count != 1){return true;}
41   
42   // second method with ps
43   cout<<"checking if alistorage is running with ps"<<endl;
44   TString psName = gSystem->GetFromPipe("ps -e -o comm | grep alistorage");
45   if(strcmp(psName.Data(),"alistorage")>0){return true;}
46
47   return false;
48 }
49
50 int main()
51 {
52   if(isStorageRunning())
53     {
54       std::cout<<"There is other Storage Manager running on this machine.\n Cannot start multiple managers on the same machine. Quitting..."<<std::endl;
55       return 0;
56     }
57
58
59         TThread *clientThread = new TThread("clientThread", ClientThreadHandle,NULL);
60         TThread *serverThread = new TThread("serverThread", ServerThreadHandle,NULL);
61     
62         clientThread->Run();
63         serverThread->Run();
64         
65         clientThread->Join();
66         serverThread->Kill();//if client thread if finished, server thread is killed
67         return 0;
68 }