Update of /usr/cvsroot/asterisk
In directory mongoose.digium.com:/tmp/cvs-serv12704

Modified Files:
        asterisk.8 asterisk.c asterisk.sgml pbx.c 
Log Message:
Allow limitation by loadavg not just calls (should be BSD friendly)...


Index: asterisk.8
===================================================================
RCS file: /usr/cvsroot/asterisk/asterisk.8,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -d -r1.2 -r1.3
--- asterisk.8  18 Oct 2005 21:06:38 -0000      1.2
+++ asterisk.8  26 Oct 2005 03:58:32 -0000      1.3
@@ -3,7 +3,7 @@
 .\" <http://shell.ipoline.com/~elmert/comp/docbook2X/> 
 .\" Please send any bug reports, improvements, comments, patches, 
 .\" etc. to Steve Cheng <[EMAIL PROTECTED]>.
-.TH "ASTERISK" "8" "18 October 2005" "asterisk 1.2" ""
+.TH "ASTERISK" "8" "25 October 2005" "asterisk 1.2" ""
 
 .SH NAME
 asterisk \- All-purpose telephony server.
@@ -80,6 +80,11 @@
 Prompt user to intialize any encrypted private keys for IAX2
 secure authentication during startup.
 .TP
+\fB-L \fIloadaverage\fB\fR
+Limits the maximum load average before rejecting new calls.  This can
+be useful to prevent a system from being brought down by terminating
+too many simultaneous calls.
+.TP
 \fB-M \fIvalue\fB\fR
 Limits the maximum number of calls to the specified value.  This can
 be useful to prevent a system from being brought down by terminating

Index: asterisk.c
===================================================================
RCS file: /usr/cvsroot/asterisk/asterisk.c,v
retrieving revision 1.184
retrieving revision 1.185
diff -u -d -r1.184 -r1.185
--- asterisk.c  24 Oct 2005 20:12:04 -0000      1.184
+++ asterisk.c  26 Oct 2005 03:58:32 -0000      1.185
@@ -143,6 +143,7 @@
 int option_reconnect = 0;
 int option_transcode_slin = 1;
 int option_maxcalls = 0;
+double option_maxload = 0.0;
 int option_dontwarn = 0;
 int option_priority_jumping = 1;
 int fully_booted = 0;
@@ -1872,6 +1873,10 @@
                        if ((sscanf(v->value, "%d", &option_maxcalls) != 1) || 
(option_maxcalls < 0)) {
                                option_maxcalls = 0;
                        }
+               } else if (!strcasecmp(v->name, "maxload")) {
+                       if ((sscanf(v->value, "%lf", &option_maxload) != 1) || 
(option_maxload < 0.0)) {
+                               option_maxload = 0.0;
+                       }
                }
                v = v->next;
        }
@@ -1930,7 +1935,7 @@
        }
        */
        /* Check for options */
-       while((c=getopt(argc, argv, "tThfdvVqprRgcinx:U:G:C:M:")) != -1) {
+       while((c=getopt(argc, argv, "tThfdvVqprRgcinx:U:G:C:L:M:")) != -1) {
                switch(c) {
                case 'd':
                        option_debug++;
@@ -1966,6 +1971,10 @@
                        if ((sscanf(optarg, "%d", &option_maxcalls) != 1) || 
(option_maxcalls < 0))
                                option_maxcalls = 0;
                        break;
+               case 'L':
+                       if ((sscanf(optarg, "%lf", &option_maxload) != 1) || 
(option_maxload < 0.0))
+                               option_maxload = 0.0;
+                       break;
                case 'q':
                        option_quiet++;
                        break;

Index: asterisk.sgml
===================================================================
RCS file: /usr/cvsroot/asterisk/asterisk.sgml,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -d -r1.4 -r1.5
--- asterisk.sgml       18 Oct 2005 21:06:38 -0000      1.4
+++ asterisk.sgml       26 Oct 2005 03:58:32 -0000      1.5
@@ -153,6 +153,16 @@
                </listitem>
        </varlistentry>
        <varlistentry>
+               <term>-L <replaceable 
class="parameter">loadaverage</replaceable></term>
+               <listitem>
+                       <para>
+                       Limits the maximum load average before rejecting new 
calls.  This can
+                       be useful to prevent a system from being brought down 
by terminating
+                       too many simultaneous calls.
+                       </para>
+               </listitem>
+       </varlistentry>
+       <varlistentry>
                <term>-M <replaceable 
class="parameter">value</replaceable></term>
                <listitem>
                        <para>

Index: pbx.c
===================================================================
RCS file: /usr/cvsroot/asterisk/pbx.c,v
retrieving revision 1.289
retrieving revision 1.290
diff -u -d -r1.289 -r1.290
--- pbx.c       24 Oct 2005 20:12:05 -0000      1.289
+++ pbx.c       26 Oct 2005 03:58:32 -0000      1.290
@@ -2477,7 +2477,7 @@
 static int increase_call_count(const struct ast_channel *c)
 {
        int failed = 0;
-
+       double curloadavg;
        ast_mutex_lock(&maxcalllock);
        if (option_maxcalls) {
                if (countcalls >= option_maxcalls) {
@@ -2485,6 +2485,13 @@
                        failed = -1;
                }
        }
+       if (option_maxload) {
+               getloadavg(&curloadavg, 1);
+               if (curloadavg >= option_maxload) {
+                       ast_log(LOG_NOTICE, "Maximum loadavg limit of %lf load 
exceeded by '%s' (currently %f)!\n", option_maxload, c->name, curloadavg);
+                       failed = -1;
+               }
+       }
        if (!failed)
                countcalls++;   
        ast_mutex_unlock(&maxcalllock);

_______________________________________________
Asterisk-Cvs mailing list
[email protected]
http://lists.digium.com/mailman/listinfo/asterisk-cvs

Reply via email to