Subversion Repositories vnag

Rev

Rev 52 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4 daniel-mar 1
<?php /* <ViaThinkSoftSignature>
77 daniel-mar 2
lVcMi5qSDkLUYGRizTEBBN/wfe0iXetbtF5/m/AB47STu6J6jJ1s3Q89hu0XEHcv3
3
20KxLns4ikt3f05Uj8OnB6yYrQ50xl8AXtSDcy+k4Iz/7AXLUB6z95gMx9BctAk5x
4
pWum1/0p7y98sZb7cVOZRJjC4LDW+YWXV8OQUdx4/KCKbTp8KL0HykKXff4hw9fU/
5
Yas1sbDNmUEEG0UwEFPON73sgJm/KimsLWYP8VSQ9W0nvaRWyDLtPtRXsA4ZZ5WXp
6
tYeMdhN2txOzZl3AFeTjbXbeSmNNh0orlY1i4TquzoK62SxPwMuzMEKpPWc0LJmxN
7
ev9rWB/ucB/DSkVFqbss0tRkECjHyZxzbT0tjCWgSQhIc0jQzjXQQoqJyIOnUVUJn
8
Y4S1rPAOdgijnD6apfnegmCQFhQrg7Fua4bURzJ3sMu7JT7QHiL1L3X+Xk+p14bto
9
ZbtGLMxEFnOvroEJ2iYmxJYB/9fSKQAtS2yrA4c67frHNZrkvw9u+dDiTJPc9JxpM
10
ufsTyoxTQqocrOJg3pzqlsAu0WmVO3UJG5OVpSjxH+4Wyk79cEELZNcctJaE2NMh9
11
gU3rzDyufa5nff0hyiku3qIGi4JdWFxX6ko2qh2kycuWWF1EqEW8ufORlwDw1S4Pd
12
iAkwMsmuMccRYtY60D0GZkYzcC4glIv3sD0KszTuTl4mlJtCiYuAA2CmBut6Hb9S4
13
IUr0DSc6tAAXZI4zJScONeAfQn0mH6yEqz55atAT4KJwyMWL4DoO6IfdiKRsvq9Rs
14
Qrf7oK2zjym2EZaiVjo2jx6VIh9B4Mbf8efcHkdq5EC7LsYcyPiF02P4XYDA8zcn9
15
jLcrpbCgz/ZLSAdM7AzWLh0WYxaBiqfbtt13aGapkoKFxIL0YlINCXt/GAlwpyalj
16
jzbjoGB/BrUibPa+6FLhY2wEJ/jgpg0VJRn5TPsyuBYnt4+YrzkIQ4EIFm1dbEwt9
17
U+ONNO4xjqVrvcTgvfTpGHw0gcU8XmqsKnWmA8obc4I7zXco9WBnl1fTCL1XRNfHd
18
IaOfxgVtE6dKbqBKGw/KEttb0vpFyw3jPGvyyVmQOkS2eluc7GgutlG7hpPennheZ
19
Yxt5XJV2P+RxkZdO7kruACpwtkMn9qMTuCL8eWIgfJ3ddT8z7H5j1F92wavSYhYVK
20
FJ3IO60q7xAFEF23CYoQW0zJBORbVR5+9ncrR49fa/938sRQf41IrZZzoXVHZU4T5
21
ar7gdPg5DR7CytfkRlFZzJ2KBHwGHX6nTppEUxF9KgsDVOGzPYxQVs3vSqvH4yelc
22
A+oVPffLPjCVp7jZ1Ht/L519ZG6oHJum/r2eeE39JH15q0Ab/AL3kCrwkyVAPxXUA
23
g==
4 daniel-mar 24
</ViaThinkSoftSignature> */ ?>
2 daniel-mar 25
<?php
26
 
27
/*
28
 * VNag - Nagios Framework for PHP
29
 * Developed by Daniel Marschall, ViaThinkSoft <www.viathinksoft.com>
30
 * Licensed under the terms of the Apache 2.0 license
31
 *
77 daniel-mar 32
 * Revision 2023-10-13
2 daniel-mar 33
 */
