Subversion Repositories vnag

Rev

Rev 4 | Blame | Last modification | View Log | RSS feed

  1. <?php /* <ViaThinkSoftSignature>
  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==
  24. </ViaThinkSoftSignature> */ ?>
  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.  *
  32.  * Revision 2022-05-19
  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()) {
  59.                 if (!file_exists($meminfo_file = '/proc/meminfo')) {
  60.                         throw new VNagException("Cannot find $meminfo_file");
  61.                 }
  62.  
  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'];
  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. }
  99.