DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
trigger
src
LivetimeCounter.cpp
Go to the documentation of this file.
1
#include "
trigger/LivetimeCounter.hpp
"
2
3
#include "
logging/Logging.hpp
"
4
5
#include <sstream>
6
7
namespace
dunedaq::trigger
{
8
9
LivetimeCounter::LivetimeCounter
(
LivetimeCounter::State
state)
10
:
m_state
(state)
11
,
m_last_state_change_time
(
now
())
12
{
13
TLOG_DEBUG
(1) <<
"Starting LivetimeCounter in state "
<<
get_state_name
(state);
14
m_state_times
[
State::kLive
] = 0;
15
m_state_times
[
State::kDead
] = 0;
16
m_state_times
[
State::kPaused
] = 0;
17
}
18
19
LivetimeCounter::~LivetimeCounter
()
20
{
21
std::string report =
get_report_string
();
22
TLOG
() <<
"LivetimeCounter stopping. Counts: "
<< report;
23
}
24
25
void
26
LivetimeCounter::update_map
()
27
{
28
// Caller must lock the mutex, so we don't here
29
auto
current_time =
now
();
30
auto
delta = (current_time -
m_last_state_change_time
);
31
m_state_times
[
m_state
] += delta;
32
m_last_state_change_time
= current_time;
33
}
34
35
void
36
LivetimeCounter::set_state
(
LivetimeCounter::State
state)
37
{
38
std::lock_guard<std::mutex> l(
m_mutex
);
39
update_map
();
// Add the time to the old state
40
TLOG_DEBUG
(1) <<
"Changing state from "
<<
get_state_name
(
m_state
) <<
" to "
<<
get_state_name
(state);
41
m_state
= state;
42
}
43
44
std::map<LivetimeCounter::State, LivetimeCounter::state_time_t>
45
LivetimeCounter::get_time_map
()
46
{
47
std::lock_guard<std::mutex> l(
m_mutex
);
48
update_map
();
49
return
m_state_times
;
50
}
51
52
LivetimeCounter::state_time_t
53
LivetimeCounter::get_time
(
LivetimeCounter::State
state)
54
{
55
std::lock_guard<std::mutex> l(
m_mutex
);
56
update_map
();
57
return
m_state_times
[state];
58
}
59
60
LivetimeCounter::state_time_t
61
LivetimeCounter::now
()
const
62
{
63
using namespace
std::chrono;
64
return
duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
65
}
66
67
std::string
68
LivetimeCounter::get_report_string
()
69
{
70
std::lock_guard<std::mutex> l(
m_mutex
);
71
update_map
();
72
std::ostringstream oss;
73
for
(
auto
const
& [state, t] :
m_state_times
) {
74
oss <<
get_state_name
(state) <<
": "
<< t <<
"ms "
;
75
}
76
return
oss.str();
77
}
78
79
std::string
80
LivetimeCounter::get_state_name
(
LivetimeCounter::State
state)
const
81
{
82
switch
(state) {
83
case
State::kLive
:
84
return
"live"
;
85
case
State::kDead
:
86
return
"dead"
;
87
case
State::kPaused
:
88
return
"paused"
;
89
default
:
90
return
"UNKNOWN"
;
91
}
92
}
93
94
}
// namespace dunedaq::trigger
LivetimeCounter.hpp
dunedaq::trigger::LivetimeCounter::~LivetimeCounter
~LivetimeCounter()
Definition
LivetimeCounter.cpp:19
dunedaq::trigger::LivetimeCounter::state_time_t
uint64_t state_time_t
A type to store a time duration in milliseconds.
Definition
LivetimeCounter.hpp:31
dunedaq::trigger::LivetimeCounter::update_map
void update_map()
Definition
LivetimeCounter.cpp:26
dunedaq::trigger::LivetimeCounter::m_state_times
std::map< State, state_time_t > m_state_times
Definition
LivetimeCounter.hpp:73
dunedaq::trigger::LivetimeCounter::m_last_state_change_time
state_time_t m_last_state_change_time
Definition
LivetimeCounter.hpp:74
dunedaq::trigger::LivetimeCounter::LivetimeCounter
LivetimeCounter(State state)
Construct a LivetimeCounter in the given state.
Definition
LivetimeCounter.cpp:9
dunedaq::trigger::LivetimeCounter::get_state_name
std::string get_state_name(State state) const
Definition
LivetimeCounter.cpp:80
dunedaq::trigger::LivetimeCounter::get_report_string
std::string get_report_string()
Get a nicely-formatted string of the time spent in each state.
Definition
LivetimeCounter.cpp:68
dunedaq::trigger::LivetimeCounter::m_mutex
std::mutex m_mutex
Definition
LivetimeCounter.hpp:71
dunedaq::trigger::LivetimeCounter::get_time_map
std::map< State, state_time_t > get_time_map()
Get a map of accumulated time in milliseconds in each state.
Definition
LivetimeCounter.cpp:45
dunedaq::trigger::LivetimeCounter::State
State
Definition
LivetimeCounter.hpp:22
dunedaq::trigger::LivetimeCounter::State::kPaused
@ kPaused
Definition
LivetimeCounter.hpp:25
dunedaq::trigger::LivetimeCounter::State::kLive
@ kLive
Definition
LivetimeCounter.hpp:23
dunedaq::trigger::LivetimeCounter::State::kDead
@ kDead
Definition
LivetimeCounter.hpp:24
dunedaq::trigger::LivetimeCounter::now
state_time_t now() const
Definition
LivetimeCounter.cpp:61
dunedaq::trigger::LivetimeCounter::m_state
State m_state
Definition
LivetimeCounter.hpp:72
dunedaq::trigger::LivetimeCounter::set_state
void set_state(State state)
Set the current state to state.
Definition
LivetimeCounter.cpp:36
dunedaq::trigger::LivetimeCounter::get_time
state_time_t get_time(State state)
Get the accumulated time in milliseconds spent in a particular state.
Definition
LivetimeCounter.cpp:53
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:116
TLOG
#define TLOG(...)
Definition
macro.hpp:21
dunedaq::trigger
Definition
AlgorithmPlugins.hpp:24
Generated on
for DUNE-DAQ by
1.18.0