7 #include "artdaq-utilities/Plugins/MetricMacros.hh"
8 #include "fhiclcpp/ParameterSet.h"
13 #include <sys/types.h>
24 std::string outputFile_;
25 bool uniquify_file_name_;
26 std::ofstream outputStream_;
27 std::ios_base::openmode mode_;
42 , outputFile_(
pset.get<std::string>(
"fileName",
"FileMetric.out"))
43 , uniquify_file_name_(
pset.get<bool>(
"uniquify", false))
46 std::string modeString =
pset.get<std::string>(
"fileMode",
"append");
48 mode_ = std::ofstream::out | std::ofstream::app;
49 if (modeString ==
"Overwrite" || modeString ==
"Create" || modeString ==
"Write")
51 mode_ = std::ofstream::out | std::ofstream::trunc;
54 if (uniquify_file_name_)
56 std::string unique_id = std::to_string(getpid());
57 if (outputFile_.find(
"%UID%") != std::string::npos)
59 outputFile_ = outputFile_.replace(outputFile_.find(
"%UID%"), 5, unique_id);
63 if (outputFile_.rfind(
".") != std::string::npos)
65 outputFile_ = outputFile_.insert(outputFile_.rfind(
"."),
"_" + unique_id);
69 outputFile_ = outputFile_.append(
"_" + unique_id);
90 std::string
getLibName()
const override {
return "file"; }
98 void sendMetric_(
const std::string& name,
const std::string& value,
const std::string& unit)
override
102 const std::time_t result = std::time(0);
103 outputStream_ << std::ctime(&result) <<
"FileMetric: " << name <<
": " << value <<
" " << unit <<
"." << std::endl;
113 void sendMetric_(
const std::string& name,
const int& value,
const std::string& unit)
override
124 void sendMetric_(
const std::string& name,
const double& value,
const std::string& unit)
override
135 void sendMetric_(
const std::string& name,
const float& value,
const std::string& unit)
override
146 void sendMetric_(
const std::string& name,
const unsigned long int& value,
const std::string& unit)
override
157 const std::time_t result = std::time(0);
158 outputStream_ << std::ctime(&result) <<
"FileMetric plugin started." << std::endl;
167 const std::time_t result = std::time(0);
168 outputStream_ << std::ctime(&result) <<
"FileMetric plugin has been stopped!" << std::endl;
174 outputStream_.open(outputFile_.c_str(), mode_);
175 const std::time_t result = std::time(0);
176 outputStream_ << std::ctime(&result) <<
"FileMetric plugin file opened." << std::endl;
181 const std::time_t result = std::time(0);
182 outputStream_ << std::ctime(&result) <<
"FileMetric closing file stream." << std::endl;
183 outputStream_.close();
FileMetric(fhicl::ParameterSet config)
FileMetric Constructor. Opens the file and starts the metric.
void sendMetric_(const std::string &name, const std::string &value, const std::string &unit) override
Write metric data to a file.
void sendMetric_(const std::string &name, const unsigned long int &value, const std::string &unit) override
Write metric data to a file.
The MetricPlugin class defines the interface that MetricManager uses to send metric data to the vario...
void sendMetric_(const std::string &name, const double &value, const std::string &unit) override
Write metric data to a file.
void startMetrics()
Perform startup actions. Simply calls the virtual startMetrics_ function.
fhicl::ParameterSet pset
The ParameterSet used to configure the MetricPlugin.
void sendMetric_(const std::string &name, const int &value, const std::string &unit) override
Write metric data to a file.
void stopMetrics_() override
Perform shutdown actions. Writes stop message to output file.
void stopMetrics()
Perform shutdown actions. Zeroes out all accumulators, and sends zeros for each metric. Calls stopMetrics_() for any plugin-defined shutdown actions.
void startMetrics_() override
Perform startup actions. Writes start message to output file.
void sendMetric_(const std::string &name, const float &value, const std::string &unit) override
Write metric data to a file.
FileMetric writes metric data to a file on disk.
virtual ~FileMetric()
FileMetric Destructor. Calls stopMetrics and then closes the file.
std::string getLibName() const override
Get the library name for the File metric.
bool inhibit_
Whether to inhibit all metric sending.