diff options
Diffstat (limited to 'lib/perfdata/perfdatawriter.hpp')
-rw-r--r-- | lib/perfdata/perfdatawriter.hpp | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/lib/perfdata/perfdatawriter.hpp b/lib/perfdata/perfdatawriter.hpp new file mode 100644 index 0000000..961d4e9 --- /dev/null +++ b/lib/perfdata/perfdatawriter.hpp @@ -0,0 +1,53 @@ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ + +#ifndef PERFDATAWRITER_H +#define PERFDATAWRITER_H + +#include "perfdata/perfdatawriter-ti.hpp" +#include "icinga/service.hpp" +#include "base/configobject.hpp" +#include "base/timer.hpp" +#include <fstream> + +namespace icinga +{ + +/** + * An Icinga perfdata writer. + * + * @ingroup icinga + */ +class PerfdataWriter final : public ObjectImpl<PerfdataWriter> +{ +public: + DECLARE_OBJECT(PerfdataWriter); + DECLARE_OBJECTNAME(PerfdataWriter); + + static void StatsFunc(const Dictionary::Ptr& status, const Array::Ptr& perfdata); + + void ValidateHostFormatTemplate(const Lazy<String>& lvalue, const ValidationUtils& utils) override; + void ValidateServiceFormatTemplate(const Lazy<String>& lvalue, const ValidationUtils& utils) override; + +protected: + void OnConfigLoaded() override; + void Resume() override; + void Pause() override; + +private: + boost::signals2::connection m_HandleCheckResults; + Timer::Ptr m_RotationTimer; + std::ofstream m_ServiceOutputFile; + std::ofstream m_HostOutputFile; + std::mutex m_StreamMutex; + + void CheckResultHandler(const Checkable::Ptr& checkable, const CheckResult::Ptr& cr); + static Value EscapeMacroMetric(const Value& value); + + void RotationTimerHandler(); + void RotateAllFiles(); + void RotateFile(std::ofstream& output, const String& temp_path, const String& perfdata_path); +}; + +} + +#endif /* PERFDATAWRITER_H */ |