Belle II Software  release-08-01-10
ZMQHistoServerToZMQOutput Class Reference

Send the histograms as compressed byte stream via a ZMQConfirmedOutput connection after merging with all the properties of a normal confirmed output. More...

#include <ZMQHistogramConnection.h>

Inheritance diagram for ZMQHistoServerToZMQOutput:
Collaboration diagram for ZMQHistoServerToZMQOutput:

Public Types

using ReactorFunction = std::function< void(void)>
 Typedef of a function which will be called if a connection has a message.
 

Public Member Functions

 ZMQHistoServerToZMQOutput (const std::string &outputAddress, const std::shared_ptr< ZMQParent > &parent)
 Initialize the ZMQConfirmedOutput with the given address.
 
void mergeAndSend (const std::map< std::string, HistogramMapping > &storedMessages, const std::optional< unsigned int > &experiment, const std::optional< unsigned int > &run, EMessageTypes messageType)
 Merge the histograms and send them via the connection. Stop/Terminate messages are sent after that.
 
void clear ()
 Nothing to do on clear.
 
std::string getMonitoringJSON () const final
 The monitoring JSON is just passed from the ZMQConfirmedOutput.
 
void handleIncomingData ()
 The input data handling is passed from the ZMQConfirmedOutput.
 
bool isReady () const override
 The is ready is passed from the ZMQConfirmedOutput.
 
std::vector< zmq::socket_t * > getSockets () const final
 The sockets are passed from ZMQConfirmedOutput.
 
std::string getEndPoint () const
 Return the connection string.
 
template<class AClass >
void log (const std::string &key, const AClass &value)
 Store a value under a certain key. Different types of values can be stored, namely long, double or string. Mixtures are not allowed for a given key.
 
void increment (const std::string &key)
 Increment the value with the given key (only numerical values). If not present, set to 1.
 
void decrement (const std::string &key)
 Decrement the value with the given key (only numerical values). If not present, set to -1.
 
template<size_t MAX_SIZE = 100>
void average (const std::string &key, double value)
 Instead of storeing the double value directly under the given key, store the average of the last MAX_SIZE values.
 
template<size_t AVERAGE_SIZE = 2000>
void timeit (const std::string &key)
 Measure the rate of calls with the same key every AVERAGE_SIZE calls (and also display the last time AVERAGE_SIZE was reached under <key>_last_measurement)
 
void logTime (const std::string &key)
 Store the current time as a string under the given key.
 

Static Public Member Functions

static bool poll (const std::map< const ZMQConnection *, ReactorFunction > &connectionList, int timeout)
 Poll on the given connections and call the attached function if a messages comes in. More...
 
static bool hasMessage (const ZMQConnection *connection)
 Check if the given connection as an incoming message (right now, no waiting).
 

Private Attributes

ZMQConfirmedOutput m_output
 The output connection used for sending the histograms.
 
std::vector< char > m_outputBuffer
 Buffer used for compression.
 
unsigned int m_maximalCompressedSize = 100'000'000
 Maximal size of the compression buffer.
 
std::map< std::string, std::variant< long, double, std::string > > m_monitoring
 Internal storage of all stored values.
 
std::unordered_map< std::string, std::tuple< std::vector< double >, size_t > > m_averages
 Internal storage of the previous values when calculating averages.
 
std::unordered_map< std::string, std::tuple< unsigned long, std::chrono::system_clock::time_point > > m_timeCounters
 Internal storage how often the timeit function for a given key was called and when it has last reached MAX_SIZE.
 

Detailed Description

Send the histograms as compressed byte stream via a ZMQConfirmedOutput connection after merging with all the properties of a normal confirmed output.

Stop and terminate messages are sent as normal (after performing a last merge and sending it). As additional message the event meta data is passed.

This connection allows to built hierarchies of histogram servers with ZMQ.

Definition at line 88 of file ZMQHistogramConnection.h.

Member Function Documentation

◆ poll()

bool poll ( const std::map< const ZMQConnection *, ReactorFunction > &  connectionList,
int  timeout 
)
staticinherited

Poll on the given connections and call the attached function if a messages comes in.

If after timeout milliseconds still no message is received, return anyways. If timeout is 0, do not wait. If timeout is -1, wait infinitely.

Returns true if a message was received on any socket, false otherwise. Attention: in case of an interrupted system call (e.g. because a signal was received) the function might return anyways with a negative result even before the timeout!

Definition at line 27 of file ZMQConnection.cc.


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