X-Git-Url: https://granicus.if.org/sourcecode?a=blobdiff_plain;f=plugins%2Fcheck_swap.cpp;h=dc08f3b3b98c12c431f1c94051ee6c8f4d5f84ef;hb=1bd91b0998fa7fcec37a2ac0c3511eea5fc3d675;hp=4c3a1deb06161d67b5ed1982d7d319ae57026535;hpb=9390d7e453d67b43df92936aac28080431423ba0;p=icinga2 diff --git a/plugins/check_swap.cpp b/plugins/check_swap.cpp index 4c3a1deb0..dc08f3b3b 100644 --- a/plugins/check_swap.cpp +++ b/plugins/check_swap.cpp @@ -1,21 +1,4 @@ -/****************************************************************************** - * Icinga 2 * - * Copyright (C) 2012-2018 Icinga Development Team (https://www.icinga.com/) * - * * - * This program is free software; you can redistribute it and/or * - * modify it under the terms of the GNU General Public License * - * as published by the Free Software Foundation; either version 2 * - * of the License, or (at your option) any later version. * - * * - * This program is distributed in the hope that it will be useful, * - * but WITHOUT ANY WARRANTY; without even the implied warranty of * - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * - * GNU General Public License for more details. * - * * - * You should have received a copy of the GNU General Public License * - * along with this program; if not, write to the Free Software Foundation * - * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. * - ******************************************************************************/ +/* Icinga 2 | (c) 2012 Icinga GmbH | GPLv2+ */ #include "plugins/thresholds.hpp" #include @@ -47,7 +30,7 @@ struct pageFileInfo static bool l_Debug; -BOOL EnumPageFilesProc(LPVOID pContext, PENUM_PAGE_FILE_INFORMATION pPageFileInfo, LPCTSTR lpFilename) { +BOOL EnumPageFilesProc(LPVOID pContext, PENUM_PAGE_FILE_INFORMATION pPageFileInfo, LPCWSTR lpFilename) { std::vector* pageFile = static_cast*>(pContext); SYSTEM_INFO systemInfo; @@ -194,16 +177,13 @@ static int printOutput(printInfoStruct& printInfo) else currentValue = printInfo.tSwap - printInfo.aSwap; - if (printInfo.warn.rend(currentValue, printInfo.tSwap)) { + if (printInfo.warn.rend(currentValue, printInfo.tSwap)) state = WARNING; - std::wcout << L"WARNING - "; - } else if (printInfo.crit.rend(currentValue, printInfo.tSwap)) { + + if (printInfo.crit.rend(currentValue, printInfo.tSwap)) state = CRITICAL; - std::wcout << L"CRITICAL - "; - } else { - state = OK; - std::wcout << L"OK - "; - } + + std::wcout << stateToString(state) << " - "; if (!printInfo.showUsed) std::wcout << printInfo.percentFree << L"% free "; @@ -219,10 +199,11 @@ static int printOutput(printInfoStruct& printInfo) static int check_swap(printInfoStruct& printInfo) { - PENUM_PAGE_FILE_CALLBACK pageFileCallback = &EnumPageFilesProc; + // Needs explicit cast: http://msinilo.pl/blog2/post/p1348/ + PENUM_PAGE_FILE_CALLBACKW pageFileCallback = (PENUM_PAGE_FILE_CALLBACKW)EnumPageFilesProc; std::vector pageFiles; - if(!EnumPageFiles(pageFileCallback, &pageFiles)) { + if(!EnumPageFilesW(pageFileCallback, &pageFiles)) { printErrorInfo(); return 3; } @@ -232,7 +213,10 @@ static int check_swap(printInfoStruct& printInfo) printInfo.aSwap += round(pageFiles.at(i).availableSpwap / pow(1024.0, printInfo.unit)); } - printInfo.percentFree = 100.0 * printInfo.aSwap / printInfo.tSwap; + if (printInfo.aSwap > 0 && printInfo.tSwap > 0) + printInfo.percentFree = 100.0 * printInfo.aSwap / printInfo.tSwap; + else + printInfo.percentFree = 0; return -1; }