]> git.mxchange.org Git - friendica.git/commitdiff
implement max load average before queuing/deferring delivery and poller processes
authorfriendica <info@friendica.com>
Fri, 4 May 2012 04:50:48 +0000 (21:50 -0700)
committerfriendica <info@friendica.com>
Fri, 4 May 2012 04:50:48 +0000 (21:50 -0700)
include/delivery.php
include/poller.php
mod/admin.php
view/admin_site.tpl

index 794b8f27a3a3998c5d860b5c2f1a93311df0f6df..28d81226a46cad9052123f32361b5f3ff3e5d982 100644 (file)
@@ -51,6 +51,17 @@ function delivery_run($argv, $argc){
                return;
        }       
 
+       $maxsysload = intval(get_config('system','maxloadavg'));
+       if($maxsysload < 1)
+               $maxsysload = 50;
+       if(function_exists('sys_getloadavg')) {
+               $load = sys_getloadavg();
+               if(intval($load[0]) > $maxsysload) {
+                       logger('system: load ' . $load . ' too high. Delivery deferred to next queue run.');
+                       return;
+               }
+       }
+
        // It's ours to deliver. Remove it from the queue.
 
        q("delete from deliverq where cmd = '%s' and item = %d and contact = %d limit 1",
index 0a0e66b865ec0445131a9301e1e064e3e16ff496..f6553c84606fb0750e41ad2a7af961f099038377 100644 (file)
@@ -30,6 +30,17 @@ function poller_run($argv, $argc){
        load_config('config');
        load_config('system');
 
+       $maxsysload = intval(get_config('system','maxloadavg'));
+       if($maxsysload < 1)
+               $maxsysload = 50;
+       if(function_exists('sys_getloadavg')) {
+               $load = sys_getloadavg();
+               if(intval($load[0]) > $maxsysload) {
+                       logger('system: load ' . $load . ' too high. Poller deferred to next scheduled run.');
+                       return;
+               }
+       }
+
        $lockpath = get_config('system','lockpath');
        if ($lockpath != '') {
                $pidfile = new pidfile($lockpath, 'poller.lck');
@@ -39,6 +50,8 @@ function poller_run($argv, $argc){
                }
        }
 
+
+
        $a->set_baseurl(get_config('system','url'));
 
        load_hooks();
index b07ef851a1e9b9697b742c96dc211ac95ac88085..cfe5a2dd2cea1d2831dda8cbb177f72befb52d3b 100644 (file)
@@ -243,6 +243,7 @@ function admin_page_site_post(&$a){
        $proxy                          =       ((x($_POST,'proxy'))                    ? notags(trim($_POST['proxy'])) : '');
        $timeout                        =       ((x($_POST,'timeout'))                  ? intval(trim($_POST['timeout']))               : 60);
        $delivery_interval      =       ((x($_POST,'delivery_interval'))? intval(trim($_POST['delivery_interval']))             : 0);
+       $maxloadavg             =       ((x($_POST,'maxloadavg'))       ? intval(trim($_POST['maxloadavg']))            : 50);
        $dfrn_only          =   ((x($_POST,'dfrn_only'))            ? True      :       False);
        $ostatus_disabled   =   !((x($_POST,'ostatus_disabled')) ? True  :   False);
        $diaspora_enabled   =   ((x($_POST,'diaspora_enabled')) ? True   :  False);
@@ -290,6 +291,7 @@ function admin_page_site_post(&$a){
        }
        set_config('system','ssl_policy',$ssl_policy);
        set_config('system','delivery_interval',$delivery_interval);
+       set_config('system','maxloadavg',$maxloadavg);
        set_config('config','sitename',$sitename);
        if ($banner==""){
                // don't know why, but del_config doesn't work...
@@ -434,7 +436,7 @@ function admin_page_site(&$a) {
                '$proxy'                        => array('proxy', t("Proxy URL"), get_config('system','proxy'), ""),
                '$timeout'                      => array('timeout', t("Network timeout"), (x(get_config('system','curl_timeout'))?get_config('system','curl_timeout'):60), t("Value is in seconds. Set to 0 for unlimited (not recommended).")),
                '$delivery_interval'                    => array('delivery_interval', t("Delivery interval"), (x(get_config('system','delivery_interval'))?get_config('system','delivery_interval'):2), t("Delay background delivery processes by this many seconds to reduce system load. Recommend: 4-5 for shared hosts, 2-3 for virtual private servers. 0-1 for large dedicated servers.")),
-
+               '$maxloadavg'                   => array('maxloadavg', t("Maximum Load Average"), ((intval(get_config('system','maxloadavg')) > 0)?get_config('system','maxloadavg'):50), t("Maximum system load before delivery and poll processes are deferred - default 50.")),
         '$form_security_token' => get_form_security_token("admin_site"),
                        
        ));
index 852a2c0bf2b6b00bf0545756a09dc50920115f8e..265f2724df2bd97fb39a36f94a32e2582c499090 100644 (file)
@@ -81,6 +81,7 @@
        {{ inc field_input.tpl with $field=$proxyuser }}{{ endinc }}
        {{ inc field_input.tpl with $field=$timeout }}{{ endinc }}
        {{ inc field_input.tpl with $field=$delivery_interval }}{{ endinc }}
+       {{ inc field_input.tpl with $field=$maxloadavg }}{{ endinc }}
        {{ inc field_input.tpl with $field=$abandon_days }}{{ endinc }}
        
        <div class="submit"><input type="submit" name="page_site" value="$submit" /></div>