if (!IcingaApplication::GetInstance()->GetEnablePerfdata() || !service->GetEnablePerfdata())
return;
+ /* TODO: sanitize host and service names */
+ String hostName = service->GetHost()->GetName();
+ String serviceName = service->GetShortName();
+
+ SanitizeMetric(hostName);
+ SanitizeMetric(serviceName);
+
+ String prefix = "icinga." + hostName + "." + serviceName;
+
/* basic metrics */
- SendMetric(service, "current_attempt", service->GetCheckAttempt());
- SendMetric(service, "max_check_attempts", service->GetMaxCheckAttempts());
- SendMetric(service, "state_type", service->GetStateType());
- SendMetric(service, "state", service->GetState());
- SendMetric(service, "latency", Service::CalculateLatency(cr));
- SendMetric(service, "execution_time", Service::CalculateExecutionTime(cr));
+ SendMetric(prefix, "current_attempt", service->GetCheckAttempt());
+ SendMetric(prefix, "max_check_attempts", service->GetMaxCheckAttempts());
+ SendMetric(prefix, "state_type", service->GetStateType());
+ SendMetric(prefix, "state", service->GetState());
+ SendMetric(prefix, "latency", Service::CalculateLatency(cr));
+ SendMetric(prefix, "execution_time", Service::CalculateExecutionTime(cr));
Value pdv = cr->Get("performance_data");
else
valueNum = static_cast<PerfdataValue::Ptr>(value)->GetValue();
- SendMetric(service, key, valueNum);
+ SendMetric(prefix, key, valueNum);
}
}
-void GraphiteWriter::SendMetric(const Service::Ptr& service, const String& name, double value)
+void GraphiteWriter::SendMetric(const String& prefix, const String& name, double value)
{
- /* TODO: sanitize host and service names */
- String hostName = service->GetHost()->GetName();
- String serviceName = service->GetShortName();
-
- SanitizeMetric(hostName);
- SanitizeMetric(serviceName);
-
- String metricPrefix = hostName + "." + serviceName;
- String graphitePrefix = "icinga";
+ std::ostringstream msgbuf;
+ msgbuf << prefix << "." << name << " " << value << " " << static_cast<long>(Utility::GetTime()) << "\n";
- String metric = graphitePrefix + "." + metricPrefix + "." + name + " " + Convert::ToString(value) + " " + Convert::ToString(static_cast<long>(Utility::GetTime())) + "\n";
+ String metric = msgbuf.str();
Log(LogDebug, "perfdata", "GraphiteWriter: Add to metric list:'" + metric + "'.");
ObjectLock olock(this);
#include "base/i2-base.h"
#include "base/value.h"
+#include <boost/lexical_cast.hpp>
namespace icinga
{
class I2_BASE_API Convert
{
public:
- static long ToLong(const String& val);
- static double ToDouble(const String& val);
+ template<typename T>
+ static long ToLong(const T& val)
+ {
+ return boost::lexical_cast<long>(val);
+ }
+
+ template<typename T>
+ static double ToDouble(const T& val)
+ {
+ return boost::lexical_cast<double>(val);
+ }
+
static bool ToBool(const String& val);
- static String ToString(const Value& val);
+
+ template<typename T>
+ static String ToString(const T& val)
+ {
+ return boost::lexical_cast<String>(val);
+ }
private:
Convert(void);