]> granicus.if.org Git - apache/commitdiff
Break out loadavg from Apache load.... one is quick, the other
authorJim Jagielski <jim@apache.org>
Mon, 24 Sep 2012 20:50:58 +0000 (20:50 +0000)
committerJim Jagielski <jim@apache.org>
Mon, 24 Sep 2012 20:50:58 +0000 (20:50 +0000)
isn't so much, and so why load things up when wanting just
the server loadavg?

git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/trunk@1389564 13f79535-47bb-0310-9956-ffa450edef68

include/httpd.h
modules/generators/mod_status.c
server/util.c

index 68184e973bb9cea7c1a55d058c4b9edb02afb8a0..44e97c3971102f3fd8c82d22f0fef537e0e1bd4a 100644 (file)
@@ -1299,21 +1299,29 @@ struct server_rec {
 };
 
 /**
- * @struct server_load_rec
- * @brief  A structure to hold various server load params
+ * @struct ap_sload_t
+ * @brief  A structure to hold server load params
  */
 typedef struct ap_sload_t ap_sload_t;
 struct ap_sload_t {
+    /* percentage of process/threads ready/idle (0->100)*/
+    int idle;
+    /* percentage of process/threads busy (0->100) */
+    int busy;
+};
+
+/**
+ * @struct ap_loadavg_t
+ * @brief  A structure to hold various server loadavg
+ */
+typedef struct ap_loadavg_t ap_loadavg_t;
+struct ap_loadavg_t {
     /* current loadavg, ala getloadavg() */
     float loadavg;
     /* 5 min loadavg */
     float loadavg5;
     /* 15 min loadavg */
     float loadavg15;
-    /* percentage of process/threads ready/idle (0->100)*/
-    int idle;
-    /* percentage of process/threads busy (0->100) */
-    int busy;
 };
 
 /**
@@ -2211,6 +2219,13 @@ AP_DECLARE(void *) ap_realloc(void *ptr, size_t size)
  */
 AP_DECLARE(void) ap_get_sload(ap_sload_t *ld);
 
+/**
+ * Get server load averages (ala getloadavg)
+ * @param ld struct to populate: -1 in fields means error
+ */
+AP_DECLARE(void) ap_get_loadavg(ap_loadavg_t *ld);
+
+
 #define AP_NORESTART APR_OS_START_USEERR + 1
 
 #ifdef __cplusplus
index db16676f1aa8b69d8347c2b4e60bce958acc8110..8b39db43a9911068718e53fe6760b42a148e2d40 100644 (file)
@@ -393,7 +393,7 @@ static int status_handler(request_rec *r)
                                ap_scoreboard_image->global->restart_time);
 
     if (!short_report) {
-        ap_sload_t t;
+        ap_loadavg_t t;
 
         ap_rputs(DOCTYPE_HTML_3_2
                  "<html><head>\n"
@@ -421,9 +421,9 @@ static int status_handler(request_rec *r)
         ap_rputs("<dt>Server uptime: ", r);
         show_time(r, up_time);
         ap_rputs("</dt>\n", r);
-        ap_get_sload(&t);
-        ap_rprintf(r, "<dt>Server load: %.2f %.2f %.2f [%d:%d]</dt>\n",
-                   t.loadavg, t.loadavg5, t.loadavg15, t.idle, t.busy);
+        ap_get_loadavg(&t);
+        ap_rprintf(r, "<dt>Server load: %.2f %.2f %.2f</dt>\n",
+                   t.loadavg, t.loadavg5, t.loadavg15);
     }
 
     if (ap_extended_status) {
index 4926001218fd7fa7abdefab483dff877edc41c26..756ab187ac8b50be7a5f6d0723a5676bec910d48 100644 (file)
@@ -2793,32 +2793,16 @@ AP_DECLARE(void *) ap_realloc(void *ptr, size_t size)
 
 AP_DECLARE(void) ap_get_sload(ap_sload_t *ld)
 {
-    double la[3];
-    int i, j, num, server_limit, thread_limit;
+    int i, j, server_limit, thread_limit;
     int ready = 0;
     int busy = 0;
     int total;
     ap_generation_t mpm_generation;
 
     /* preload errored fields, we overwrite */
-    ld->loadavg = -1.0;
-    ld->loadavg5 = -1.0;
-    ld->loadavg15 = -1.0;
     ld->idle = -1;
     ld->busy = -1;
 
-#if HAVE_GETLOADAVG
-    num = getloadavg(la, 3);
-    if (num > 0) {
-        ld->loadavg = (float)la[0];
-    }
-    if (num > 1) {
-        ld->loadavg5 = (float)la[1];
-    }
-    if (num > 2) {
-        ld->loadavg15 = (float)la[2];
-    }
-#endif
     ap_mpm_query(AP_MPMQ_GENERATION, &mpm_generation);
     ap_mpm_query(AP_MPMQ_HARD_LIMIT_THREADS, &thread_limit);
     ap_mpm_query(AP_MPMQ_HARD_LIMIT_DAEMONS, &server_limit);
@@ -2848,5 +2832,28 @@ AP_DECLARE(void) ap_get_sload(ap_sload_t *ld)
         ld->idle = ready * 100 / total;
         ld->busy = busy * 100 / total;
     }
+}
 
+AP_DECLARE(void) ap_get_loadavg(ap_loadavg_t *ld)
+{
+    double la[3];
+    int num;
+
+    /* preload errored fields, we overwrite */
+    ld->loadavg = -1.0;
+    ld->loadavg5 = -1.0;
+    ld->loadavg15 = -1.0;
+
+#if HAVE_GETLOADAVG
+    num = getloadavg(la, 3);
+    if (num > 0) {
+        ld->loadavg = (float)la[0];
+    }
+    if (num > 1) {
+        ld->loadavg5 = (float)la[1];
+    }
+    if (num > 2) {
+        ld->loadavg15 = (float)la[2];
+    }
+#endif
 }