34
 
35
declare(ticks=1);
36
 
37
define('OUTPUT_UOM', 'GB');
38
define('ROUND_TO', 0);
39
 
40
class VirtualMemCheck extends VNag {
41
        public function __construct() {
42
                parent::__construct();
43
 
44
                $this->registerExpectedStandardArguments('Vhtwc');
45
 
46
                $this->getHelpManager()->setPluginName('check_virtual_mem');
47
                $this->getHelpManager()->setVersion('1.0');
48
                $this->getHelpManager()->setShortDescription('This plugin checks the amount of free virtual memory (real memory + swap combined).');
49
                $this->getHelpManager()->setCopyright('Copyright (C) 2011-$CURYEAR$ Daniel Marschall, ViaThinkSoft.');
50
                $this->getHelpManager()->setSyntax('$SCRIPTNAME$ [-w freeMemKB|%] [-c freeMemKB|%]');
51
                $this->getHelpManager()->setFootNotes('If you encounter bugs, please contact ViaThinkSoft at www.viathinksoft.com');
52
 
52 daniel-mar 53
                // In this context, when the user writes "-w 10GB" then they probably mean "-w @10GB". Make sure that the user doesn't do it wrong
2 daniel-mar 54
                $this->warningSingleValueRangeBehaviors[0]  = self::SINGLEVALUE_RANGE_VAL_LT_X_BAD;
55
                $this->criticalSingleValueRangeBehaviors[0] = self::SINGLEVALUE_RANGE_VAL_LT_X_BAD;
56
        }
57
 
58
        protected function cbRun($optional_args=array()) {
51 daniel-mar 59
                if (!file_exists($meminfo_file = '/proc/meminfo')) {
60
                        throw new VNagException("Cannot find $meminfo_file");
2 daniel-mar 61
                }
62
 
51 daniel-mar 63
                $meminfo_attrs = array();
64
                foreach (file($meminfo_file) as $line) {
65
                        $line = trim($line);
66
                        if ($line == '') continue;
67
                        list($key, $value) = explode(':', $line, 2);
68
                        if ((!strstr($key,'Pages')) && (strtolower(substr($line,-2)) !== 'kb')) {
77 daniel-mar 69
                                throw new VNagException("meminfo shall contain Kilobytes!");
51 daniel-mar 70
                        }
71
                        $meminfo_attrs[$key] = (int)trim(substr($value, 0, strlen($value)-2));
72
                }
73
 
74
                if (!isset($meminfo_attrs['MemAvailable'])) {
75
                        $meminfo_attrs['MemAvailable'] = $meminfo_attrs['MemFree'];
76
                        if (isset($meminfo_attrs['Buffers'])) $meminfo_attrs['MemAvailable'] += $meminfo_attrs['Buffers'];
77
                        if (isset($meminfo_attrs['Cached']))  $meminfo_attrs['MemAvailable'] += $meminfo_attrs['Cached'];
78
                }
79
 
80
                $totalKB = $meminfo_attrs['MemTotal']      + $meminfo_attrs['SwapTotal'];
81
                $freeKB  = $meminfo_attrs['MemAvailable']  + $meminfo_attrs['SwapFree'];
2 daniel-mar 82
                $freePercent = $freeKB/$totalKB*100;
83
 
84
                $this->checkAgainstWarningRange( array($freeKB.'KB', $freePercent.'%'), false, true, 0);
85
                $this->checkAgainstCriticalRange(array($freeKB.'KB', $freePercent.'%'), false, true, 0);
86
 
87
                $m = (new VNagValueUomPair($freeKB.'KB'));
88
                $m->roundTo = ROUND_TO;
89
                $freeKB = $m->normalize(OUTPUT_UOM);
90
 
91
                $m = (new VNagValueUomPair($totalKB.'KB'));
92
                $m->roundTo = ROUND_TO;
93
                $totalKB = $m->normalize(OUTPUT_UOM);
94
 
95
                $msg = "$freeKB free of $totalKB (".round($freePercent,ROUND_TO)."% free)";
96
                $this->setHeadline($msg);
97
        }
98
}