]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
[MINOR] fix backend's weight in the stats page.
authorWilly Tarreau <w@1wt.eu>
Tue, 24 Jul 2007 22:28:06 +0000 (00:28 +0200)
committerWilly Tarreau <w@1wt.eu>
Sun, 9 Sep 2007 19:09:28 +0000 (21:09 +0200)
The GCD used when computing the servers' weights causes the total
weight of the backend to appear lower than expected because it is
divided by the GCD. Easy solution consists in recomputing the GCD
from the first server and apply it to the global weight.

src/proto_http.c

index f717bdf32663dfc37aede62ae9efab5fd9e9db15..10420818ceaea368d1e218b0de2b814036681a26 100644 (file)
@@ -3848,9 +3848,18 @@ int produce_content_stats_proxy(struct session *s, struct proxy *px)
        case DATA_ST_PX_BE:
                /* print the backend */
                if (px->cap & PR_CAP_BE) {
+                       int gcd = 1;
+
                        if (px->map_state & PR_MAP_RECALC)
                                recalc_server_map(px);
 
+                       /* The GCD which was computed causes the total effective
+                        * weight to appear lower than all weights. Let's
+                        * recompute it.
+                        */
+                       if (px->srv && px->srv->eweight)
+                               gcd = px->srv->uweight / px->srv->eweight;
+
                        chunk_printf(&msg, sizeof(trash),
                                     /* name */
                                     "<tr align=center class=\"backend\"><td>Backend</td>"
@@ -3879,7 +3888,7 @@ int produce_content_stats_proxy(struct session *s, struct proxy *px)
                                     px->denied_req, px->denied_resp,
                                     px->failed_conns, px->failed_resp,
                                     (px->srv_map_sz > 0 || !px->srv) ? "UP" : "DOWN",
-                                    px->srv_map_sz, px->srv_act, px->srv_bck);
+                                    px->srv_map_sz * gcd, px->srv_act, px->srv_bck);
 
                        if (buffer_write_chunk(rep, &msg) != 0)
                                return 0;