2019-02-25 08:48:22 -05:00
|
|
|
/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */
|
2013-02-28 05:45:47 -05:00
|
|
|
|
2013-10-14 14:12:42 -04:00
|
|
|
#ifndef GRAPHITEWRITER_H
|
|
|
|
|
#define GRAPHITEWRITER_H
|
2013-02-28 05:45:47 -05:00
|
|
|
|
2018-01-18 07:50:38 -05:00
|
|
|
#include "perfdata/graphitewriter-ti.hpp"
|
2014-05-25 10:23:35 -04:00
|
|
|
#include "icinga/service.hpp"
|
2015-08-15 14:28:05 -04:00
|
|
|
#include "base/configobject.hpp"
|
2014-05-25 10:23:35 -04:00
|
|
|
#include "base/tcpsocket.hpp"
|
|
|
|
|
#include "base/timer.hpp"
|
2017-05-15 11:35:36 -04:00
|
|
|
#include "base/workqueue.hpp"
|
2013-03-16 16:18:53 -04:00
|
|
|
#include <fstream>
|
2021-02-02 04:16:04 -05:00
|
|
|
#include <mutex>
|
2013-03-16 16:18:53 -04:00
|
|
|
|
2013-02-28 05:45:47 -05:00
|
|
|
namespace icinga
|
|
|
|
|
{
|
|
|
|
|
|
|
|
|
|
/**
|
2013-10-14 14:12:42 -04:00
|
|
|
* An Icinga graphite writer.
|
2013-02-28 05:45:47 -05:00
|
|
|
*
|
2013-10-14 14:12:42 -04:00
|
|
|
* @ingroup perfdata
|
2013-02-28 05:45:47 -05:00
|
|
|
*/
|
2018-01-04 00:11:04 -05:00
|
|
|
class GraphiteWriter final : public ObjectImpl<GraphiteWriter>
|
2013-02-28 05:45:47 -05:00
|
|
|
{
|
|
|
|
|
public:
|
2014-11-02 18:44:04 -05:00
|
|
|
DECLARE_OBJECT(GraphiteWriter);
|
|
|
|
|
DECLARE_OBJECTNAME(GraphiteWriter);
|
2013-02-28 05:45:47 -05:00
|
|
|
|
2015-02-07 16:36:17 -05:00
|
|
|
static void StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata);
|
2014-02-17 10:34:18 -05:00
|
|
|
|
2018-01-11 01:08:09 -05:00
|
|
|
void ValidateHostNameTemplate(const Lazy<String>& lvalue, const ValidationUtils& utils) override;
|
|
|
|
|
void ValidateServiceNameTemplate(const Lazy<String>& lvalue, const ValidationUtils& utils) override;
|
2015-02-11 07:12:08 -05:00
|
|
|
|
2013-02-28 05:45:47 -05:00
|
|
|
protected:
|
2018-01-03 23:12:56 -05:00
|
|
|
void OnConfigLoaded() override;
|
2018-10-24 07:29:27 -04:00
|
|
|
void Resume() override;
|
|
|
|
|
void Pause() override;
|
2013-02-28 05:45:47 -05:00
|
|
|
|
|
|
|
|
private:
|
2019-07-25 08:55:22 -04:00
|
|
|
Shared<AsioTcpStream>::Ptr m_Stream;
|
2021-02-02 04:16:04 -05:00
|
|
|
std::mutex m_StreamMutex;
|
2018-01-04 03:43:49 -05:00
|
|
|
WorkQueue m_WorkQueue{10000000, 1};
|
2015-02-07 16:36:17 -05:00
|
|
|
|
2022-04-06 07:01:18 -04:00
|
|
|
boost::signals2::connection m_HandleCheckResults;
|
2013-11-09 08:22:38 -05:00
|
|
|
Timer::Ptr m_ReconnectTimer;
|
2013-02-28 05:45:47 -05:00
|
|
|
|
2014-04-03 09:36:13 -04:00
|
|
|
void CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr);
|
2017-06-06 13:50:37 -04:00
|
|
|
void CheckResultHandlerInternal(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr);
|
2019-01-17 02:53:55 -05:00
|
|
|
void SendMetric(const Checkable::Ptr& checkable, const String& prefix, const String& name, double value, double ts);
|
|
|
|
|
void SendPerfdata(const Checkable::Ptr& checkable, const String& prefix, const CheckResult::Ptr& cr, double ts);
|
2017-08-09 12:52:35 -04:00
|
|
|
static String EscapeMetric(const String& str);
|
2015-06-19 12:11:55 -04:00
|
|
|
static String EscapeMetricLabel(const String& str);
|
2017-08-09 12:52:35 -04:00
|
|
|
static Value EscapeMacroMetric(const Value& value);
|
2013-11-07 08:38:37 -05:00
|
|
|
|
2018-01-03 22:25:35 -05:00
|
|
|
void ReconnectTimerHandler();
|
2017-05-15 11:35:36 -04:00
|
|
|
|
2018-01-03 22:25:35 -05:00
|
|
|
void Disconnect();
|
2019-02-20 08:54:23 -05:00
|
|
|
void DisconnectInternal();
|
2018-01-03 22:25:35 -05:00
|
|
|
void Reconnect();
|
2019-02-20 08:54:23 -05:00
|
|
|
void ReconnectInternal();
|
2017-05-15 11:35:36 -04:00
|
|
|
|
2018-01-03 22:25:35 -05:00
|
|
|
void AssertOnWorkQueue();
|
2017-05-15 11:35:36 -04:00
|
|
|
|
|
|
|
|
void ExceptionHandler(boost::exception_ptr exp);
|
2013-02-28 05:45:47 -05:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
2013-10-14 14:12:42 -04:00
|
|
|
#endif /* GRAPHITEWRITER_H */
|