Subversion Repositories vnag

Rev

Rev 51 | 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>
52 daniel-mar 2
c1wGuhv9GU+clZ9207sxwFamirQi5OPT+4J/Rir1QS5uJosEcvuOX+ZqWEX03ZUxT
3
t1LeyccWq0r4NJhhLzroMdBqrI/5wYJlttbZxgMVqODvjnQqWbSljb/FtQbGCgOmZ
4
1TjrART4ukk/l9ELnJJuTx5xmUOODuKiMKJcIYV5U+a3Ig9u4fcGpYKM5fwpep5p9
5
lJ+Xibt/UESgPB4bAoAxJE4szOZ31cN9DxVohoIUoQ1V+ZYdLu6ZeNAQ122QNHYk4
6
S1yQf+nRqTc0dVKS7bcrgYrWaX6GbkxYq18TY2w2KuuYWEjBSoxI8a0+S6XydHfGq
7
fYhG0L1mLRND6Zdutx9WDNr0gfKvEE8djezOcUH5RzVFzLK71wAKqoi9JyNkNLHds
8
u7ptuWGnvNNfM+vSDiRr0e+80fKha3jP8ViWdEZMxEfNUIPjFqj0UQM8n9pk8utoF
9
SpmVzFHxG8VijCT0KdMo+kID5LG2Ra22I8UKj7JWmkTMX0etFcyYNvYybJmz1p8Mx
10
930UkzAFx+hq1TH9zgcPD0Y6hmJs3cGZDk8Lq5Ls5AZKuqFZanZrCy61t4hNG3sZ7
11
fkWe/I71TlMAWsuZygo0kYv3EqPBaJgCAYfB1Xr98FBoslpNPg3Bn8znmK3SBCmnM
12
o/ViDGz955lTX26WwtbsXtXsU5fdJ3f072O8n9+Kjab1NwZptJllTPlQjwZT9VOnb
13
G2/n7HyOT7luSrqXfz8q6ZRWKr47nqXTw+jIEWeft3HzpCqdO8aLBm4h90FvkrXn6
14
nGjTt802hG3b0DFXZq5brzs4+Tp3y4ghkGvlBF/q5vm/e4DdXFXgMCQ8Ndk9sWzG0
15
ywYLD0bdVGIorqVuAM70UwD769s5+UXs3I1puRL3gXpk47FHQYKMTPrNgvmbbY3GM
16
bBnkhLb/exmCBtR0F8XA+nCF9nnocuixVGhaEJBoXHhM28cB1mVJV+zP5Mx1vztCd
17
PCUd/m86xmoTC62Zs1NK4E0rbJXoaKI0SEzT+QK4JG9NpoS+JDKLPiQ3p/uSt0mcM
18
HJTOpY09QobYczE/nTd9OJ6fZX19C1YHufpHDowvqvHItwrmZ8y1s4J9PtoAjK9Z9
19
vyjEGPexHZtdnUYeFqDtYur6v+D0v4TqVsDTn2SUDyR1EjDRmfCDtMhOsHy55W/xT
20
kDN/rt+RCzCthUJK1cfOcvEnfi9sAmDQBT2Hqbbe8kmcL5myZiGYsLq7oCpQOSYVm
21
9DpwNTbakHSn7cxGMWkwdhNATjMc2EAH92snZAzhZOOqTGtJoDDPm01mnLFf4Olt7
22
zl6CMM/UpkjAfBmUoVbIAxORSbUQBPCtrCpg1BCfWNhFbTIfxJSNWnzsrqw0eD3j0
51 daniel-mar 23
Q==
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
 *
51 daniel-mar 32
 * Revision 2022-05-19
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')) {
69
                                throw new Exception("meminfo shall contain Kilobytes!");
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
}