X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=boot.php;h=6c00462422182d511ef8dd1a7261088478425ac6;hb=4e5d335492c7091f2aa9f47c889b29e8b60c1299;hp=754853d0d89ac1d92cdba0efdd085305247b82f1;hpb=7cda169f24d6c9b0a26c765eefdebb79109b7fed;p=friendica.git diff --git a/boot.php b/boot.php index 754853d0d8..6c00462422 100644 --- a/boot.php +++ b/boot.php @@ -475,6 +475,7 @@ class App { public $performance = array(); public $callstack = array(); public $theme_info = array(); + public $backend = true; public $nav_sel; @@ -1111,6 +1112,80 @@ class App { return($this->is_friendica_app); } + /** + * @brief Checks if the site is called via a backend process + * + * This isn't a perfect solution. But we need this check very early. + * So we cannot wait until the modules are loaded. + * + * @return bool Is it a known backend? + */ + function is_backend() { + $backend = array(); + $backend[] = "_well_known"; + $backend[] = "api"; + $backend[] = "dfrn_notify"; + $backend[] = "dfrn_poll"; + $backend[] = "fetch"; + $backend[] = "hcard"; + $backend[] = "hostxrd"; + $backend[] = "nodeinfo"; + $backend[] = "noscrape"; + $backend[] = "p"; + $backend[] = "photo"; + $backend[] = "photos"; + $backend[] = "poco"; + $backend[] = "post"; + $backend[] = "proxy"; + $backend[] = "pubsub"; + $backend[] = "pubsubhubbub"; + $backend[] = "receive"; + $backend[] = "rsd_xml"; + $backend[] = "salmon"; + $backend[] = "statistics_json"; + $backend[] = "xrd"; + + if (in_array($this->module, $backend)) + return(true); + else + return($this->backend); + } + + /** + * @brief Checks if the maximum number of database processes is reached + * + * @return bool Is the limit reached? + */ + function max_processes_reached() { + + // Is the function called statically? + if (!is_object($this)) + return(self::$a->max_processes_reached()); + + if ($this->is_backend()) { + $process = "backend"; + $max_processes = get_config('system', 'max_processes_backend'); + if (intval($max_processes) == 0) + $max_processes = 5; + } else { + $process = "frontend"; + $max_processes = get_config('system', 'max_processes_frontend'); + if (intval($max_processes) == 0) + $max_processes = 20; + } + + $processlist = dbm::processlist(); + if ($processlist["list"] != "") { + logger("Processcheck: Processes: ".$processlist["amount"]." - Processlist: ".$processlist["list"], LOGGER_DEBUG); + + if ($processlist["amount"] > $max_processes) { + logger("Processcheck: Maximum number of processes for ".$process." tasks (".$max_processes.") reached.", LOGGER_DEBUG); + return true; + } + } + return false; + } + /** * @brief Checks if the maximum load is reached * @@ -1118,14 +1193,26 @@ class App { */ function maxload_reached() { - $maxsysload = intval(get_config('system', 'maxloadavg')); - if ($maxsysload < 1) - $maxsysload = 50; + // Is the function called statically? + if (!is_object($this)) + return(self::$a->maxload_reached()); + + if ($this->is_backend()) { + $process = "backend"; + $maxsysload = intval(get_config('system', 'maxloadavg')); + if ($maxsysload < 1) + $maxsysload = 50; + } else { + $process = "frontend"; + $maxsysload = intval(get_config('system','maxloadavg_frontend')); + if ($maxsysload < 1) + $maxsysload = 50; + } $load = current_load(); if ($load) { if (intval($load) > $maxsysload) { - logger('system: load '.$load.' too high.'); + logger('system: load '.$load.' for '.$process.' tasks ('.$maxsysload.') too high.'); return true; } }