diff options
| -rw-r--r-- | libadhocutil/nagios.cpp | 30 | ||||
| -rw-r--r-- | libadhocutil/nagios.h | 23 | ||||
| -rw-r--r-- | libadhocutil/unittests/Jamfile.jam | 8 | ||||
| -rw-r--r-- | libadhocutil/unittests/testNagios.cpp | 16 | 
4 files changed, 77 insertions, 0 deletions
diff --git a/libadhocutil/nagios.cpp b/libadhocutil/nagios.cpp new file mode 100644 index 0000000..8bd7f62 --- /dev/null +++ b/libadhocutil/nagios.cpp @@ -0,0 +1,30 @@ +#include "nagios.h" +#include "ctf-impl/printf-compat.h" +#include <fstream> +#include <sys/utsname.h> + +namespace AdHoc { +	// [<timestamp>] PROCESS_SERVICE_CHECK_RESULT;<host_name>;<svc_description>;<return_code>;<plugin_output> +	AdHocFormatter(NagiosPassiveServiceCheck, "[%?] PROCESS_SERVICE_CHECK_RESULT;%?;%?;%d;%?\n"); + +	bool +	submitNagiosPassiveServiceCheck(const std::string_view & svc, NagiosStatusCode code, const std::string_view & output) +	{ +		std::ofstream command_file("/var/nagios/rw/nagios.cmd"); +		return submitNagiosPassiveServiceCheck(command_file, svc, code, output); +	} + +	bool +	submitNagiosPassiveServiceCheck(std::ostream & command_file, const std::string_view & svc, +			NagiosStatusCode code, const std::string_view & output) +	{ +		if (command_file.good()) { +			struct utsname buf; +			uname(&buf); +			NagiosPassiveServiceCheck::write(command_file, time(nullptr), buf.nodename, svc, (uint8_t)code, output); +			command_file.flush(); +		} +		return command_file.good(); +	} +} + diff --git a/libadhocutil/nagios.h b/libadhocutil/nagios.h new file mode 100644 index 0000000..144c27a --- /dev/null +++ b/libadhocutil/nagios.h @@ -0,0 +1,23 @@ +#ifndef NAGIOS_H +#define NAGIOS_H + +#include "visibility.h" +#include <cstdint> +#include <string_view> + +namespace AdHoc { +	enum class NagiosStatusCode : uint8_t { +		OK = 0, +		Warning = 1, +		Critical = 2, +		Unknown = 3, +	}; + +	DLL_PUBLIC bool submitNagiosPassiveServiceCheck(const std::string_view &, +			NagiosStatusCode, const std::string_view &); +	DLL_PUBLIC bool submitNagiosPassiveServiceCheck(std::ostream &, const std::string_view &, +			NagiosStatusCode, const std::string_view &); +} + +#endif + diff --git a/libadhocutil/unittests/Jamfile.jam b/libadhocutil/unittests/Jamfile.jam index 0b749a8..7dd62fb 100644 --- a/libadhocutil/unittests/Jamfile.jam +++ b/libadhocutil/unittests/Jamfile.jam @@ -295,3 +295,11 @@ run  	<library>boost_utf  	; +run +	testNagios.cpp +	: : : +	<define>BOOST_TEST_DYN_LINK +	<library>..//adhocutil +	<library>boost_utf +	; + diff --git a/libadhocutil/unittests/testNagios.cpp b/libadhocutil/unittests/testNagios.cpp new file mode 100644 index 0000000..7ef64dc --- /dev/null +++ b/libadhocutil/unittests/testNagios.cpp @@ -0,0 +1,16 @@ +#define BOOST_TEST_MODULE Nagios + +#include <boost/test/unit_test.hpp> +#include <nagios.h> + +BOOST_AUTO_TEST_CASE(test_write_cmd, * boost::unit_test::disabled()) +{ +	BOOST_REQUIRE(AdHoc::submitNagiosPassiveServiceCheck("some service", AdHoc::NagiosStatusCode::OK, "bar")); +} + +BOOST_AUTO_TEST_CASE(test_fmtrite_cmd) +{ +	std::stringstream strm; +	BOOST_REQUIRE(AdHoc::submitNagiosPassiveServiceCheck(strm, "some service", AdHoc::NagiosStatusCode::OK, "bar")); +} +  | 
