00001
00002
00003
00004
00005
00006
00007 #ifndef __GANGLIA_METRIC__
00008 #define __GANGLIA_METRIC__ 1
00009
00010 #include "fhiclcpp/fwd.h"
00011 #include "artdaq-utilities/Plugins/MetricMacros.hh"
00012 #include "send_gmetric.h"
00013
00017 namespace artdaq
00018 {
00022 class GangliaMetric : public MetricPlugin
00023 {
00024 private:
00025 std::string configFile_;
00026 std::string group_;
00027 std::string cluster_;
00028
00029 public:
00034 explicit GangliaMetric(fhicl::ParameterSet pset) : MetricPlugin(pset)
00035 , configFile_(pset.get<std::string>("configFile", "/etc/ganglia/gmond.conf"))
00036 , group_(pset.get<std::string>("group", "ARTDAQ"))
00037 , cluster_(pset.get<std::string>("cluster", ""))
00038 {
00039 init_gmetric(configFile_.c_str());
00040 }
00041
00042 virtual ~GangliaMetric()
00043 {
00044 MetricPlugin::stopMetrics();
00045 destroy_gmetric();
00046 }
00047
00052 std::string getLibName() const override { return "ganglia"; }
00056 void stopMetrics_() override { }
00060 void startMetrics_() override { }
00061
00068 void sendMetric_(const std::string& name, const std::string& value, const std::string& unit) override
00069 {
00070 send_gmetric(name.c_str(), value.c_str(), "string",
00071 unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
00072 }
00073
00080 void sendMetric_(const std::string& name, const int& value, const std::string& unit) override
00081 {
00082 send_gmetric(name.c_str(), std::to_string(value).c_str(),
00083 "int32", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
00084 }
00085
00092 void sendMetric_(const std::string& name, const double& value, const std::string& unit) override
00093 {
00094 send_gmetric(name.c_str(), std::to_string(value).c_str(),
00095 "double", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
00096 }
00097
00104 void sendMetric_(const std::string& name, const float& value, const std::string& unit) override
00105 {
00106 send_gmetric(name.c_str(), std::to_string(value).c_str(),
00107 "float", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
00108 }
00109
00116 void sendMetric_(const std::string& name, const unsigned long int& value, const std::string& unit) override
00117 {
00118 send_gmetric(name.c_str(), std::to_string(value).c_str(),
00119 "uint32", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
00120 }
00121 };
00122 }
00123
00124 DEFINE_ARTDAQ_METRIC(artdaq::GangliaMetric)
00125
00126 #endif //End ifndef __GANGLIA_METRIC__