artdaq_utilities  v1_06_02
test_metric.cc
1 // test_metric.cc: Test Metric Plugin
2 // Author: Eric Flumerfelt
3 // Last Modified: 4/10/2019
4 //
5 // An implementation of the MetricPlugin that writes to the TestMetric static storage
6 
7 #define TRACE_NAME "TestMetric"
8 #include "trace.h"
9 
10 #include "artdaq-utilities/Plugins/MetricMacros.hh"
12 #include "fhiclcpp/ParameterSet.h"
13 
14 #include <sys/types.h>
15 #include <unistd.h>
16 #include <ctime>
17 #include <string>
18 
19 namespace artdaq {
23 class TestMetricImpl final : public MetricPlugin
24 {
25 public:
31  explicit TestMetricImpl(fhicl::ParameterSet const& config, std::string const& app_name)
32  : MetricPlugin(config, app_name)
33  {
34  startMetrics();
35  }
36 
40  ~TestMetricImpl() override
41  {
42  stopMetrics();
43  }
44 
49  std::string getLibName() const override { return "test"; }
50 
58  void sendMetric_(const std::string& name, const std::string& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
59  {
60  if (!inhibit_)
61  {
63  TLOG(TLVL_TRACE) << "TestMetric: Adding MetricPoint name=" << name << ", value=" << value << ", unit=" << unit;
64  TestMetric::received_metrics.emplace_back(TestMetric::MetricPoint{time, name, value, unit});
66  }
67  }
68 
76  void sendMetric_(const std::string& name, const int& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
77  {
78  sendMetric_(name, std::to_string(value), unit, time);
79  }
80 
88  void sendMetric_(const std::string& name, const double& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
89  {
90  sendMetric_(name, std::to_string(value), unit, time);
91  }
92 
100  void sendMetric_(const std::string& name, const float& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
101  {
102  sendMetric_(name, std::to_string(value), unit, time);
103  }
104 
112  void sendMetric_(const std::string& name, const uint64_t& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
113  {
114  sendMetric_(name, std::to_string(value), unit, time);
115  }
116 
120  void startMetrics_() override
121  {
122  }
123 
127  void stopMetrics_() override
128  {
129  }
130 
131 private:
132  TestMetricImpl(const TestMetricImpl&) = delete;
133  TestMetricImpl(TestMetricImpl&&) = delete;
134  TestMetricImpl& operator=(const TestMetricImpl&) = delete;
135  TestMetricImpl& operator=(TestMetricImpl&&) = delete;
136 };
137 
138 } // End namespace artdaq
139 
140 DEFINE_ARTDAQ_METRIC(artdaq::TestMetricImpl)
TestMetricImpl(fhicl::ParameterSet const &config, std::string const &app_name)
TestMetric Constructor.
Definition: test_metric.cc:31
void startMetrics_() override
Perform startup actions.
Definition: test_metric.cc:120
void sendMetric_(const std::string &name, const uint64_t &value, const std::string &unit, const std::chrono::system_clock::time_point &time) override
Write metric data to memory.
Definition: test_metric.cc:112
The MetricPlugin class defines the interface that MetricManager uses to send metric data to the vario...
Definition: MetricPlugin.hh:37
void startMetrics()
Perform startup actions. Simply calls the virtual startMetrics_ function.
void sendMetric_(const std::string &name, const double &value, const std::string &unit, const std::chrono::system_clock::time_point &time) override
Write metric data to memory.
Definition: test_metric.cc:88
static void LockReceivedMetricMutex()
Lock the ReceivedMetricMutex
Definition: TestMetric.hh:36
static std::list< MetricPoint > received_metrics
List of received metric data.
Definition: TestMetric.hh:53
std::string getLibName() const override
Get the library name for the Test metric.
Definition: test_metric.cc:49
void stopMetrics()
Perform shutdown actions. Zeroes out all accumulators, and sends zeros for each metric. Calls stopMetrics_() for any plugin-defined shutdown actions.
TestMetric writes metric data to a statically-allocated memory block.
Definition: test_metric.cc:23
void sendMetric_(const std::string &name, const std::string &value, const std::string &unit, const std::chrono::system_clock::time_point &time) override
Write metric data to memory.
Definition: test_metric.cc:58
void sendMetric_(const std::string &name, const float &value, const std::string &unit, const std::chrono::system_clock::time_point &time) override
Write metric data to memory.
Definition: test_metric.cc:100
static void UnlockReceivedMetricMutex()
Unlock the ReceivedMetricMutex
Definition: TestMetric.hh:46
void stopMetrics_() override
Perform shutdown actions.
Definition: test_metric.cc:127
bool inhibit_
Flag to indicate that the MetricPlugin is being stopped, and any metric back-ends which do not have a...
~TestMetricImpl() override
TestMetricImpl Destructor. Calls stopMetrics.
Definition: test_metric.cc:40
void sendMetric_(const std::string &name, const int &value, const std::string &unit, const std::chrono::system_clock::time_point &time) override
Write metric data to memory.
Definition: test_metric.cc:76
Describes a single metric point
Definition: TestMetric.hh:25