Subversion Repositories vnag

Rev

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

  1. <?php /* <ViaThinkSoftSignature>qMJiodDpZAq5lmMr1YTFAzBz7y3WUrxNn6+gko5VdixCfUQEjrRySixRs61b8d1N1MKEHjaL2mwgMYT7TsOisNeiTad8iUe4fDBzR7XnyX1LbvmOCDMbvRHwLR/LBf+N9Rkc3FwU0xmRHLpi5zJ2wwLCGwiurIVyXKoAUuYda8LIuJsg9XyfHiNFoJz91WnLuK8FleyiTF7timGeMFMP/FYnIBmuBjWnG5kGk79naWFLML386W/abe5VllqfeQMFGkLSBFlExWb5V6qaA/BO+0jheB2LOh6xNMkOEYvCdkKHWDpbdVG/W3gRsnE7cVJV7fKkBGt3nh89CS0XLswUDH3RWA/NCGBj+tc/QcIdFTezu4QSFaUO63OOPusEVrZZG80vUl5vKIPtKakVJrix/EYzOBRC6fNRIakkB/q8k1UZD27Fa4ySQJgedJm6hIa7q+3Ln9MX6083Cyeu5nMMqQy7emY9q5g6EPJugxO1GsxVegHN800coIlEipLCDANvr/+jOOb/K9jf0j4+RhNUdSmXV3HTLvEKOnL6SsPCtFlo9wKOwUBfqrlBBTBV3A4DLtTD1Oc/6wJKDPIf04yigCxw+Nn2oK9TZGH8KHXscTPxru6BIn07hZq9oGO5EyW2K2AISY4OjFGaMAuns2jAQHPacRWWvc9gp67nk9TfPFStZYLWkSfzeSaAn1NEBncAriGWNOxGnpbXAXKZ8EiCQNHrqPnDgObgkgx5/PxhxFoacVUzl9CWZWSiKmbbppomlVDWuPUqJx16BNOvWu6H2oWq+sYav1cvTnZ4dpBKiMLNHLma8k6sA6UdSxuRujTSFll9cCVrDlj4WMSYJfufXv4pD3Qp5SQLlXj70ioM5jAx04sRSNQg/BDPcdiTzOXGx64B/m0gDb6x4CWVBrB0MMml4u3R8NFsCQpmDTAWVICAXdV5nNa8LcXrB5JQz6R9UFau1JuVN7ES6YbEv1og+Jh3DzY5iumbVWUugAppBV7MdgHN50vIwFC3YrVIfUjSyC4nnr3JZ4uuQfqiPY8NvY3RQ5J7avSt7Z67I5lz5swwrDro3iGk8a0tMGHWg8BDYwijuedici0fFpu8oK1ss7Kmwpvuti9bk4DvYH4D8gUjN3s8H0fE3D+v6sPNg3FQXs64Ob8jptqEUKMRfzXuIYbI89WgLV0TADxTm8kmDAJKOYW9xBQqdJh3UYo0Rwwkd7X3hvAUi8JojHWlizNJsqWm+6wv+HfX4105MVNXbANk1w4Go5fJ2xSjXJdKQESoNjhipKgSk7mYbRcZON+QvLaHROFrQ/EK2lAmcDcJUKf+fK0JZGTm7+2xeLwE65jAvwtD40Dkw9JNy4AVo8k02w==</ViaThinkSoftSignature> */ ?>
  2. <?php
  3.  
  4. /*
  5.  * VNag - Nagios Framework for PHP
  6.  * Developed by Daniel Marschall, ViaThinkSoft <www.viathinksoft.com>
  7.  * Licensed under the terms of the Apache 2.0 license
  8.  *
  9.  * Revision 2018-07-18
  10.  */
  11.  
  12. declare(ticks=1);
  13.  
  14. define('OUTPUT_UOM', 'GB');
  15. define('ROUND_TO', 0);
  16.  
  17. class VirtualMemCheck extends VNag {
  18.         public function __construct() {
  19.                 parent::__construct();
  20.  
  21.                 $this->registerExpectedStandardArguments('Vhtwc');
  22.  
  23.                 $this->getHelpManager()->setPluginName('check_virtual_mem');
  24.                 $this->getHelpManager()->setVersion('1.0');
  25.                 $this->getHelpManager()->setShortDescription('This plugin checks the amount of free virtual memory (real memory + swap combined).');
  26.                 $this->getHelpManager()->setCopyright('Copyright (C) 2011-$CURYEAR$ Daniel Marschall, ViaThinkSoft.');
  27.                 $this->getHelpManager()->setSyntax('$SCRIPTNAME$ [-w freeMemKB|%] [-c freeMemKB|%]');
  28.                 $this->getHelpManager()->setFootNotes('If you encounter bugs, please contact ViaThinkSoft at www.viathinksoft.com');
  29.  
  30.                 // When the user writes "-w 10GB" then he actually means "-w 10GB:~" or "-w @~:10GB", so these commands allow this notation:
  31.                 $this->warningSingleValueRangeBehaviors[0]  = self::SINGLEVALUE_RANGE_VAL_LT_X_BAD;
  32.                 $this->criticalSingleValueRangeBehaviors[0] = self::SINGLEVALUE_RANGE_VAL_LT_X_BAD;
  33.         }
  34.  
  35.         private function getMemAttr($attrName) {
  36.                 $cont = file_get_contents('/proc/meminfo');
  37.                 preg_match('@^'.preg_quote($attrName,'@').':\s+(\d+)\s+kB$@ismU', $cont, $m);
  38.                 return $m[1];
  39.         }
  40.  
  41.         protected function cbRun($optional_args=array()) {
  42.                 if (!file_exists('/proc/meminfo')) {
  43.                         throw new VNagException("Cannot find /proc/meminfo");
  44.                 }
  45.  
  46.                 $totalKB = $this->getMemAttr('MemTotal') + $this->getMemAttr('SwapTotal');
  47.                 $freeKB  = $this->getMemAttr('MemFree')  + $this->getMemAttr('SwapFree');
  48.                 $freePercent = $freeKB/$totalKB*100;
  49.  
  50.                 $this->checkAgainstWarningRange( array($freeKB.'KB', $freePercent.'%'), false, true, 0);
  51.                 $this->checkAgainstCriticalRange(array($freeKB.'KB', $freePercent.'%'), false, true, 0);
  52.  
  53.                 $m = (new VNagValueUomPair($freeKB.'KB'));
  54.                 $m->roundTo = ROUND_TO;
  55.                 $freeKB = $m->normalize(OUTPUT_UOM);
  56.  
  57.                 $m = (new VNagValueUomPair($totalKB.'KB'));
  58.                 $m->roundTo = ROUND_TO;
  59.                 $totalKB = $m->normalize(OUTPUT_UOM);
  60.  
  61.                 $msg = "$freeKB free of $totalKB (".round($freePercent,ROUND_TO)."% free)";
  62.                 $this->setHeadline($msg);
  63.         }
  64. }
  65.