Subversion Repositories vnag

Rev

Rev 2 | Go to most recent revision | Blame | Last modification | View Log | RSS feed

  1. <?php /* <ViaThinkSoftSignature>
  2. qMJiodDpZAq5lmMr1YTFAzBz7y3WUrxNn6+gko5VdixCfUQEjrRySixRs61b8d1N1
  3. MKEHjaL2mwgMYT7TsOisNeiTad8iUe4fDBzR7XnyX1LbvmOCDMbvRHwLR/LBf+N9R
  4. kc3FwU0xmRHLpi5zJ2wwLCGwiurIVyXKoAUuYda8LIuJsg9XyfHiNFoJz91WnLuK8
  5. FleyiTF7timGeMFMP/FYnIBmuBjWnG5kGk79naWFLML386W/abe5VllqfeQMFGkLS
  6. BFlExWb5V6qaA/BO+0jheB2LOh6xNMkOEYvCdkKHWDpbdVG/W3gRsnE7cVJV7fKkB
  7. Gt3nh89CS0XLswUDH3RWA/NCGBj+tc/QcIdFTezu4QSFaUO63OOPusEVrZZG80vUl
  8. 5vKIPtKakVJrix/EYzOBRC6fNRIakkB/q8k1UZD27Fa4ySQJgedJm6hIa7q+3Ln9M
  9. X6083Cyeu5nMMqQy7emY9q5g6EPJugxO1GsxVegHN800coIlEipLCDANvr/+jOOb/
  10. K9jf0j4+RhNUdSmXV3HTLvEKOnL6SsPCtFlo9wKOwUBfqrlBBTBV3A4DLtTD1Oc/6
  11. wJKDPIf04yigCxw+Nn2oK9TZGH8KHXscTPxru6BIn07hZq9oGO5EyW2K2AISY4OjF
  12. GaMAuns2jAQHPacRWWvc9gp67nk9TfPFStZYLWkSfzeSaAn1NEBncAriGWNOxGnpb
  13. XAXKZ8EiCQNHrqPnDgObgkgx5/PxhxFoacVUzl9CWZWSiKmbbppomlVDWuPUqJx16
  14. BNOvWu6H2oWq+sYav1cvTnZ4dpBKiMLNHLma8k6sA6UdSxuRujTSFll9cCVrDlj4W
  15. MSYJfufXv4pD3Qp5SQLlXj70ioM5jAx04sRSNQg/BDPcdiTzOXGx64B/m0gDb6x4C
  16. WVBrB0MMml4u3R8NFsCQpmDTAWVICAXdV5nNa8LcXrB5JQz6R9UFau1JuVN7ES6Yb
  17. Ev1og+Jh3DzY5iumbVWUugAppBV7MdgHN50vIwFC3YrVIfUjSyC4nnr3JZ4uuQfqi
  18. PY8NvY3RQ5J7avSt7Z67I5lz5swwrDro3iGk8a0tMGHWg8BDYwijuedici0fFpu8o
  19. K1ss7Kmwpvuti9bk4DvYH4D8gUjN3s8H0fE3D+v6sPNg3FQXs64Ob8jptqEUKMRfz
  20. XuIYbI89WgLV0TADxTm8kmDAJKOYW9xBQqdJh3UYo0Rwwkd7X3hvAUi8JojHWlizN
  21. JsqWm+6wv+HfX4105MVNXbANk1w4Go5fJ2xSjXJdKQESoNjhipKgSk7mYbRcZON+Q
  22. vLaHROFrQ/EK2lAmcDcJUKf+fK0JZGTm7+2xeLwE65jAvwtD40Dkw9JNy4AVo8k02
  23. w==
  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 2018-07-18
  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.         private function getMemAttr($attrName) {
  59.                 $cont = file_get_contents('/proc/meminfo');
  60.                 preg_match('@^'.preg_quote($attrName,'@').':\s+(\d+)\s+kB$@ismU', $cont, $m);
  61.                 return $m[1];
  62.         }
  63.  
  64.         protected function cbRun($optional_args=array()) {
  65.                 if (!file_exists('/proc/meminfo')) {
  66.                         throw new VNagException("Cannot find /proc/meminfo");
  67.                 }
  68.  
  69.                 $totalKB = $this->getMemAttr('MemTotal') + $this->getMemAttr('SwapTotal');
  70.                 $freeKB  = $this->getMemAttr('MemFree')  + $this->getMemAttr('SwapFree');
  71.                 $freePercent = $freeKB/$totalKB*100;
  72.  
  73.                 $this->checkAgainstWarningRange( array($freeKB.'KB', $freePercent.'%'), false, true, 0);
  74.                 $this->checkAgainstCriticalRange(array($freeKB.'KB', $freePercent.'%'), false, true, 0);
  75.  
  76.                 $m = (new VNagValueUomPair($freeKB.'KB'));
  77.                 $m->roundTo = ROUND_TO;
  78.                 $freeKB = $m->normalize(OUTPUT_UOM);
  79.  
  80.                 $m = (new VNagValueUomPair($totalKB.'KB'));
  81.                 $m->roundTo = ROUND_TO;
  82.                 $totalKB = $m->normalize(OUTPUT_UOM);
  83.  
  84.                 $msg = "$freeKB free of $totalKB (".round($freePercent,ROUND_TO)."% free)";
  85.                 $this->setHeadline($msg);
  86.         }
  87. }
  88.