Belle II Software development
HistoRelay2 Class Reference

Public Member Functions

 HistoRelay2 (std::string &filename, std::string &dest, int port)
 
int collect ()
 

Private Member Functions

EvtMessageStreamFile (std::string &filename)
 
int StreamHistograms (TDirectory *curdir, MsgHandler *msg, int &numobjs)
 

Private Attributes

std::string m_filename
 
EvtSocketSendm_sock
 
std::string m_dest
 
int m_port
 

Detailed Description

Definition at line 21 of file HistoRelay2.h.

Constructor & Destructor Documentation

◆ HistoRelay2()

HistoRelay2 ( std::string &  filename,
std::string &  dest,
int  port 
)

Definition at line 19 of file HistoRelay2.cc.

20{
21 m_dest = dest;
22 m_port = port;
23 m_filename = filename;
24 m_sock = new EvtSocketSend(m_dest, m_port);
25}

◆ ~HistoRelay2()

Definition at line 27 of file HistoRelay2.cc.

28{
29 delete m_sock;
30}

Member Function Documentation

◆ collect()

int collect ( )

Definition at line 32 of file HistoRelay2.cc.

33{
34 // printf ( "HistoRelay2 : collect!!\n" );
35 EvtMessage* msg = StreamFile(m_filename);
36
37 if (!msg) return 1; // error indicator
38
39 auto ret = m_sock->send(msg);
40
41 delete (msg);
42
43 if (ret < 0) {
44 // Socket error, e.g server died
45 delete m_sock;
46 // try reconnect
47 printf("HistoRelay2: socket seems dead -> reconnect\n");
48 m_sock = new EvtSocketSend(m_dest, m_port);
49 }
50
51 return 0;
52}
Class to manage streamed object.
Definition: EvtMessage.h:59

◆ StreamFile()

EvtMessage * StreamFile ( std::string &  filename)
private

Definition at line 55 of file HistoRelay2.cc.

56{
57 TFile* file = new TFile((std::string("/dev/shm/") + filename).c_str(), "read");
58 if (file == NULL || file->IsZombie()) return NULL;
59 file->cd();
60 MsgHandler hdl(0);
61 int numobjs = 0;
62 StreamHistograms(gDirectory, &hdl, numobjs);
63 file->Close();
64 delete file;
65 // printf ( "DqmMemFile::StreamMemFile : streamed %d histograms in EvtMessage\n", numobjs );
66 EvtMessage* msg = hdl.encode_msg(MSG_EVENT);
67 (msg->header())->reserved[0] = 0;
68 (msg->header())->reserved[1] = numobjs;
69 return msg;
70}
EvtHeader * header()
Get pointer to EvtHeader.
Definition: EvtMessage.cc:161
A class to encode/decode an EvtMessage.
Definition: MsgHandler.h:103

◆ StreamHistograms()

int StreamHistograms ( TDirectory *  curdir,
MsgHandler msg,
int &  numobjs 
)
private

Definition at line 72 of file HistoRelay2.cc.

73{
74 TList* keylist = curdir->GetListOfKeys();
75
76 TIter nextkey(keylist);
77 TKey* key = 0;
78 while ((key = (TKey*)nextkey())) {
79 TObject* obj = curdir->FindObjectAny(key->GetName());
80 if (obj->IsA()->InheritsFrom("TH1")) {
81 TH1* h1 = (TH1*) obj;
82 // printf ( "Key = %s, entry = %f\n", key->GetName(), h1->GetEntries() );
83 msg->add(h1, h1->GetName());
84 numobjs++;
85 } else if (obj->IsA()->InheritsFrom(TDirectory::Class())) {
86 // printf ( "New directory found %s, Go into subdir\n", obj->GetName() );
87 TDirectory* tdir = (TDirectory*) obj;
88 // m_msg->add(tdir, tdir->GetName());
89 TText subdir(0, 0, tdir->GetName());
90 msg->add(&subdir, "SUBDIR:" + string(obj->GetName())) ;
91 numobjs++;
92 tdir->cd();
93 StreamHistograms(tdir, msg, numobjs);
94 TText command(0, 0, "COMMAND:EXIT");
95 msg->add(&command, "SUBDIR:EXIT");
96 numobjs++;
97 curdir->cd();
98 }
99 }
100 return 0;
101}
virtual void add(const TObject *, const std::string &name)
Add an object to be streamed.
Definition: MsgHandler.cc:46

Member Data Documentation

◆ m_dest

std::string m_dest
private

Definition at line 30 of file HistoRelay2.h.

◆ m_filename

std::string m_filename
private

Definition at line 28 of file HistoRelay2.h.

◆ m_port

int m_port
private

Definition at line 31 of file HistoRelay2.h.

◆ m_sock

EvtSocketSend* m_sock
private

Definition at line 29 of file HistoRelay2.h.


The documentation for this class was generated from the following files: