Subversion Repositories vnag

Rev

Rev 4 | 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>
51 daniel-mar 2
XdqA1AEsWl/tBsy3uppNSoRkapKPN0TaRG6nrsRGwK7u3QG0a9AdlGGtQw57I8Anb
3
PB1fKnyyZGFhB8JnoFK3TdoPEA0NVxN2CnMxghYUNjKMfJxbW/PmtDuOF4V+MAJk3
4
uriAEkzVBgIgXwQhZ0b8Xkr5x33U1dfKiuhhUlwlEOKIhS7jg4FT50CY2/cCYXW6l
5
y+ENDNMHtuPBP/dfq7/8CigPWIfnZDyN/QgaMy/kOGvx8L0K6LyK79ac1TXpStmrl
6
puaZYNZGj+TkTh6buDLJXzo8BBGWUMjGybg7La3G25b7CdRkGesL1hFMOeak1W+q0
7
NlaVCSlEYkkoARtdWyGMS7upY4vmLYuq8kPg6b9DVudZMXV4gRTkDu2s4xNsOamjE
8
Yu6kCFZ/2ZqgeWGWOMDWuE/gKvFIS7RfjPkwjeHvAHqW9wI8BtX53e+yKnE40LACo
9
tDQ+fqkS/4C2UJYOZcNVfGlORsxtymmwjCr6OnMdEdImFHmKqo7fKdeQ5cSkj3imp
10
qG2z6qLX8clbRqaJU1h+Qdc7i44KvN+/tGDsPvGemIzRvJk4WujpuVrztx5O0ebnX
11
uBd6OAGuHJlY3Dkd6B/Tx9/YbsOqUbe8KEJ6TFnQPW+V+njKdTuGmY9F62xNynd47
12
NuUZebnuAK4qAVxqMFpRAzW++20tbTMlGcE9EvdZkxKH/2Dl78cWxe8ZO7aagRZ3h
13
u7MKV8IDCzwReJqUv6OaUl6XGlviF9PDu+bTCvT+Lzs6f3txYvlJcSXuGT+G/0nyN
14
Wyzg49m9jSSAUT1TzHclS0bFWKQFnm7bzrXdNea37+GvFFSh22BkYNTBcvB9o+ZJF
15
Juy5DGIEEi+v2UP95BQo9PJDP81+WlR+lsgL1kEjZiprGkrzEso4OubQUuwGW2Xbb
16
bFDLSzyQgFiLnBUyEJ/9LwvcF8Vf2bfgTw72vHSovZFP+fOhD60fZoOq5K6NMzlm1
17
9TD/3aAZ6MayuBgr55aaPPYMSJuwsyjKqnILxa/YuwZwTsBKrWiz6Osy+PLjSXbfl
18
EnKIQ+FBiwqnPur9PTxOwtcYk2dCBknW728M4KYAsYQ7KAEwjqv6unD/uB7+xEk24
19
JTTG6pkQhuu3Hz2vf8deR1mgdmE2U8IySOMx5gw72uQFwP8B5dWh+eIcY3PmKvMTc
20
8ehGSqnmysjVpsblcjydEALpaRJ626stfmaDn5yZJlBmsplHfqMyFEIE5YiRUqATR
21
nAFF0vhlVv5OAcZf0G4PRq8akg4KuprSoIYR7F/Mo6cCLZVn3sinqAfkYadm/KeUx
22
IStZou4PvPRjNyenI2EgLmrqHsBaNeMT349346AQ1BZUJIaiEqJ3DaiscN+ZvnQ3o
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
 
53
                // When the user writes "-w 10GB" then he actually means "-w 10GB:~" or "-w @~:10GB", so these commands allow this notation:
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
}