12#ifndef DFMODULES_SRC_DFMODULES_TRIGGERRECORDBUILDERDATA_HPP_
13#define DFMODULES_SRC_DFMODULES_TRIGGERRECORDBUILDERDATA_HPP_
21#include "nlohmann/json.hpp"
37 DFOThresholdsNotConsistent,
38 "Busy threshold (" << busy <<
") is smaller than free threshold (" << free <<
')',
39 ((
size_t)busy)((
size_t)free))
42 "The Trigger Decision with trigger number "
43 << trigger_number <<
" was not found for dataflow application at " << connection_name,
47 "The Trigger Decision with trigger number "
48 << trigger_number <<
" could not be assigned to the dataflow application at " << connection_name
49 <<
" because no slots were available.",
54struct AssignedTriggerDecision
57 std::chrono::steady_clock::time_point assigned_time;
58 std::string connection_name;
62 , assigned_time(std::chrono::steady_clock::now())
63 , connection_name(conn_name)
71 TriggerRecordBuilderData() =
default;
72 TriggerRecordBuilderData(std::string connection_name,
size_t busy_threshold);
73 TriggerRecordBuilderData(std::string connection_name,
size_t busy_threshold,
size_t free_threshold);
75 TriggerRecordBuilderData(TriggerRecordBuilderData
const&) =
delete;
76 TriggerRecordBuilderData(TriggerRecordBuilderData&&) =
delete;
77 TriggerRecordBuilderData& operator=(TriggerRecordBuilderData
const&) =
delete;
78 TriggerRecordBuilderData& operator=(TriggerRecordBuilderData&&) =
delete;
80 ~TriggerRecordBuilderData() =
default;
82 bool is_busy()
const {
return m_in_error || m_is_busy; }
83 size_t used_slots()
const {
return m_assigned_trigger_decisions.size(); }
85 size_t busy_threshold()
const {
return m_busy_threshold.load(); }
86 size_t free_threshold()
const {
return m_free_threshold.load(); }
91 void add_assignment(std::shared_ptr<AssignedTriggerDecision> assignment);
92 std::shared_ptr<AssignedTriggerDecision> complete_assignment(
94 std::function<
void(nlohmann::json&)> metadata_fun =
nullptr);
95 std::list<std::shared_ptr<AssignedTriggerDecision>> flush();
97 void generate_opmon_data()
override;
99 std::chrono::microseconds average_latency(std::chrono::steady_clock::time_point since)
const;
101 bool is_in_error()
const {
return m_in_error.load(); }
102 void set_in_error(
bool err) { m_in_error = err; }
105 std::atomic<size_t> m_busy_threshold{ 0 };
106 std::atomic<size_t> m_free_threshold{ std::numeric_limits<size_t>::max() };
107 std::atomic<bool> m_is_busy{
false };
108 std::list<std::shared_ptr<AssignedTriggerDecision>> m_assigned_trigger_decisions;
109 mutable std::mutex m_assigned_trigger_decisions_mutex;
112 std::list<std::pair<std::chrono::steady_clock::time_point, std::chrono::microseconds>> m_latency_info;
113 mutable std::mutex m_latency_info_mutex;
115 std::atomic<bool> m_in_error{
true };
117 nlohmann::json m_metadata;
118 std::string m_connection_name{
"" };
122 using const_time_counter_t = std::invoke_result<
decltype(&metric_t::min_time_since_assignment), metric_t>
::type;
123 using time_counter_t = std::remove_const<const_time_counter_t>::type;
124 std::atomic<uint32_t> m_complete_counter{ 0 };
125 std::atomic<time_counter_t> m_min_complete_time{ std::numeric_limits<time_counter_t>::max() },
126 m_max_complete_time{ 0 };
127 double m_last_average_time{ 0. };
An ERS Issue for DataStore creation failure.
ERS_DECLARE_ISSUE(cibmodules, CIBCommunicationError, " CIB Hardware Communication Error: "<< descriptor,((std::string) descriptor)) ERS_DECLARE_ISSUE(cibmodules
AssignedTriggerDecisionNotFound
A message containing information about a Trigger from Data Selection (or a TriggerDecisionEmulator).