artdaq_utilities  v1_07_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 #include "TRACE/tracemf.h" // order matters -- trace.h (no "mf") is nested from MetricMacros.hh
8 #define TRACE_NAME "test_metric"
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:
32  explicit TestMetricImpl(fhicl::ParameterSet const& config, std::string const& app_name, std::string const& metric_name)
33  : MetricPlugin(config, app_name, metric_name)
34  {
35  startMetrics();
36  }
37 
41  ~TestMetricImpl() override
42  {
43  stopMetrics();
44  }
45 
50  std::string getLibName() const override { return "test"; }
51 
59  void sendMetric_(const std::string& name, const std::string& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
60  {
61  if (!inhibit_)
62  {
64  METLOG(TLVL_DEBUG + 32) << "TestMetric: Adding MetricPoint name=" << name << ", value=" << value << ", unit=" << unit;
65  TestMetric::received_metrics.emplace_back(TestMetric::MetricPoint{time, name, value, unit});
67  }
68  }
69 
77  void sendMetric_(const std::string& name, const int& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
78  {
79  sendMetric_(name, std::to_string(value), unit, time);
80  }
81 
89  void sendMetric_(const std::string& name, const double& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
90  {
91  sendMetric_(name, std::to_string(value), unit, time);
92  }
93 
101  void sendMetric_(const std::string& name, const float& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
102  {
103  sendMetric_(name, std::to_string(value), unit, time);
104  }
105 
113  void sendMetric_(const std::string& name, const uint64_t& value, const std::string& unit, const std::chrono::system_clock::time_point& time) override
114  {
115  sendMetric_(name, std::to_string(value), unit, time);
116  }
117 
121  void startMetrics_() override
122  {
123  }
124 
128  void stopMetrics_() override
129  {
130  }
131 
132 private:
133  TestMetricImpl(const TestMetricImpl&) = delete;
134  TestMetricImpl(TestMetricImpl&&) = delete;
135  TestMetricImpl& operator=(const TestMetricImpl&) = delete;
136  TestMetricImpl& operator=(TestMetricImpl&&) = delete;
137 };
138 
139 } // End namespace artdaq
140 
141 DEFINE_ARTDAQ_METRIC(artdaq::TestMetricImpl)
void startMetrics_() override
Perform startup actions.
Definition: test_metric.cc:121
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:113
The MetricPlugin class defines the interface that MetricManager uses to send metric data to the vario...
Definition: MetricPlugin.hh:41
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:89
TestMetricImpl(fhicl::ParameterSet const &config, std::string const &app_name, std::string const &metric_name)
TestMetric Constructor.
Definition: test_metric.cc:32
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:50
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:59
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:101
static void UnlockReceivedMetricMutex()
Unlock the ReceivedMetricMutex
Definition: TestMetric.hh:46
void stopMetrics_() override
Perform shutdown actions.
Definition: test_metric.cc:128
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:41
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:77
Describes a single metric point
Definition: TestMetric.hh:25