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
36
void
37
LivetimeCounter::set_state
(
LivetimeCounter::State
state)
38
{
39
std::lock_guard<std::mutex> l(
m_mutex
);
40
update_map
();
// Add the time to the old state
41
TLOG_DEBUG
(1) <<
"Changing state from "
<<
get_state_name
(
m_state
) <<
" to "
<<
get_state_name
(state);
42
m_state
=state;
43
}
44
45
std::map<LivetimeCounter::State, LivetimeCounter::state_time_t>
46
LivetimeCounter::get_time_map
()
47
{
48
std::lock_guard<std::mutex> l(
m_mutex
);
49
update_map
();
50
return
m_state_times
;
51
}
52
53
LivetimeCounter::state_time_t
54
LivetimeCounter::get_time
(
LivetimeCounter::State
state)
55
{
56
std::lock_guard<std::mutex> l(
m_mutex
);
57
update_map
();
58
return
m_state_times
[state];
59
}
60
61
LivetimeCounter::state_time_t
62
LivetimeCounter::now
()
const
63
{
64
using namespace
std::chrono;
65
return
duration_cast<milliseconds>(steady_clock::now().time_since_epoch()).count();
66
}
67
68
std::string
69
LivetimeCounter::get_report_string
()
70
{
71
std::lock_guard<std::mutex> l(
m_mutex
);
72
update_map
();
73
std::ostringstream oss;
74
for
(
auto
const
& [state, t]:
m_state_times
){
75
oss <<
get_state_name
(state) <<
": "
<< t <<
"ms "
;
76
}
77
return
oss.str();
78
}
79
80
81
std::string
82
LivetimeCounter::get_state_name
(
LivetimeCounter::State
state)
const
83
{
84
switch
(state){
85
case
State::kLive
:
return
"live"
;
86
case
State::kDead
:
return
"dead"
;
87
case
State::kPaused
:
return
"paused"
;
88
default
:
89
return
"UNKNOWN"
;
90
}
91
}
92
93
}
// 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:30
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:74
dunedaq::trigger::LivetimeCounter::m_last_state_change_time
state_time_t m_last_state_change_time
Definition
LivetimeCounter.hpp:75
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:82
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:69
dunedaq::trigger::LivetimeCounter::m_mutex
std::mutex m_mutex
Definition
LivetimeCounter.hpp:72
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:46
dunedaq::trigger::LivetimeCounter::State
State
Definition
LivetimeCounter.hpp:21
dunedaq::trigger::LivetimeCounter::State::kPaused
@ kPaused
Definition
LivetimeCounter.hpp:24
dunedaq::trigger::LivetimeCounter::State::kLive
@ kLive
Definition
LivetimeCounter.hpp:22
dunedaq::trigger::LivetimeCounter::State::kDead
@ kDead
Definition
LivetimeCounter.hpp:23
dunedaq::trigger::LivetimeCounter::now
state_time_t now() const
Definition
LivetimeCounter.cpp:62
dunedaq::trigger::LivetimeCounter::m_state
State m_state
Definition
LivetimeCounter.hpp:73
dunedaq::trigger::LivetimeCounter::set_state
void set_state(State state)
Set the current state to state.
Definition
LivetimeCounter.cpp:37
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:54
Logging.hpp
TLOG_DEBUG
#define TLOG_DEBUG(lvl,...)
Definition
Logging.hpp:112
TLOG
#define TLOG(...)
Definition
macro.hpp:22
dunedaq::trigger
Definition
AlgorithmPlugins.hpp:24
Generated on
for DUNE-DAQ by
1.17.0