/* check_meminfo - quick&dirty plugin for nagios Copyright (C) 2006 Thomas A.F. Eckhardt 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 Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include #define VERSION "0.1" #define PROCFS_MEMINFO "/proc/meminfo" #define BUFFER_LEN 127 int main () { FILE *fd; char buffer[BUFFER_LEN]; int memtotal = 0, memfree = 0, membuffer = 0, memcached = 0, swaptotal = 0, swapfree = 0; int memused = 0, swapused = 0; if ((fd = fopen (PROCFS_MEMINFO, "r")) == NULL) { perror("fopen() failed"); exit(1); } while ( fgets(buffer, BUFFER_LEN, fd) != NULL) { /* kernel <2.6 prints summarys we dont want to use */ if ( buffer[(strlen(buffer) - 2)] != 'B') continue; if (sscanf (buffer, "MemTotal:%dkB", &memtotal)) { //printf("memtotal: %d\n", memtotal); } else if (sscanf (buffer, "MemFree:%dkB", &memfree)) { //printf("memfree: %d\n", memfree); } else if (sscanf (buffer, "Buffers:%dkB", &membuffer)) { //printf("membuffer: %d\n", membuffer); } else if (sscanf (buffer, "Cached:%dkB", &memcached)) { //printf("memcached: %d\n", memcached); } else if (sscanf (buffer, "SwapTotal:%dkB", &swaptotal)) { //printf("swaptotal: %d\n", swaptotal); } else if (sscanf (buffer, "SwapFree:%dkB", &swapfree)) { //printf("swapfree: %d\n", swapfree); } } fclose (fd); if (memtotal == 0) { fprintf(stderr, "No memory? quitting..\n"); exit(1); } memused = memtotal - memfree - membuffer - memcached; swapused = swaptotal - swapfree; printf("OK - Free: %d|memtotal=%d;0;0;0; memused=%d;0;0;0; membuffer=%d;0;0;0; " "memcached=%d;0;0;0; swapused=%d;0;0;0; swaptotal=%d;0;0;0;\n", (memfree + (membuffer+memcached)), memtotal, memused, membuffer, memcached, swapused, swaptotal); return(0); }