RateAnalyzer.cc
Go to the documentation of this file.
1 //
2 // Copyright (c) 2020 Fraunhofer Institute for Applied Information Technology (FIT)
3 // Network Research Group (NET)
4 // Schloss Birlinghoven, 53754 Sankt Augustin, GERMANY
5 // Contact: support@wiback.org
6 //
7 // This file is part of the SENF code tree.
8 // It is licensed under the 3-clause BSD License (aka New BSD License).
9 // See LICENSE.txt in the top level directory for details or visit
10 // https://opensource.org/licenses/BSD-3-Clause
11 //
12 
13 
17 #include "RateAnalyzer.hh"
18 //#include "RateAnalyzer.ih"
19 
20 // Custom includes
21 
22 //#include "RateAnalyzer.mpp"
23 #define prefix_
24 //-/////////////////////////////////////////////////////////////////////////////////////////////////
25 
27  : packets_ (0u), bytes_ (0u), minSize_ (0u), maxSize_ (0u), factor_ (0.0f)
28 {
29  registerEvent(timer_, &RateAnalyzer::tick);
30 }
31 
33 {
34  timer_.interval(interval);
35  factor_ = double(ClockService::in_nanoseconds(interval)) /
37 }
38 
39 prefix_ void senf::ppi::module::RateAnalyzer::v_handlePacket(Packet const & p)
40 {
41  ++packets_;
42  unsigned sz (p.data().size());
43  bytes_ += sz;
44  if (sz < minSize_ || minSize_ == 0u) minSize_ = sz;
45  if (sz > maxSize_) maxSize_ = sz;
46 }
47 
48 prefix_ void senf::ppi::module::RateAnalyzer::tick()
49 {
50  signals.packetsPerSecond(packets_/factor_);
51  signals.bytesPerSecond(bytes_/factor_);
52  signals.bytesPerPacket(minSize_, float(bytes_)/float(packets_), maxSize_);
53 
54  packets_ = bytes_ = minSize_ = maxSize_ = 0;
55 }
56 
57 //-/////////////////////////////////////////////////////////////////////////////////////////////////
58 #undef prefix_
59 //#include "RateAnalyzer.mpp"
60 
61 
62 // Local Variables:
63 // mode: c++
64 // fill-column: 100
65 // comment-column: 40
66 // c-file-style: "senf"
67 // indent-tabs-mode: nil
68 // ispell-local-dictionary: "american"
69 // compile-command: "scons -u test"
70 // End:
boost::signals2::signal< void(float)> packetsPerSecond
Definition: RateAnalyzer.hh:75
config::time_type clock_type
void interval(ClockService::clock_type interval, unsigned eventsPerInterval=1)
#define prefix_
Definition: RateAnalyzer.cc:23
RateAnalyzer public header.
static SENF_CLOCKSERVICE_CONSTEXPR clock_type seconds(int64_type const &v)
PacketData & data() const
void startStatistics(senf::ClockService::clock_type interval)
Start generating statistics at given interval.
Definition: RateAnalyzer.cc:32
static SENF_CLOCKSERVICE_CONSTEXPR int64_type in_nanoseconds(clock_type const &v)
void registerEvent(EventDescriptor &descriptor, Target target)
Register an external event.
struct senf::ppi::module::RateAnalyzer::Statistics signals
boost::signals2::signal< void(unsigned, float, unsigned)> bytesPerPacket
Definition: RateAnalyzer.hh:77
size_type size() const
boost::signals2::signal< void(float)> bytesPerSecond
Definition: RateAnalyzer.hh:76