]> granicus.if.org Git - icinga2/blobdiff - plugins/check_swap.cpp
Add summarized performance data to check_network
[icinga2] / plugins / check_swap.cpp
index 4c3a1deb06161d67b5ed1982d7d319ae57026535..dc08f3b3b98c12c431f1c94051ee6c8f4d5f84ef 100644 (file)
@@ -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 <boost/program_options.hpp>
@@ -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<pageFileInfo>* pageFile = static_cast<std::vector<pageFileInfo>*>(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<pageFileInfo> 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;
 }