7 #include "TRACE/tracemf.h"
8 #define TRACE_NAME (app_name_ + "_report_metric").c_str()
10 #include "artdaq-utilities/Plugins/MetricMacros.hh"
11 #include "fhiclcpp/ParameterSet.h"
13 #include <sys/types.h>
29 std::chrono::steady_clock::time_point last_report_time_;
31 std::map<std::string, std::string> metrics_;
33 std::mutex report_mutex_;
46 explicit PeriodicReportMetric(fhicl::ParameterSet
const& config, std::string
const& app_name, std::string
const& metric_name)
48 , last_report_time_(std::chrono::steady_clock::now())
66 std::string
getLibName()
const override {
return "report"; }
76 void sendMetric_(
const std::string& name,
const std::string& value,
const std::string& unit,
const std::chrono::system_clock::time_point&)
override
80 metrics_[name] = value +
" " + unit;
81 writeReportMessage_(
false);
92 void sendMetric_(
const std::string& name,
const int& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
94 sendMetric_(name, std::to_string(value), unit, time);
104 void sendMetric_(
const std::string& name,
const double& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
106 sendMetric_(name, std::to_string(value), unit, time);
116 void sendMetric_(
const std::string& name,
const float& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
118 sendMetric_(name, std::to_string(value), unit, time);
128 void sendMetric_(
const std::string& name,
const uint64_t& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
130 sendMetric_(name, std::to_string(value), unit, time);
145 writeReportMessage_(
true);
155 void writeReportMessage_(
bool force)
157 std::unique_lock<std::mutex> lk(report_mutex_);
158 if (force || std::chrono::duration_cast<std::chrono::duration<
double, std::ratio<1>>>(std::chrono::steady_clock::now() - last_report_time_).count() >=
accumulationTime_)
160 if (metrics_.empty())
164 last_report_time_ = std::chrono::steady_clock::now();
165 std::ostringstream str;
168 int live_metrics = 0;
169 for (
auto& metric : metrics_)
173 str <<
"," << std::endl;
175 str <<
"\t" << metric.first <<
": " << metric.second;
176 if (metric.second !=
"NOT REPORTED")
180 metric.second =
"NOT REPORTED";
183 if (live_metrics > 0)
185 METLOG(TLVL_INFO) <<
"Periodic report: " << live_metrics <<
" active metrics:" << std::endl
190 TLOG_INFO(
app_name_) <<
"Periodic report: No active metrics in last reporting interval!";
191 METLOG(TLVL_INFO) <<
"Periodic report: No active metrics in last reporting interval!";
The MetricPlugin class defines the interface that MetricManager uses to send metric data to the vario...
PeriodicReportMetric(fhicl::ParameterSet const &config, std::string const &app_name, std::string const &metric_name)
PeriodicReportMetric Constructor.
void startMetrics()
Perform startup actions. Simply calls the virtual startMetrics_ function.
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 a file.
void sendMetric_(const std::string &name, const std::string &value, const std::string &unit, const std::chrono::system_clock::time_point &) override
Write metric data to a file.
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 a file.
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 a file.
void stopMetrics()
Perform shutdown actions. Zeroes out all accumulators, and sends zeros for each metric. Calls stopMetrics_() for any plugin-defined shutdown actions.
std::string app_name_
Name of the application which is sending metrics to this plugin.
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 a file.
std::string getLibName() const override
Get the library name for the PeriodicReport metric.
PeriodicReportMetric writes metric data to a file on disk.
void startMetrics_() override
Perform startup actions.
void stopMetrics_() override
Perform shutdown actions.
double accumulationTime_
The amount of time to average metric values; except for accumulate=false metrics, will be the interva...
~PeriodicReportMetric() override
PeriodicReportMetric Destructor. Calls stopMetrics and then closes the file.
bool inhibit_
Flag to indicate that the MetricPlugin is being stopped, and any metric back-ends which do not have a...