function apiCmd($cmd, $req) { $ckey = md5($cmd . serialize($req)); $ret = self::$apicache->load($ckey); if ($ret === NULL) { if (!isset(self::$api)) { if (!self::init_api()) { CliDebug::warn("Zabbix Api query ignored (zapi=false)! ({$cmd})\n"); return array(); } } if (Options::get("progress")) { CliDebug::progress("A\r"); } CliDebug::dbg("Zabbix Api query ({$cmd})\n"); $ret = self::$api->{$cmd}($req); self::$apicache->save($ckey, $ret, array(Nette\Caching\Cache::EXPIRE => Options::get("apicacheexpire"))); } return $ret; }
static function doJob() { if (!Options::get("fork")) { return true; } if (!self::$jobstats) { self::initJobServer(); } if (isset(Options::get("maxload"))) { list($min1, $min5, $min15) = sys_getloadavg(); while ($min1 > Options::get("maxload")) { CliDebug::warn(sprintf("Waiting for lower loadavg (actual=%f,max=%f)\n", $min1, Options::get("maxload"))); self::systemStats(5); list($min1, $min5, $min15) = sys_getloadavg(); } } /* if (isset(Options::get("maxbackends"))) { $cnt=self::zbackends(); $cnt2=self::mbackends(); while ($cnt>Options::get("maxbackends") || $cnt2>Options::get("maxbackends")) { CliDebug::warn(sprintf("Waiting for lower number of psql backends (actual=[zabbix=%d,monda=%d],max=%d)\n",$cnt,$cnt2,Options::get("maxbackends"))); $stat=self::systemStats(10); $cnt= self::zbackends(); $cnt2=self::mbackends(); } } */ if (isset(Options::get("maxcpuwait"))) { while (self::$jobstats["iowait"] > Options::get("maxcpuwait")) { CliDebug::warn(sprintf("Waiting for lower iowait (actual=%f,max=%f)\n", self::$jobstats["iowait"], Options::get("maxcpuwait"))); self::systemStats(5); } } if (!function_exists('pcntl_fork') || !function_exists('pcntl_wait') || !function_exists('pcntl_wifexited')) { CliDebug::warn("pcntl_* functions disabled, cannot fork!\n"); return true; } if (self::$childs < Options::get("fork")) { $pid = pcntl_fork(); if ($pid == -1) { mexit(3, "Cannot fork"); } else { if ($pid) { self::$childpids[] = $pid; self::$childs++; //CliDebug::info("Jobserver: Parent (childs=self::$childs)\n"); return false; } else { putenv("MONDA_CHILD=1"); //CliDebug::info("Jobserver: Child (childs=self::$childs)\n"); return true; } } } else { self::waitForChilds(); } }