7 #include "artdaq-utilities/Plugins/MetricMacros.hh"
8 #include "fhiclcpp/ParameterSet.h"
13 #include <sys/types.h>
21 std::string outputFile_;
22 bool uniquify_file_name_;
23 std::ofstream outputStream_;
24 std::ios_base::openmode mode_;
28 , outputFile_(pset.get<std::string>(
"fileName",
"FileMetric.out"))
29 , uniquify_file_name_(pset.get<
bool>(
"uniquify",
false))
32 std::string modeString = pset.get<std::string>(
"fileMode",
"append");
34 mode_ = std::ofstream::out | std::ofstream::app;
35 if (modeString ==
"Overwrite" || modeString ==
"Create" || modeString ==
"Write")
37 mode_ = std::ofstream::out | std::ofstream::trunc;
40 if (uniquify_file_name_)
42 std::string unique_id = std::to_string(getpid());
43 if (outputFile_.find(
"%UID%") != std::string::npos)
45 outputFile_ = outputFile_.replace(outputFile_.find(
"%UID%"), 5, unique_id);
49 if (outputFile_.rfind(
".") != std::string::npos)
51 outputFile_ = outputFile_.insert(outputFile_.rfind(
"."),
"_" + unique_id);
55 outputFile_ = outputFile_.append(
"_" + unique_id);
69 virtual std::string getLibName()
const {
return "file"; }
71 virtual void sendMetric_(
const std::string& name,
const std::string& value,
const std::string& unit)
73 if (!stopped_ && !inhibit_)
75 const std::time_t result = std::time(NULL);
76 outputStream_ << std::ctime(&result) <<
"FileMetric: " << name <<
": " << value <<
" " << unit <<
"." << std::endl;
80 virtual void sendMetric_(
const std::string& name,
const int& value,
const std::string& unit)
82 sendMetric(name, std::to_string(value), unit);
85 virtual void sendMetric_(
const std::string& name,
const double& value,
const std::string& unit)
87 sendMetric(name, std::to_string(value), unit);
90 virtual void sendMetric_(
const std::string& name,
const float& value,
const std::string& unit)
92 sendMetric(name, std::to_string(value), unit);
95 virtual void sendMetric_(
const std::string& name,
const unsigned long int& value,
const std::string& unit)
97 sendMetric(name, std::to_string(value), unit);
100 virtual void startMetrics_()
103 const std::time_t result = std::time(NULL);
104 outputStream_ << std::ctime(&result) <<
"FileMetric plugin started." << std::endl;
107 virtual void stopMetrics_()
110 const std::time_t result = std::time(NULL);
111 outputStream_ << std::ctime(&result) <<
"FileMetric plugin has been stopped!" << std::endl;
117 outputStream_.open(outputFile_.c_str(), mode_);
118 const std::time_t result = std::time(NULL);
119 outputStream_ << std::ctime(&result) <<
"FileMetric plugin file opened." << std::endl;
124 const std::time_t result = std::time(NULL);
125 outputStream_ << std::ctime(&result) <<
"FileMetric closing file stream." << std::endl;
126 outputStream_.close();