]> git.uio.no Git - u/mrichter/AliRoot.git/blob - MONITOR/alistoragemanager/AliDIMListenerThread.cxx
starting alionlinereco on remote machine on SOR signal received by alistorage
[u/mrichter/AliRoot.git] / MONITOR / alistoragemanager / AliDIMListenerThread.cxx
1 #include "AliDIMListenerThread.h"
2 #include "AliStorageTypes.h"
3
4 #include <iostream>
5 #include <sstream>
6 #include <fstream>
7
8 using namespace std;
9
10 AliDIMListenerThread::AliDIMListenerThread()
11 {
12     InitDIMListeners();
13     
14 #ifdef ALI_DATE
15     DimCurrentInfo SORrunNumber("/LOGBOOK/SUBSCRIBE/DAQ_SOR_PHYSICS_1",-1);
16     DimCurrentInfo EORrunNumber("/LOGBOOK/SUBSCRIBE/DAQ_EOR_PHYSICS_1",-1);
17
18     if(SORrunNumber.getData() && EORrunNumber.getData())
19     {
20         cout<<"DIM Listener -- current SOR signal:"<<SORrunNumber.getInt()<<endl;
21         cout<<"DIM Listener -- current EOR signal:"<<EORrunNumber.getInt()<<endl;
22         
23         if(SORrunNumber.getInt() != EORrunNumber.getInt()){StartOfRun(SORrunNumber.getInt());}
24     }
25     else{cout<<"DIM Listener -- no data received from dim server"<<endl;}
26 #endif
27 }
28
29 AliDIMListenerThread::~AliDIMListenerThread()
30 {
31     for (int i = 0; i < 5; ++i){
32         if(fDimSORListener[i]) delete fDimSORListener[i];
33         if(fDimEORListener[i]) delete fDimEORListener[i];
34         
35         fDimSORListener[i] = 0;
36         fDimEORListener[i] = 0;
37     }
38 }
39
40 void AliDIMListenerThread::InitDIMListeners()
41 {
42     for (int i = 0; i < 5; ++i)
43     {
44 #ifdef ALI_DATE
45              if (i == 0)
46         {
47             fDimSORListener[i] = new AliDimIntNotifier("/LOGBOOK/SUBSCRIBE/DAQ_SOR_PHYSICS");
48             fDimEORListener[i] = new AliDimIntNotifier("/LOGBOOK/SUBSCRIBE/DAQ_EOR_PHYSICS");
49         }
50         else
51         {
52             fDimSORListener[i] = new AliDimIntNotifier(Form("/LOGBOOK/SUBSCRIBE/DAQ_SOR_PHYSICS_%d", i));
53             fDimEORListener[i] = new AliDimIntNotifier(Form("/LOGBOOK/SUBSCRIBE/DAQ_EOR_PHYSICS_%d", i));
54         }
55         
56         fDimSORListener[i]->Connect("DimMessage(int)", "AliDIMListenerThread", this, "StartOfRun(int)");
57         fDimEORListener[i]->Connect("DimMessage(int)", "AliDIMListenerThread", this, "EndOfRun(int)");
58 #else
59         fDimSORListener[i]=0x0;
60         fDimEORListener[i]=0x0;
61 #endif
62     }
63 }
64
65 void AliDIMListenerThread::StartOfRun(int run)
66 {
67     cout<<"DIM Listener -- SOR signal received for run:"<<run<<endl;
68
69     ifstream configFile (GetConfigFilePath());
70     string username,hostname;
71     
72     if (configFile.is_open())
73     {
74         string line;
75         int from,to;
76         while(configFile.good())
77         {
78             getline(configFile,line);
79             from = line.find("\"")+1;
80             to = line.find_last_of("\"");
81             if(line.find("EVENT_SERVER=")==0){hostname=line.substr(from,to-from);}
82             else if(line.find("EVENT_SERVER_USER=")==0){username=line.substr(from,to-from);}
83         }
84         if(configFile.eof()){configFile.clear();}
85         configFile.close();
86     }
87     else{cout<<"Event Manager Editor -- Unable to open config file"<<endl;}
88
89     // Kill reconstruction server
90     gSystem->Exec(Form("ssh -n -f %s@%s \"killall alionlinereco;alionlinereco %d\"",username.c_str(),hostname.c_str(),run));
91
92 }
93
94 void AliDIMListenerThread::EndOfRun(int run)
95 {
96     cout<<"DIM Listener -- EOR signal received for run:"<<run<<endl;
97 }