8 #ifndef OCM_DAQ_DAQ_STATUS_HPP_
9 #define OCM_DAQ_DAQ_STATUS_HPP_
17 #include <boost/signals2/signal.hpp>
32 constexpr std::string_view
REQUEST =
"request";
75 std::chrono::system_clock::time_point
time;
87 using Clock = std::chrono::system_clock;
98 Alert MakeAlert(std::string_view category, std::string key, std::string description);
112 std::ostream&
operator<<(std::ostream& os, std::vector<Alert>
const& s);
154 using TimePoint = std::chrono::time_point<std::chrono::system_clock>;
162 explicit Status(std::string
id, std::string file_id) noexcept;
235 void Reset() noexcept;
240 bool IsValid() const noexcept {
241 return m_status !=
nullptr;
280 std::string
const& GetId() const noexcept;
285 std::
string const& GetFileId() const noexcept;
290 State GetState() const noexcept;
295 bool GetError() const noexcept;
300 std::vector<
Alert> const& GetAlerts() const noexcept;
305 Status::Clock::time_point GetTimestamp() const noexcept;
318 void SetState(
State s, std::optional<
bool>
error = std::nullopt) noexcept;
333 ReceiverStatus GetReceiverStatus(std::
size_t index) const noexcept;
342 void SetError(
bool error) noexcept;
349 void SetResult(std::
string result);
382 template <class Observer>
383 boost::signals2::connection ConnectObserver(Observer o) {
384 return m_signal.connect(std::move(o));
386 boost::signals2::connection
ConnectStatus(SignalType::slot_type
const& slot) {
387 return m_signal.connect(slot);
392 void EmitSignal(
bool forced =
false) noexcept;
397 unsigned ChangesSinceLastSignal() const noexcept {
398 return m_changes_since_signal;
405 Status const& GetStatus() const noexcept;
417 void EnableSignals(
bool force) noexcept;
423 void DisableSignals() noexcept;
426 enum class UpdateTimestamp { No = 0, Yes = 1 };
431 void RecordChanges(
bool forced =
false, UpdateTimestamp update = UpdateTimestamp::Yes) noexcept;
435 mutable SignalType m_signal;
439 unsigned m_deferred_signals = 0u;
440 unsigned m_changes_since_signal = 0u;
443 std::ostream&
operator<<(std::ostream& os, ObservableStatus
const& s);
Defer signal changes until later time.
Stores data acquisition status and allows subscription to status changes.
ObservableStatus(ObservableStatus const &)=delete
ObservableStatus & operator=(ObservableStatus &&)=default
ObservableStatus(ObservableStatus &&)=default
boost::signals2::connection ConnectStatus(SignalType::slot_type const &slot)
Connect observer that is invoked when state is modified.
ObservableStatus & operator=(ObservableStatus const &)=delete
boost::signals2::signal< void(ObservableStatus const &)> SignalType
Connect observer that is invoked when state is modified.
Contains declaration for DpPart.
Contains data structure for FITS keywords.
Declares daq::State and related functions.
constexpr std::string_view RELEASING_RSYNC
Failure during rsync source copy.
constexpr std::string_view REQUEST
Request.
constexpr std::string_view COLLECTING_RSYNC
Failure during rsync source copy.
constexpr std::string_view MERGING_MERGE
Merging failed.
AlertId MakeAlertId(std::string_view category, std::string key)
std::string key
Unique key for each alert.
bool operator==(DaqContext const &lhs, DaqContext const &rhs) noexcept
bool operator!=(AlertId const &lhs, AlertId const &rhs) noexcept
std::ostream & operator<<(std::ostream &os, AsyncProcessIf const &proc)
Formats proc representation in the form [<pid>] <args>
std::string category
Standardized category.
void SetAlert(std::vector< Alert > &alerts, Alert alert)
Set alert.
bool ClearAlert(std::vector< Alert > &alerts, AlertId const &alert)
Clear alert.
State
Observable states of the data acquisition process.
std::chrono::system_clock::time_point time
PutTimeStruct PutTime(std::chrono::system_clock::time_point const &time)
Clock::time_point TimePoint
std::chrono::system_clock Clock
Alert MakeAlert(std::string_view category, std::string key, std::string description)
Construct alert.
Describes an active Data Acquisition alert.
Uniquely identfies an alert.
Persistent status for receiver delivery.
bool IsFinalState() const noexcept
Non observable status object that keeps stores status of data acquisition.
Status & operator=(Status const &)=default
Status & operator=(Status &&)=default
std::string result
Path to resulting data product.
std::map< std::size_t, ReceiverStatus > receivers
Receiver processing (e.g.
Status(Status const &)=default
Status(Status &&)=default
std::vector< Alert > alerts
Active alerts.
std::chrono::time_point< std::chrono::system_clock > TimePoint
TimePoint timestamp
Timestamp of last update.