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 | } |