artdaq_ganglia_plugin  v1_02_05b
 All Classes Namespaces Files Functions
ganglia_metric.cc
1 //ganglia_metric.cc: Ganglia Metric Plugin
2 // Author: Eric Flumerfelt
3 // Last Modified: 11/14/2014
4 //
5 // An implementation of the MetricPlugin interface for Ganglia
6 
7 #ifndef __GANGLIA_METRIC__
8 #define __GANGLIA_METRIC__ 1
9 
10 #include "fhiclcpp/fwd.h"
11 #include "artdaq-utilities/Plugins/MetricMacros.hh"
12 #include "send_gmetric.h"
13 
17 namespace artdaq
18 {
22  class GangliaMetric : public MetricPlugin
23  {
24  private:
25  std::string configFile_;
26  std::string group_;
27  std::string cluster_;
28 
29  public:
34  explicit GangliaMetric(fhicl::ParameterSet pset) : MetricPlugin(pset)
35  , configFile_(pset.get<std::string>("configFile", "/etc/ganglia/gmond.conf"))
36  , group_(pset.get<std::string>("group", "ARTDAQ"))
37  , cluster_(pset.get<std::string>("cluster", ""))
38  {
39  init_gmetric(configFile_.c_str());
40  }
41 
42  virtual ~GangliaMetric()
43  {
44  MetricPlugin::stopMetrics();
46  }
47 
52  std::string getLibName() const override { return "ganglia"; }
56  void stopMetrics_() override { }
60  void startMetrics_() override { }
61 
68  void sendMetric_(const std::string& name, const std::string& value, const std::string& unit) override
69  {
70  send_gmetric(name.c_str(), value.c_str(), "string",
71  unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
72  }
73 
80  void sendMetric_(const std::string& name, const int& value, const std::string& unit) override
81  {
82  send_gmetric(name.c_str(), std::to_string(value).c_str(),
83  "int32", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
84  }
85 
92  void sendMetric_(const std::string& name, const double& value, const std::string& unit) override
93  {
94  send_gmetric(name.c_str(), std::to_string(value).c_str(),
95  "double", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
96  }
97 
104  void sendMetric_(const std::string& name, const float& value, const std::string& unit) override
105  {
106  send_gmetric(name.c_str(), std::to_string(value).c_str(),
107  "float", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
108  }
109 
116  void sendMetric_(const std::string& name, const unsigned long int& value, const std::string& unit) override
117  {
118  send_gmetric(name.c_str(), std::to_string(value).c_str(),
119  "uint32", unit.c_str(), "both", 15, 0, group_.c_str(), cluster_.c_str(), "", "");
120  }
121  };
122 } //End namespace artdaq
123 
124 DEFINE_ARTDAQ_METRIC(artdaq::GangliaMetric)
125 
126 #endif //End ifndef __GANGLIA_METRIC__
std::string getLibName() const override
Gets the unique library name of this plugin.
GangliaMetric(fhicl::ParameterSet pset)
void sendMetric_(const std::string &name, const double &value, const std::string &unit) override
Send a double metric to Ganglia.
int init_gmetric(const char *conf)
Initialize Ganglia.
Definition: send_gmetric.c:18
void stopMetrics_() override
Ganglia does not need any specific action on stop.
void destroy_gmetric()
Close connection to gmond.
Definition: send_gmetric.c:48
void sendMetric_(const std::string &name, const float &value, const std::string &unit) override
Send a float metric to Ganglia.
int send_gmetric(const char *name, const char *value, const char *type, const char *units, const char *slope, int tmax, int dmax, const char *group, const char *cluster, const char *desc, const char *title)
Send a metric to gmond.
Definition: send_gmetric.c:53
void sendMetric_(const std::string &name, const std::string &value, const std::string &unit) override
Send a string metric to Ganglia.
void sendMetric_(const std::string &name, const int &value, const std::string &unit) override
Send a integer metric to Ganglia (truncated to int32)
An instance of the MetricPlugin class that sends metric data to Ganglia.
void startMetrics_() override
Ganglia does not need any specific action on start.
void sendMetric_(const std::string &name, const unsigned long int &value, const std::string &unit) override
Send an unsigned long metric to Ganglia (truncated to uint32)