ifw-daq  1.0.0
IFW Data Acquisition modules
status.cpp
Go to the documentation of this file.
1 #include <algorithm>
2 #include <daq/status.hpp>
3 #include <ostream>
4 
5 namespace daq {
6 
7 Status::Status(std::string id,
8  State state,
9  bool error,
10  DpParts files,
11  fits::KeywordVector keywords,
12  TimePoint timestamp) noexcept
13  : id(std::move(id))
14  , state(state)
15  , error(error)
16  , files(std::move(files))
17  , keywords(std::move(keywords))
18  , timestamp(timestamp) {
19 }
20 
21 Status::Status(std::string id) noexcept
22  : id(std::move(id))
23  , state(State::NotStarted)
24  , error(false)
25  , files()
26  , keywords()
27  , timestamp(TimePoint::clock::now()) {
28 }
29 
30 bool Status::operator==(Status const& rhs) const noexcept {
31  return id == rhs.id && state == rhs.state && files == rhs.files && keywords == rhs.keywords &&
32  error == rhs.error;
33 }
34 bool Status::operator!=(Status const& rhs) const noexcept {
35  return !(*this == rhs);
36 }
37 
38 std::ostream& operator<<(std::ostream& os, Status const& s) {
39  os << "Status(id='" << s.id << "', state=" << s.state << ", error="
40  << (s.error ? "true" : "false") << ")";
41  return os;
42 }
43 
44 ObservableStatus::ObservableStatus(std::string id) noexcept : m_status(std::move(id)) {
45 }
46 
47 bool ObservableStatus::operator==(ObservableStatus const& rhs) const noexcept {
48  return m_status == rhs.m_status;
49 }
50 
51 bool ObservableStatus::operator!=(ObservableStatus const& rhs) const noexcept {
52  return !(*this == rhs);
53 }
54 
55 bool ObservableStatus::operator==(Status const& rhs) const noexcept {
56  return m_status == rhs;
57 }
58 
59 bool ObservableStatus::operator!=(Status const& rhs) const noexcept {
60  return !(*this == rhs);
61 }
62 
63 std::string const& ObservableStatus::GetId() const noexcept {
64  return m_status.id;
65 }
66 
68  return m_status.state;
69 }
70 
71 bool ObservableStatus::GetError() const noexcept {
72  return m_status.error;
73 }
74 
75 std::vector<DpPart> const& ObservableStatus::GetFiles() const noexcept {
76  return m_status.files;
77 }
78 
80  return m_status.keywords;
81 }
82 
83 void ObservableStatus::AddFiles(std::vector<DpPart> const& files) {
84  using std::copy;
85  copy(files.begin(), files.end(), std::back_inserter(m_status.files));
86  SignalChanges();
87 }
88 
89 void ObservableStatus::UpdateKeywords(fits::KeywordVector const& keywords) noexcept {
90  if (keywords.empty()) {
91  return;
92  }
93  fits::UpdateKeywords(m_status.keywords, keywords);
94  SignalChanges();
95 }
96 
98  if (s == m_status.state) {
99  return;
100  }
101  m_status.state = s;
102  SignalChanges();
103 }
104 
105 void ObservableStatus::SetError(bool error) noexcept {
106  if (error == m_status.error) {
107  return;
108  }
109  m_status.error = error;
110  SignalChanges();
111 }
112 
113 void ObservableStatus::SignalChanges() noexcept {
114  m_status.timestamp = Status::TimePoint::clock::now();
115  try {
116  m_signal(*this);
117  } catch (...) {
118  }
119 }
120 
121 ObservableStatus::operator Status() const {
122  return m_status;
123 }
124 
125 Status const& ObservableStatus::GetStatus() const noexcept {
126  return m_status;
127 }
128 
129 std::ostream& operator<<(std::ostream& os, ObservableStatus const& s) {
130  os << "ObservableStatus(id='" << s.GetId() << "', state=" << s.GetState() << ", error="
131  << (s.GetError() ? "true" : "false") << ")";
132  return os;
133 }
134 
135 } // namespace daq
daq::Status::files
DpParts files
Definition: status.hpp:54
daq::State
State
Observable states of the data acquisition process.
Definition: state.hpp:41
daq::ObservableStatus::ObservableStatus
ObservableStatus(std::string id) noexcept
Construct a new object.
Definition: status.cpp:44
daq::Status::timestamp
TimePoint timestamp
Definition: status.hpp:56
daq::Status::state
State state
Definition: status.hpp:52
daq::ObservableStatus::GetState
State GetState() const noexcept
Definition: status.cpp:67
daq::ObservableStatus::operator==
bool operator==(ObservableStatus const &rhs) const noexcept
Definition: status.cpp:47
daq::ObservableStatus
Stores data acquisition status and allows subscription to status changes.
Definition: status.hpp:68
daq::Status::operator!=
bool operator!=(Status const &rhs) const noexcept
Definition: status.cpp:34
daq::fits::UpdateKeywords
void UpdateKeywords(KeywordVector &to, KeywordVector const &from)
Updates a with keywords from b.
Definition: keyword.cpp:120
daq
Definition: daqController.cpp:18
daq::ObservableStatus::GetKeywords
fits::KeywordVector const & GetKeywords() const noexcept
Definition: status.cpp:79
daq::ObservableStatus::operator!=
bool operator!=(ObservableStatus const &rhs) const noexcept
Definition: status.cpp:51
daq::ObservableStatus::GetStatus
Status const & GetStatus() const noexcept
Connect observer that is invoked when state is modified.
Definition: status.cpp:125
daq::Status::TimePoint
std::chrono::time_point< std::chrono::steady_clock > TimePoint
Definition: status.hpp:33
daq::Status::Status
Status(std::string id) noexcept
Definition: status.cpp:21
daq::ObservableStatus::GetId
std::string const & GetId() const noexcept
Definition: status.cpp:63
daq::Status::error
bool error
Definition: status.hpp:53
daq::Status::operator==
bool operator==(Status const &rhs) const noexcept
Definition: status.cpp:30
daq::Status::id
std::string id
Definition: status.hpp:51
status.hpp
Contains declaration for Status and ObservableStatus.
daq::Status::keywords
fits::KeywordVector keywords
Definition: status.hpp:55
daq::ObservableStatus::SetError
void SetError(bool error) noexcept
Set error flag for data acquisition.
Definition: status.cpp:105
daq::ObservableStatus::AddFiles
void AddFiles(std::vector< DpPart > const &files)
Records that a file has been produced for this data acquisition.
Definition: status.cpp:83
daq::ObservableStatus::UpdateKeywords
void UpdateKeywords(fits::KeywordVector const &) noexcept
Updates (adds or replaces) Primary HDU keywords.
Definition: status.cpp:89
daq::Status
Non observable status object that keeps stores status of data acquisition.
Definition: status.hpp:32
daq::ObservableStatus::SetState
void SetState(State s) noexcept
Set state of data acquisition.
Definition: status.cpp:97
daq::operator<<
std::ostream & operator<<(std::ostream &os, DaqController const &daq)
Definition: daqController.cpp:49
daq::fits::KeywordVector
std::vector< KeywordVariant > KeywordVector
Vector of keywords.
Definition: keyword.hpp:138
daq::ObservableStatus::GetFiles
std::vector< DpPart > const & GetFiles() const noexcept
Definition: status.cpp:75
daq::DpParts
std::vector< DpPart > DpParts
Definition: dpPart.hpp:49
daq::ObservableStatus::GetError
bool GetError() const noexcept
Definition: status.cpp:71