From 22e3e486692acd8c7bac77da235f4ea3115a84fc Mon Sep 17 00:00:00 2001 From: Jean Flach Date: Mon, 10 Nov 2014 14:39:12 +0100 Subject: [PATCH] Fix check_plugins dying with certain parameters --- plugins/check_disk.cpp | 27 ++++++++++++++++----------- plugins/check_load.cpp | 25 ++++++++++++++++--------- plugins/check_network.cpp | 25 ++++++++++++++++--------- plugins/check_procs.cpp | 26 ++++++++++++++++---------- plugins/check_service.cpp | 8 ++++---- plugins/check_swap.cpp | 26 ++++++++++++++++---------- plugins/check_update.cpp | 5 ----- plugins/check_uptime.cpp | 26 ++++++++++++++++---------- plugins/check_users.cpp | 32 +++++++++++++++++++------------- plugins/thresholds.cpp | 8 ++++---- 10 files changed, 123 insertions(+), 85 deletions(-) diff --git a/plugins/check_disk.cpp b/plugins/check_disk.cpp index a1daaecf4..1eaaa5a01 100644 --- a/plugins/check_disk.cpp +++ b/plugins/check_disk.cpp @@ -170,12 +170,22 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& if (vm.count("version")) cout << "Version: " << VERSION << endl; - if (vm.count("warning")) - printInfo.warn = parse(vm["warning"].as()); - - - if (vm.count("critical")) - printInfo.crit = parse(vm["critical"].as()); + if (vm.count("warning")) { + try { + printInfo.warn = parse(vm["warning"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } + if (vm.count("critical")) { + try { + printInfo.crit = parse(vm["critical"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } if (vm.count("drives")) printInfo.drives = vm["drives"].as>(); @@ -205,11 +215,6 @@ int printOutput(printInfoStruct& printInfo, vector& vDrives) perf << L" drive=\"" << it->name << L"\";cap=" << it->cap << unit << L";free=" << it->free << unit; } - if (!printInfo.warn.set && !printInfo.crit.set) { - wcout << L"DISK OK " << tFree << unit << endl; - return 0; - } - prePerf << L"|disk=" << tFree << unit << L";" << printInfo.warn.pString() << L";" << printInfo.crit.pString() << L";0;" << tCap; diff --git a/plugins/check_load.cpp b/plugins/check_load.cpp index bbe74ff6c..4a3c7b9d6 100644 --- a/plugins/check_load.cpp +++ b/plugins/check_load.cpp @@ -140,11 +140,22 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& if (vm.count("version")) cout << "Version: " << VERSION << endl; - if (vm.count("warning")) - printInfo.warn = parse(vm["warning"].as()); - - if (vm.count("critical")) - printInfo.crit = parse(vm["critical"].as()); + if (vm.count("warning")) { + try { + printInfo.warn = parse(vm["warning"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } + if (vm.count("critical")) { + try { + printInfo.crit = parse(vm["critical"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } return -1; } @@ -152,10 +163,6 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& int printOutput(printInfoStruct& printInfo) { state state = OK; - - if (!printInfo.warn.set && !printInfo.crit.set) { - wcout << L"LOAD OK " << printInfo.load << L"%" << endl; - } if (printInfo.warn.rend(printInfo.load)) state = WARNING; diff --git a/plugins/check_network.cpp b/plugins/check_network.cpp index 0c74c18f6..8ae675269 100644 --- a/plugins/check_network.cpp +++ b/plugins/check_network.cpp @@ -151,11 +151,22 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& if (vm.count("version")) cout << "Version: " << VERSION << endl; - if (vm.count("warning")) - printInfo.warn = parse(vm["warning"].as()); - - if (vm.count("critical")) - printInfo.crit = parse(vm["critical"].as()); + if (vm.count("warning")) { + try { + printInfo.warn = parse(vm["warning"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } + if (vm.count("critical")) { + try { + printInfo.crit = parse(vm["critical"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } return -1; } @@ -172,10 +183,6 @@ int printOutput(printInfoStruct& printInfo, const vector& vInterface tss << L"netI=\"" << it->name << L"\";in=" << it->BytesInSec << L"B/s;out=" << it->BytesOutSec << L"B/s "; } - if (!printInfo.warn.set && !printInfo.crit.set) { - wcout << L"NETWORK OK " << tIn+tOut << endl; - } - if (printInfo.warn.rend(tIn + tOut)) state = WARNING; if (printInfo.crit.rend(tIn + tOut)) diff --git a/plugins/check_procs.cpp b/plugins/check_procs.cpp index bbbcd5cd3..87498b079 100644 --- a/plugins/check_procs.cpp +++ b/plugins/check_procs.cpp @@ -63,11 +63,6 @@ int printOutput(const int numProcs, printInfoStruct& printInfo) { state state = OK; - if (!printInfo.warn.set && !printInfo.crit.set) { - wcout << L"PROCS OK " << numProcs << endl; - return 0; - } - if (printInfo.warn.rend(numProcs)) state = WARNING; @@ -178,11 +173,22 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& return 0; } - if (vm.count("warning")) - printInfo.warn = parse(vm["warning"].as()); - - if (vm.count("critical")) - printInfo.crit = parse(vm["critical"].as()); + if (vm.count("warning")) { + try { + printInfo.warn = parse(vm["warning"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } + if (vm.count("critical")) { + try { + printInfo.crit = parse(vm["critical"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } if (vm.count("user")) printInfo.user = vm["user"].as(); diff --git a/plugins/check_service.cpp b/plugins/check_service.cpp index b4f31b52a..4824cd2f6 100644 --- a/plugins/check_service.cpp +++ b/plugins/check_service.cpp @@ -104,7 +104,7 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& cout << desc; wprintf( L"\nIt will then output a string looking something like this:\n\n" - L"\tSERVICE CRITICAL NOT_RUNNING\n\n" + L"\tSERVICE CRITICAL NOT_RUNNING|service=4;!4;!4;1;7\n\n" L"\"SERVICE\" being the type of the check, \"CRITICAL\" the returned status\n" L"and \"1\" is the returned value.\n" L"A service is either running (Code 0x04) or not running (any other).\n" @@ -150,13 +150,13 @@ int printOutput(const printInfoStruct& printInfo) switch (state) { case OK: - wcout << L"SERVICE OK RUNNING" << endl; + wcout << L"SERVICE OK RUNNING|service=4;!4;!4;1;7" << endl; break; case WARNING: - wcout << L"SERVICE WARNING NOT_RUNNING" << endl; + wcout << L"SERVICE WARNING NOT_RUNNING|service=" << printInfo.ServiceState << ";!4;!4;1;7" << endl; break; case CRITICAL: - wcout << L"SERVICE CRITICAL NOT_RUNNING" << endl; + wcout << L"SERVICE CRITICAL NOT_RUNNING|service=" << printInfo.ServiceState << ";!4;!4;1;7" << endl; break; } diff --git a/plugins/check_swap.cpp b/plugins/check_swap.cpp index d53c06000..72595dea3 100644 --- a/plugins/check_swap.cpp +++ b/plugins/check_swap.cpp @@ -139,11 +139,22 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& if (vm.count("version")) wcout << L"Version: " << VERSION << endl; - if (vm.count("warning")) - printInfo.warn = parse(vm["warning"].as()); - - if (vm.count("critical")) - printInfo.crit = parse(vm["critical"].as()); + if (vm.count("warning")) { + try { + printInfo.warn = parse(vm["warning"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } + if (vm.count("critical")) { + try { + printInfo.crit = parse(vm["critical"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } return -1; } @@ -152,11 +163,6 @@ int printOutput(printInfoStruct& printInfo) { state state = OK; - if (!printInfo.warn.set && !printInfo.crit.set) { - wcout << L"SWAP OK " << printInfo.swap << L"%" << endl; - return 0; - } - if (printInfo.warn.rend(printInfo.swap)) state = WARNING; diff --git a/plugins/check_update.cpp b/plugins/check_update.cpp index a3445b9d6..b646cf106 100644 --- a/plugins/check_update.cpp +++ b/plugins/check_update.cpp @@ -67,11 +67,6 @@ int printOutput(const printInfoStruct& printInfo) state state = OK; wstring output = L"UPDATE "; - if (!printInfo.warn && !printInfo.crit) { - wcout << L"UPDATE OK " << printInfo.numUpdates << endl; - return 0; - } - if (printInfo.important) state = WARNING; diff --git a/plugins/check_uptime.cpp b/plugins/check_uptime.cpp index ded0e4868..bcd8fbf34 100644 --- a/plugins/check_uptime.cpp +++ b/plugins/check_uptime.cpp @@ -145,11 +145,22 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& return 0; } - if (vm.count("warning")) - printInfo.warn = parse(vm["warning"].as()); - - if (vm.count("critical")) - printInfo.crit = parse(vm["critical"].as()); + if (vm.count("warning")) { + try { + printInfo.warn = parse(vm["warning"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } + if (vm.count("critical")) { + try { + printInfo.crit = parse(vm["critical"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } if (vm.count("unit")) { try{ @@ -167,11 +178,6 @@ static int printOutput(printInfoStruct& printInfo) { state state = OK; - if (!printInfo.warn.set && !printInfo.crit.set) { - wcout << L"UPTIME OK " << printInfo.time << TunitStr(printInfo.unit) << endl; - return 0; - } - if (printInfo.warn.rend(printInfo.time)) state = WARNING; if (printInfo.crit.rend(printInfo.time)) diff --git a/plugins/check_users.cpp b/plugins/check_users.cpp index 311464acc..65379bda7 100644 --- a/plugins/check_users.cpp +++ b/plugins/check_users.cpp @@ -140,11 +140,22 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& if (vm.count("version")) wcout << L"Version: " << VERSION << endl; - if (vm.count("warning")) - printInfo.warn = parse(vm["warning"].as()); - - if (vm.count("critical")) - printInfo.crit = parse(vm["critical"].as()); + if (vm.count("warning")) { + try { + printInfo.warn = parse(vm["warning"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } + if (vm.count("critical")) { + try { + printInfo.crit = parse(vm["critical"].as()); + } catch (std::invalid_argument& e) { + cout << e.what() << endl; + return 3; + } + } return -1; } @@ -152,11 +163,6 @@ int parseArguments(int ac, wchar_t **av, po::variables_map& vm, printInfoStruct& int printOutput(printInfoStruct& printInfo) { state state = OK; - - if (!printInfo.warn.set && !printInfo.crit.set) { - wcout << L"USERS OK " << printInfo.users << endl; - return 0; - } if (printInfo.warn.rend(printInfo.users)) state = WARNING; @@ -166,15 +172,15 @@ int printOutput(printInfoStruct& printInfo) switch (state) { case OK: - wcout << L"USERS OK " << printInfo.users << L"|users=" << printInfo.users << L";" + wcout << L"USERS OK " << printInfo.users << L"User|users=" << printInfo.users << L";" << printInfo.warn.pString() << L";" << printInfo.crit.pString() << L";0" << endl; break; case WARNING: - wcout << L"USERS WARNING " << printInfo.users << L"|users=" << printInfo.users << L";" + wcout << L"USERS WARNING " << printInfo.users << L"User|users=" << printInfo.users << L";" << printInfo.warn.pString() << L";" << printInfo.crit.pString() << L";0" << endl; break; case CRITICAL: - wcout << L"USERS CRITICAL " << printInfo.users << L"|users=" << printInfo.users << L";" + wcout << L"USERS CRITICAL " << printInfo.users << L"User|users=" << printInfo.users << L";" << printInfo.warn.pString() << L";" << printInfo.crit.pString() << L";0" << endl; break; } diff --git a/plugins/thresholds.cpp b/plugins/thresholds.cpp index 3a436e38e..aa4c4d957 100644 --- a/plugins/thresholds.cpp +++ b/plugins/thresholds.cpp @@ -28,7 +28,7 @@ using std::wstring; threshold parse(const wstring& stri) { if (stri.empty()) - throw std::invalid_argument("thresholds must not be empty"); + throw std::invalid_argument("Threshold must not be empty"); wstring str = stri; @@ -43,7 +43,7 @@ threshold parse(const wstring& stri) std::vector svec; boost::split(svec, str, boost::is_any_of(L"-")); if (svec.size() != 2) - throw std::invalid_argument("threshold range requires two arguments"); + throw std::invalid_argument("Threshold range requires two arguments"); wstring str1 = svec.at(0), str2 = svec.at(1); if (str1.at(str1.length() - 1) == L'%' && str2.at(str2.length() - 1) == L'%') { @@ -57,7 +57,7 @@ threshold parse(const wstring& stri) double d2 = boost::lexical_cast(str2); return threshold(d1, d2, !low, perc); } catch (const boost::bad_lexical_cast&) { - throw std::invalid_argument("threshold must be a number"); + throw std::invalid_argument("Unknown Threshold type"); } } else { //not range if (str.at(str.length() - 1) == L'%') { @@ -69,7 +69,7 @@ threshold parse(const wstring& stri) return threshold(d, d, !low, perc); } catch (const boost::bad_lexical_cast&) { - throw std::invalid_argument("threshold must be a number"); + throw std::invalid_argument("Unknown Threshold type"); } } } -- 2.40.0