diff --git a/doc/10-icinga-template-library.md b/doc/10-icinga-template-library.md index 2c2d082e6..231a112dc 100644 --- a/doc/10-icinga-template-library.md +++ b/doc/10-icinga-template-library.md @@ -1633,12 +1633,12 @@ The data collection is instant. Custom attributes: -Name | Description -:---------------|:------------ -swap\_win\_warn | **Optional**. The warning threshold. Defaults to "10%". -swap\_win\_crit | **Optional**. The critical threshold. Defaults to "5%". -swap\_win\_unit | **Optional**. The unit to display the received value in, thresholds are interpreted in this unit. Defaults to "mb" (megabyte). - +Name | Description +:--------------- | :------------ +swap\_win\_warn | **Optional**. The warning threshold. Defaults to "10%". +swap\_win\_crit | **Optional**. The critical threshold. Defaults to "5%". +swap\_win\_unit | **Optional**. The unit to display the received value in, thresholds are interpreted in this unit. Defaults to "mb" (megabyte). +swap\_win\_show\_used | **Optional**. Show used swap instead of the free swap. ### update-windows diff --git a/itl/command-plugins-windows.conf b/itl/command-plugins-windows.conf index c0d2b125a..eddee07fd 100644 --- a/itl/command-plugins-windows.conf +++ b/itl/command-plugins-windows.conf @@ -262,6 +262,10 @@ object CheckCommand "swap-windows" { value = "$swap_win_unit$" description = "Unit to display swap in" } + "-U" = { + set_if = "$swap_win_show_used$" + description = "Show used swap instead of the free swap" + } } // Default diff --git a/plugins/check_swap.cpp b/plugins/check_swap.cpp index 51f8bde22..4c3a1deb0 100644 --- a/plugins/check_swap.cpp +++ b/plugins/check_swap.cpp @@ -36,6 +36,7 @@ struct printInfoStruct double aSwap; double percentFree; Bunit unit = BunitMB; + bool showUsed; }; struct pageFileInfo @@ -73,6 +74,7 @@ static int parseArguments(int ac, WCHAR **av, po::variables_map& vm, printInfoSt ("warning,w", po::wvalue(), "Warning threshold") ("critical,c", po::wvalue(), "Critical threshold") ("unit,u", po::wvalue(), "The unit to use for display (default MB)") + ("show-used,U", "Show used swap instead of the free swap") ; po::wcommand_line_parser parser(ac, av); @@ -167,6 +169,12 @@ static int parseArguments(int ac, WCHAR **av, po::variables_map& vm, printInfoSt } } + if (vm.count("show-used")) { + printInfo.showUsed = true; + printInfo.warn.legal = true; + printInfo.crit.legal = true; + } + return -1; } @@ -177,30 +185,35 @@ static int printOutput(printInfoStruct& printInfo) state state = OK; - if (printInfo.warn.rend(printInfo.aSwap, printInfo.tSwap)) + std::wcout << L"SWAP "; + + double currentValue; + + if (!printInfo.showUsed) + currentValue = printInfo.aSwap; + else + currentValue = printInfo.tSwap - printInfo.aSwap; + + if (printInfo.warn.rend(currentValue, printInfo.tSwap)) { state = WARNING; - - if (printInfo.crit.rend(printInfo.aSwap, printInfo.tSwap)) + std::wcout << L"WARNING - "; + } else if (printInfo.crit.rend(currentValue, printInfo.tSwap)) { state = CRITICAL; - - switch (state) { - case OK: - std::wcout << L"SWAP OK - " << printInfo.percentFree << L"% free | 'swap'=" << printInfo.aSwap << BunitStr(printInfo.unit) << L";" - << printInfo.warn.pString(printInfo.tSwap) << L";" << printInfo.crit.pString(printInfo.tSwap) - << L";0;" << printInfo.tSwap << '\n'; - break; - case WARNING: - std::wcout << L"SWAP WARNING - " << printInfo.percentFree << L"% free | 'swap'=" << printInfo.aSwap << BunitStr(printInfo.unit) << L";" - << printInfo.warn.pString(printInfo.tSwap) << L";" << printInfo.crit.pString(printInfo.tSwap) - << L";0;" << printInfo.tSwap << '\n'; - break; - case CRITICAL: - std::wcout << L"SWAP CRITICAL - " << printInfo.percentFree << L"% free | 'swap'=" << printInfo.aSwap << BunitStr(printInfo.unit) << L";" - << printInfo.warn.pString(printInfo.tSwap) << L";" << printInfo.crit.pString(printInfo.tSwap) - << L";0;" << printInfo.tSwap << '\n'; - break; + std::wcout << L"CRITICAL - "; + } else { + state = OK; + std::wcout << L"OK - "; } + if (!printInfo.showUsed) + std::wcout << printInfo.percentFree << L"% free "; + else + std::wcout << 100 - printInfo.percentFree << L"% used "; + + std::wcout << "| 'swap'=" << currentValue << BunitStr(printInfo.unit) << L";" + << printInfo.warn.pString(printInfo.tSwap) << L";" << printInfo.crit.pString(printInfo.tSwap) + << L";0;" << printInfo.tSwap << '\n'; + return state; }