7 #include "TRACE/tracemf.h"
8 #define TRACE_NAME (app_name_ + "_report_metric").c_str()
10 #include "artdaq-utilities/Plugins/MetricMacros.hh"
12 #include <sys/types.h>
19 #include "TRACE/tracemf.h"
28 std::chrono::steady_clock::time_point last_report_time_;
30 std::map<std::string, std::string> metrics_;
32 std::mutex report_mutex_;
45 explicit PeriodicReportMetric(fhicl::ParameterSet
const& config, std::string
const& app_name, std::string
const& metric_name)
47 , last_report_time_(std::chrono::steady_clock::now())
65 std::string
getLibName()
const override {
return "report"; }
75 void sendMetric_(
const std::string& name,
const std::string& value,
const std::string& unit,
const std::chrono::system_clock::time_point&)
override
79 metrics_[name] = value +
" " + unit;
80 writeReportMessage_(
false);
91 void sendMetric_(
const std::string& name,
const int& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
93 sendMetric_(name, std::to_string(value), unit, time);
103 void sendMetric_(
const std::string& name,
const double& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
105 sendMetric_(name, std::to_string(value), unit, time);
115 void sendMetric_(
const std::string& name,
const float& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
117 sendMetric_(name, std::to_string(value), unit, time);
127 void sendMetric_(
const std::string& name,
const uint64_t& value,
const std::string& unit,
const std::chrono::system_clock::time_point& time)
override
129 sendMetric_(name, std::to_string(value), unit, time);
144 writeReportMessage_(
true);
154 void writeReportMessage_(
bool force)
156 std::unique_lock<std::mutex> lk(report_mutex_);
157 if (force || std::chrono::duration_cast<std::chrono::duration<
double, std::ratio<1>>>(std::chrono::steady_clock::now() - last_report_time_).count() >=
accumulationTime_)
159 if (metrics_.empty())
163 last_report_time_ = std::chrono::steady_clock::now();
164 std::ostringstream str;
167 int live_metrics = 0;
168 for (
auto& metric : metrics_)
172 str <<
"," << std::endl;
174 str <<
"\t" << metric.first <<
": " << metric.second;
175 if (metric.second !=
"NOT REPORTED")
179 metric.second =
"NOT REPORTED";
182 if (live_metrics > 0)
184 METLOG(TLVL_INFO) <<
"Periodic report: " << live_metrics <<
" active metrics:" << std::endl
189 TLOG_INFO(
app_name_) <<
"Periodic report: No active metrics in last reporting interval!";
190 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...