>From 09072edaddcb066c7b2b318e0e137ef67e62e867 Mon Sep 17 00:00:00 2001
From: Krzysztof Piotr Oledzki <o...@ans.pl>
Date: Sun, 4 Oct 2009 14:52:57 +0200
Subject: [CLEANUP] Move counters to dedicated structures

Move counters from "struct proxy" and "struct server"
to "struct pxcounters" and "struct svcounters".

This patch should make no functional change.

---
 include/proto/proxy.h     |    6 ++--
 include/proto/server.h    |    2 +-
 include/types/protocols.h |    2 +
 include/types/proxy.h     |   16 +++-------
 include/types/server.h    |   12 ++------
 src/backend.c             |   22 +++++++-------
 src/checks.c              |    6 ++--
 src/client.c              |    6 ++--
 src/dumpstats.c           |   66 ++++++++++++++++++++++----------------------
 src/haproxy.c             |    8 +++---
 src/proto_http.c          |   54 +++++++++++++++++-------------------
 src/proto_tcp.c           |    2 +-
 src/proxy.c               |    4 +-
 src/session.c             |   34 +++++++++++-----------
 14 files changed, 114 insertions(+), 126 deletions(-)

diff --git a/include/proto/proxy.h b/include/proto/proxy.h
index 0ad1e7f..f293b1b 100644
--- a/include/proto/proxy.h
+++ b/include/proto/proxy.h
@@ -66,9 +66,9 @@ static inline void proxy_reset_timeouts(struct proxy *proxy)
 }
 
 /* increase the number of cumulated connections on the designated frontend */
-static void inline proxy_inc_fe_ctr(struct proxy *fe)
+static void inline proxy_inc_fe_ctr(struct listener *l, struct proxy *fe)
 {
-       fe->cum_feconn++;
+       fe->counters.cum_feconn++;
        update_freq_ctr(&fe->fe_sess_per_sec, 1);
        if (fe->fe_sess_per_sec.curr_ctr > fe->fe_sps_max)
                fe->fe_sps_max = fe->fe_sess_per_sec.curr_ctr;
@@ -77,7 +77,7 @@ static void inline proxy_inc_fe_ctr(struct proxy *fe)
 /* increase the number of cumulated connections on the designated backend */
 static void inline proxy_inc_be_ctr(struct proxy *be)
 {
-       be->cum_beconn++;
+       be->counters.cum_beconn++;
        update_freq_ctr(&be->be_sess_per_sec, 1);
        if (be->be_sess_per_sec.curr_ctr > be->be_sps_max)
                be->be_sps_max = be->be_sess_per_sec.curr_ctr;
diff --git a/include/proto/server.h b/include/proto/server.h
index 7479c2e..43d9216 100644
--- a/include/proto/server.h
+++ b/include/proto/server.h
@@ -38,7 +38,7 @@ int srv_getinter(struct server *s);
 /* increase the number of cumulated connections on the designated server */
 static void inline srv_inc_sess_ctr(struct server *s)
 {
-       s->cum_sess++;
+       s->counters.cum_sess++;
        update_freq_ctr(&s->sess_per_sec, 1);
        if (s->sess_per_sec.curr_ctr > s->sps_max)
                s->sps_max = s->sess_per_sec.curr_ctr;
diff --git a/include/types/protocols.h b/include/types/protocols.h
index 9247ef1..14aee79 100644
--- a/include/types/protocols.h
+++ b/include/types/protocols.h
@@ -76,6 +76,8 @@
  */
 struct listener {
        int fd;                         /* the listen socket */
+       char *name;                     /* */
+       int luid;                       /* listener universally unique ID, used 
for SNMP */
        int state;                      /* state: NEW, INIT, ASSIGNED, LISTEN, 
READY, FULL */
        int options;                    /* socket options : LI_O_* */
        struct sockaddr_storage addr;   /* the address we listen to */
diff --git a/include/types/proxy.h b/include/types/proxy.h
index ed632a2..432111b 100644
--- a/include/types/proxy.h
+++ b/include/types/proxy.h
@@ -37,6 +37,7 @@
 #include <types/acl.h>
 #include <types/backend.h>
 #include <types/buffers.h>
+#include <types/counters.h>
 #include <types/freq_ctr.h>
 #include <types/httperr.h>
 #include <types/log.h>
@@ -196,14 +197,11 @@ struct proxy {
        struct list pendconns;                  /* pending connections with no 
server assigned yet */
        int nbpend, nbpend_max;                 /* number of pending 
connections with no server assigned yet */
        int totpend;                            /* total number of pending 
connections on this instance (for stats) */
-       unsigned int feconn, feconn_max;        /* # of active frontend 
sessions */
-       unsigned int beconn, beconn_max;        /* # of active backend sessions 
*/
+       unsigned int feconn, beconn;            /* # of active frontend and 
backends sessions */
        struct freq_ctr fe_sess_per_sec;        /* sessions per second on the 
frontend */
        unsigned int fe_sps_max;                /* maximum of new sessions per 
second seen on the frontend */
        struct freq_ctr be_sess_per_sec;        /* sessions per second on the 
backend */
        unsigned int be_sps_max;                /* maximum of new sessions per 
second seen on the backend */
-       long long cum_feconn, cum_beconn;       /* cumulated number of 
processed sessions */
-       long long cum_lbconn;                   /* cumulated number of sessions 
processed by load balancing */
        unsigned int maxconn;                   /* max # of active sessions on 
the frontend */
        unsigned int fe_sps_lim;                /* limit on new sessions per 
second on the frontend */
        unsigned int fullconn;                  /* #conns on backend above 
which servers are used at full load */
@@ -219,12 +217,6 @@ struct proxy {
        unsigned down_time;                     /* total time the proxy was 
down */
        time_t last_change;                     /* last time, when the state 
was changed */
 
-       long long failed_conns, failed_resp;    /* failed connect() and 
responses */
-       long long retries, redispatches;        /* retried and redispatched 
connections */
-       long long denied_req, denied_resp;      /* blocked requests/responses 
because of security concerns */
-       long long failed_req;                   /* failed requests (eg: invalid 
or timeout) */
-       long long bytes_in;                     /* number of bytes transferred 
from the client to the server */
-       long long bytes_out;                    /* number of bytes transferred 
from the server to the client */
        int conn_retries;                       /* maximum number of connect 
retries */
        int cap;                                /* supported capabilities 
(PR_CAP_*) */
        struct sockaddr_in source_addr;         /* the address to which we want 
to bind for connect() */
@@ -255,7 +247,7 @@ struct proxy {
        int check_len;                          /* Length of the HTTP or SSL3 
request */
        struct chunk errmsg[HTTP_ERR_SIZE];     /* default or customized error 
messages for known errors */
        int uuid;                               /* universally unique proxy ID, 
used for SNMP */
-       int next_svid;                          /* next server-id, used for 
SNMP */
+       int next_svid, next_lid;                /* next server-id and 
listener-id, used for SNMP */
        unsigned int backlog;                   /* force the frontend's listen 
backlog */
        unsigned int bind_proc;                 /* bitmask of processes using 
this proxy. 0 = all. */
        struct error_snapshot invalid_req, invalid_rep; /* captures of last 
errors */
@@ -263,6 +255,8 @@ struct proxy {
        /* used only during configuration parsing */
        int no_options;                         /* PR_O_REDISP, PR_O_TRANSP, 
... */
        int no_options2;                        /* PR_O2_* */
+
+       struct pxcounters counters;             /* statistics counters */
 };
 
 struct switching_rule {
diff --git a/include/types/server.h b/include/types/server.h
index 3304004..ddf5a46 100644
--- a/include/types/server.h
+++ b/include/types/server.h
@@ -30,6 +30,7 @@
 #include <common/mini-clist.h>
 
 #include <types/buffers.h>
+#include <types/counters.h>
 #include <types/freq_ctr.h>
 #include <types/port_range.h>
 #include <types/proxy.h>
@@ -119,24 +120,17 @@ struct server {
        struct eb_root *lb_tree;                /* we want to know in what tree 
the server is */
        struct server *next_full;               /* next server in the temporary 
full list */
 
-       long long failed_checks, down_trans;    /* failed checks and up-down 
transitions */
        unsigned down_time;                     /* total time the server was 
down */
        time_t last_change;                     /* last time, when the state 
was changed */
        struct timeval check_start;             /* last health check start time 
*/
        unsigned long check_duration;           /* time in ms took to finish 
last health check */
        short check_status, check_code;         /* check result, check code */
 
-       long long failed_conns, failed_resp;    /* failed connect() and 
responses */
-       long long retries, redispatches;        /* retried and redispatched 
connections */
-       long long failed_secu;                  /* blocked responses because of 
security concerns */
        struct freq_ctr sess_per_sec;           /* sessions per second on this 
server */
        unsigned int sps_max;                   /* maximum of new sessions per 
second seen on this server */
-       long long cum_sess;                     /* cumulated number of sessions 
really sent to this server */
-       long long cum_lbconn;                   /* cumulated number of sessions 
directed by load balancing */
-
-       long long bytes_in;                     /* number of bytes transferred 
from the client to the server */
-       long long bytes_out;                    /* number of bytes transferred 
from the server to the client */
        int puid;                               /* proxy-unique server ID, used 
for SNMP */
+
+       struct srvcounters counters;            /* statistics counters */
 };
 
 
diff --git a/src/backend.c b/src/backend.c
index 39726ce..56b15d1 100644
--- a/src/backend.c
+++ b/src/backend.c
@@ -598,8 +598,8 @@ int assign_server(struct session *s)
                        goto out;
                }
                else if (s->srv != s->prev_srv) {
-                       s->be->cum_lbconn++;
-                       s->srv->cum_lbconn++;
+                       s->be->counters.cum_lbconn++;
+                       s->srv->counters.cum_lbconn++;
                }
        }
        else if (s->be->options & PR_O_HTTP_PROXY) {
@@ -749,11 +749,11 @@ int assign_server_and_queue(struct session *s)
                                        s->txn.flags |= TX_CK_DOWN;
                                }
                                s->flags |= SN_REDISP;
-                               s->prev_srv->redispatches++;
-                               s->be->redispatches++;
+                               s->prev_srv->counters.redispatches++;
+                               s->be->counters.redispatches++;
                        } else {
-                               s->prev_srv->retries++;
-                               s->be->retries++;
+                               s->prev_srv->counters.retries++;
+                               s->be->counters.retries++;
                        }
                }
        }
@@ -906,8 +906,8 @@ int srv_redispatch_connect(struct session *t)
                        t->req->cons->err_loc = t->srv;
                }
 
-               t->srv->failed_conns++;
-               t->be->failed_conns++;
+               t->srv->counters.failed_conns++;
+               t->be->counters.failed_conns++;
                return 1;
 
        case SRV_STATUS_NOSRV:
@@ -917,7 +917,7 @@ int srv_redispatch_connect(struct session *t)
                        t->req->cons->err_loc = NULL;
                }
 
-               t->be->failed_conns++;
+               t->be->counters.failed_conns++;
                return 1;
 
        case SRV_STATUS_QUEUED:
@@ -936,8 +936,8 @@ int srv_redispatch_connect(struct session *t)
                if (t->srv)
                        srv_inc_sess_ctr(t->srv);
                if (t->srv)
-                       t->srv->failed_conns++;
-               t->be->failed_conns++;
+                       t->srv->counters.failed_conns++;
+               t->be->counters.failed_conns++;
 
                /* release other sessions waiting for this server */
                if (may_dequeue_tasks(t->srv, t->be))
diff --git a/src/checks.c b/src/checks.c
index 723e693..a21386f 100644
--- a/src/checks.c
+++ b/src/checks.c
@@ -344,7 +344,7 @@ static void set_server_down(struct server *s)
                if (s->proxy->srv_bck == 0 && s->proxy->srv_act == 0)
                        set_backend_down(s->proxy);
 
-               s->down_trans++;
+               s->counters.down_trans++;
 
                if (s->state & SRV_CHECKED)
                        for(srv = s->tracknext; srv; srv = srv->tracknext)
@@ -942,7 +942,7 @@ struct task *process_chk(struct task *t)
                /* here, we have seen a failure */
                if (s->health > s->rise) {
                        s->health--; /* still good */
-                       s->failed_checks++;
+                       s->counters.failed_checks++;
                }
                else
                        set_server_down(s);
@@ -1033,7 +1033,7 @@ struct task *process_chk(struct task *t)
                        /* failure or timeout detected */
                        if (s->health > s->rise) {
                                s->health--; /* still good */
-                               s->failed_checks++;
+                               s->counters.failed_checks++;
                        }
                        else
                                set_server_down(s);
diff --git a/src/client.c b/src/client.c
index ba58182..7d76752 100644
--- a/src/client.c
+++ b/src/client.c
@@ -256,7 +256,7 @@ int event_accept(int fd) {
                s->data_source = DATA_SRC_NONE;
 
                s->uniq_id = totalconn;
-               proxy_inc_fe_ctr(p);    /* note: cum_beconn will be increased 
once assigned */
+               proxy_inc_fe_ctr(l, p); /* note: cum_beconn will be increased 
once assigned */
 
                txn = &s->txn;
                txn->flags = 0;
@@ -489,8 +489,8 @@ int event_accept(int fd) {
                }
 
                p->feconn++;  /* beconn will be increased later */
-               if (p->feconn > p->feconn_max)
-                       p->feconn_max = p->feconn;
+               if (p->feconn > p->counters.feconn_max)
+                       p->counters.feconn_max = p->feconn;
 
                actconn++;
                totalconn++;
diff --git a/src/dumpstats.c b/src/dumpstats.c
index 8b95933..024448a 100644
--- a/src/dumpstats.c
+++ b/src/dumpstats.c
@@ -1061,8 +1061,8 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                     "",
                                     U2H0(read_freq_ctr(&px->fe_sess_per_sec)),
                                     U2H1(px->fe_sps_max), 
LIM2A2(px->fe_sps_lim, "-"),
-                                    U2H3(px->feconn), U2H4(px->feconn_max), 
U2H5(px->maxconn),
-                                    U2H6(px->cum_feconn), U2H7(px->bytes_in), 
U2H8(px->bytes_out));
+                                    U2H3(px->feconn), 
U2H4(px->counters.feconn_max), U2H5(px->maxconn),
+                                    U2H6(px->counters.cum_feconn), 
U2H7(px->counters.bytes_in), U2H8(px->counters.bytes_out));
 
                                chunk_printf(&msg,
                                     /* denied: req, resp */
@@ -1076,8 +1076,8 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                     /* rest of server: nothing */
                                     "<td align=center colspan=8></td></tr>"
                                     "",
-                                    U2H0(px->denied_req), 
U2H1(px->denied_resp),
-                                    U2H2(px->failed_req),
+                                    U2H0(px->counters.denied_req), 
U2H1(px->counters.denied_resp),
+                                    U2H2(px->counters.failed_req),
                                     px->state == PR_STRUN ? "OPEN" :
                                     px->state == PR_STIDLE ? "FULL" : "STOP");
                        } else {
@@ -1106,10 +1106,10 @@ int stats_dump_proxy(struct session *s, struct proxy 
*px, struct uri_auth *uri)
                                     ",,,"
                                     "\n",
                                     px->id,
-                                    px->feconn, px->feconn_max, px->maxconn, 
px->cum_feconn,
-                                    px->bytes_in, px->bytes_out,
-                                    px->denied_req, px->denied_resp,
-                                    px->failed_req,
+                                    px->feconn, px->counters.feconn_max, 
px->maxconn, px->counters.cum_feconn,
+                                    px->counters.bytes_in, 
px->counters.bytes_out,
+                                    px->counters.denied_req, 
px->counters.denied_resp,
+                                    px->counters.failed_req,
                                     px->state == PR_STRUN ? "OPEN" :
                                     px->state == PR_STIDLE ? "FULL" : "STOP",
                                     relative_pid, px->uuid, STATS_TYPE_FE,
@@ -1191,7 +1191,7 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                     U2H0(sv->nbpend), U2H1(sv->nbpend_max), 
LIM2A2(sv->maxqueue, "-"),
                                     U2H3(read_freq_ctr(&sv->sess_per_sec)), 
U2H4(sv->sps_max),
                                     U2H5(sv->cur_sess), 
U2H6(sv->cur_sess_max), LIM2A7(sv->maxconn, "-"),
-                                    U2H8(sv->cum_sess), U2H9(sv->cum_lbconn));
+                                    U2H8(sv->counters.cum_sess), 
U2H9(sv->counters.cum_lbconn));
 
                                chunk_printf(&msg,
                                     /* bytes : in, out */
@@ -1203,10 +1203,10 @@ int stats_dump_proxy(struct session *s, struct proxy 
*px, struct uri_auth *uri)
                                     /* warnings: retries, redispatches */
                                     "<td align=right>%lld</td><td 
align=right>%lld</td>"
                                     "",
-                                    U2H0(sv->bytes_in), U2H1(sv->bytes_out),
-                                    U2H2(sv->failed_secu),
-                                    U2H3(sv->failed_conns), 
U2H4(sv->failed_resp),
-                                    sv->retries, sv->redispatches);
+                                    U2H0(sv->counters.bytes_in), 
U2H1(sv->counters.bytes_out),
+                                    U2H2(sv->counters.failed_secu),
+                                    U2H3(sv->counters.failed_conns), 
U2H4(sv->counters.failed_resp),
+                                    sv->counters.retries, 
sv->counters.redispatches);
 
                                /* status, lest check */
                                chunk_printf(&msg, "<td nowrap>");
@@ -1250,7 +1250,7 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                             "<td align=right>%lld</td><td 
align=right>%lld</td>"
                                             "<td nowrap align=right>%s</td>"
                                             "",
-                                            svs->failed_checks, 
svs->down_trans,
+                                            svs->counters.failed_checks, 
svs->counters.down_trans,
                                             human_time(srv_downtime(sv), 1));
                                else if (sv != svs)
                                        chunk_printf(&msg,
@@ -1294,11 +1294,11 @@ int stats_dump_proxy(struct session *s, struct proxy 
*px, struct uri_auth *uri)
                                     "",
                                     px->id, sv->id,
                                     sv->nbpend, sv->nbpend_max,
-                                    sv->cur_sess, sv->cur_sess_max, 
LIM2A0(sv->maxconn, ""), sv->cum_sess,
-                                    sv->bytes_in, sv->bytes_out,
-                                    sv->failed_secu,
-                                    sv->failed_conns, sv->failed_resp,
-                                    sv->retries, sv->redispatches);
+                                    sv->cur_sess, sv->cur_sess_max, 
LIM2A0(sv->maxconn, ""), sv->counters.cum_sess,
+                                    sv->counters.bytes_in, 
sv->counters.bytes_out,
+                                    sv->counters.failed_secu,
+                                    sv->counters.failed_conns, 
sv->counters.failed_resp,
+                                    sv->counters.retries, 
sv->counters.redispatches);
 
                                /* status */
                                chunk_printf(&msg,
@@ -1318,7 +1318,7 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                if (sv->state & SRV_CHECKED)
                                        chunk_printf(&msg,
                                             "%lld,%lld,%d,%d,",
-                                            sv->failed_checks, sv->down_trans,
+                                            sv->counters.failed_checks, 
sv->counters.down_trans,
                                             (int)(now.tv_sec - 
sv->last_change), srv_downtime(sv));
                                else
                                        chunk_printf(&msg,
@@ -1341,7 +1341,7 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                }
 
                                /* sessions: lbtot */
-                               chunk_printf(&msg, ",%lld,", sv->cum_lbconn);
+                               chunk_printf(&msg, ",%lld,", 
sv->counters.cum_lbconn);
 
                                /* tracked */
                                if (sv->tracked)
@@ -1411,9 +1411,9 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                     /* bytes : in, out */
                                     "<td align=right>%s</td><td 
align=right>%s</td>"
                                     "",
-                                    U2H2(px->beconn), U2H3(px->beconn_max), 
U2H4(px->fullconn),
-                                    U2H6(px->cum_beconn), U2H7(px->cum_lbconn),
-                                    U2H8(px->bytes_in), U2H9(px->bytes_out));
+                                    U2H2(px->beconn), 
U2H3(px->counters.beconn_max), U2H4(px->fullconn),
+                                    U2H6(px->counters.cum_beconn), 
U2H7(px->counters.cum_lbconn),
+                                    U2H8(px->counters.bytes_in), 
U2H9(px->counters.bytes_out));
 
                                chunk_printf(&msg,
                                     /* denied: req, resp */
@@ -1429,9 +1429,9 @@ int stats_dump_proxy(struct session *s, struct proxy *px, 
struct uri_auth *uri)
                                     "<td align=center nowrap>%s %s</td><td 
align=center>&nbsp;</td><td align=center>%d</td>"
                                     "<td align=center>%d</td><td 
align=center>%d</td>"
                                     "",
-                                    U2H0(px->denied_req), 
U2H1(px->denied_resp),
-                                    U2H2(px->failed_conns), 
U2H3(px->failed_resp),
-                                    px->retries, px->redispatches,
+                                    U2H0(px->counters.denied_req), 
U2H1(px->counters.denied_resp),
+                                    U2H2(px->counters.failed_conns), 
U2H3(px->counters.failed_resp),
+                                    px->counters.retries, 
px->counters.redispatches,
                                     human_time(now.tv_sec - px->last_change, 
1),
                                     (px->lbprm.tot_weight > 0 || !px->srv) ? 
"UP" :
                                             "<font 
color=\"red\"><b>DOWN</b></font>",
@@ -1479,18 +1479,18 @@ int stats_dump_proxy(struct session *s, struct proxy 
*px, struct uri_auth *uri)
                                     "\n",
                                     px->id,
                                     px->nbpend /* or px->totpend ? */, 
px->nbpend_max,
-                                    px->beconn, px->beconn_max, px->fullconn, 
px->cum_beconn,
-                                    px->bytes_in, px->bytes_out,
-                                    px->denied_req, px->denied_resp,
-                                    px->failed_conns, px->failed_resp,
-                                    px->retries, px->redispatches,
+                                    px->beconn, px->counters.beconn_max, 
px->fullconn, px->counters.cum_beconn,
+                                    px->counters.bytes_in, 
px->counters.bytes_out,
+                                    px->counters.denied_req, 
px->counters.denied_resp,
+                                    px->counters.failed_conns, 
px->counters.failed_resp,
+                                    px->counters.retries, 
px->counters.redispatches,
                                     (px->lbprm.tot_weight > 0 || !px->srv) ? 
"UP" : "DOWN",
                                     (px->lbprm.tot_weight * px->lbprm.wmult + 
px->lbprm.wdiv - 1) / px->lbprm.wdiv,
                                     px->srv_act, px->srv_bck,
                                     px->down_trans, (int)(now.tv_sec - 
px->last_change),
                                     px->srv?be_downtime(px):0,
                                     relative_pid, px->uuid,
-                                    px->cum_lbconn, STATS_TYPE_BE,
+                                    px->counters.cum_lbconn, STATS_TYPE_BE,
                                     read_freq_ctr(&px->be_sess_per_sec),
                                     px->be_sps_max);
                        }
diff --git a/src/haproxy.c b/src/haproxy.c
index 37d4eea..83df092 100644
--- a/src/haproxy.c
+++ b/src/haproxy.c
@@ -281,7 +281,7 @@ void sig_dump_state(int sig)
                                 "SIGHUP: Server %s/%s is %s. Conn: %d act, %d 
pend, %lld tot.",
                                 p->id, s->id,
                                 (s->state & SRV_RUNNING) ? "UP" : "DOWN",
-                                s->cur_sess, s->nbpend, s->cum_sess);
+                                s->cur_sess, s->nbpend, s->counters.cum_sess);
                        Warning("%s\n", trash);
                        send_log(p, LOG_NOTICE, "%s\n", trash);
                        s = s->next;
@@ -292,19 +292,19 @@ void sig_dump_state(int sig)
                        snprintf(trash, sizeof(trash),
                                 "SIGHUP: Proxy %s has no servers. Conn: 
act(FE+BE): %d+%d, %d pend (%d unass), tot(FE+BE): %lld+%lld.",
                                 p->id,
-                                p->feconn, p->beconn, p->totpend, p->nbpend, 
p->cum_feconn, p->cum_beconn);
+                                p->feconn, p->beconn, p->totpend, p->nbpend, 
p->counters.cum_feconn, p->counters.cum_beconn);
                } else if (p->srv_act == 0) {
                        snprintf(trash, sizeof(trash),
                                 "SIGHUP: Proxy %s %s ! Conn: act(FE+BE): 
%d+%d, %d pend (%d unass), tot(FE+BE): %lld+%lld.",
                                 p->id,
                                 (p->srv_bck) ? "is running on backup servers" 
: "has no server available",
-                                p->feconn, p->beconn, p->totpend, p->nbpend, 
p->cum_feconn, p->cum_beconn);
+                                p->feconn, p->beconn, p->totpend, p->nbpend, 
p->counters.cum_feconn, p->counters.cum_beconn);
                } else {
                        snprintf(trash, sizeof(trash),
                                 "SIGHUP: Proxy %s has %d active servers and %d 
backup servers available."
                                 " Conn: act(FE+BE): %d+%d, %d pend (%d unass), 
tot(FE+BE): %lld+%lld.",
                                 p->id, p->srv_act, p->srv_bck,
-                                p->feconn, p->beconn, p->totpend, p->nbpend, 
p->cum_feconn, p->cum_beconn);
+                                p->feconn, p->beconn, p->totpend, p->nbpend, 
p->counters.cum_feconn, p->counters.cum_beconn);
                }
                Warning("%s\n", trash);
                send_log(p, LOG_NOTICE, "%s\n", trash);
diff --git a/src/proto_http.c b/src/proto_http.c
index 33f0131..5319172 100644
--- a/src/proto_http.c
+++ b/src/proto_http.c
@@ -1843,7 +1843,7 @@ int http_wait_for_request(struct session *s, struct 
buffer *req, int an_bit)
                                http_capture_bad_message(&s->fe->invalid_req, 
s, req, msg, s->fe);
                        msg->msg_state = HTTP_MSG_ERROR;
                        req->analysers = 0;
-                       s->fe->failed_req++;
+                       s->fe->counters.failed_req++;
                        if (!(s->flags & SN_ERR_MASK))
                                s->flags |= SN_ERR_CLICL;
                        if (!(s->flags & SN_FINST_MASK))
@@ -1860,7 +1860,7 @@ int http_wait_for_request(struct session *s, struct 
buffer *req, int an_bit)
                        stream_int_retnclose(req->prod, error_message(s, 
HTTP_ERR_408));
                        msg->msg_state = HTTP_MSG_ERROR;
                        req->analysers = 0;
-                       s->fe->failed_req++;
+                       s->fe->counters.failed_req++;
                        if (!(s->flags & SN_ERR_MASK))
                                s->flags |= SN_ERR_CLITO;
                        if (!(s->flags & SN_FINST_MASK))
@@ -1876,8 +1876,7 @@ int http_wait_for_request(struct session *s, struct 
buffer *req, int an_bit)
                        stream_int_retnclose(req->prod, error_message(s, 
HTTP_ERR_400));
                        msg->msg_state = HTTP_MSG_ERROR;
                        req->analysers = 0;
-                       s->fe->failed_req++;
-
+                       s->fe->counters.failed_req++;
                        if (!(s->flags & SN_ERR_MASK))
                                s->flags |= SN_ERR_CLICL;
                        if (!(s->flags & SN_FINST_MASK))
@@ -2006,7 +2005,7 @@ int http_wait_for_request(struct session *s, struct 
buffer *req, int an_bit)
        txn->req.msg_state = HTTP_MSG_ERROR;
        txn->status = 400;
        stream_int_retnclose(req->prod, error_message(s, HTTP_ERR_400));
-       s->fe->failed_req++;
+       s->fe->counters.failed_req++;
 
  return_prx_cond:
        if (!(s->flags & SN_ERR_MASK))
@@ -2292,7 +2291,7 @@ int http_process_req_common(struct session *s, struct 
buffer *req, int an_bit, s
        txn->req.msg_state = HTTP_MSG_ERROR;
        txn->status = 400;
        stream_int_retnclose(req->prod, error_message(s, HTTP_ERR_400));
-       s->fe->failed_req++;
+       s->fe->counters.failed_req++;
 
  return_prx_cond:
        if (!(s->flags & SN_ERR_MASK))
@@ -2600,7 +2599,7 @@ int http_process_request(struct session *s, struct buffer 
*req, int an_bit)
        txn->status = 400;
        req->analysers = 0;
        stream_int_retnclose(req->prod, error_message(s, HTTP_ERR_400));
-       s->fe->failed_req++;
+       s->fe->counters.failed_req++;
 
        if (!(s->flags & SN_ERR_MASK))
                s->flags |= SN_ERR_PRXCOND;
@@ -2641,8 +2640,8 @@ int http_process_tarpit(struct session *s, struct buffer 
*req, int an_bit)
 
        req->analysers = 0;
        req->analyse_exp = TICK_ETERNITY;
+       s->fe->counters.failed_req++;
 
-       s->fe->failed_req++;
        if (!(s->flags & SN_ERR_MASK))
                s->flags |= SN_ERR_PRXCOND;
        if (!(s->flags & SN_FINST_MASK))
@@ -2834,8 +2833,8 @@ int process_response(struct session *t)
                                buffer_shutr_now(rep);
                                buffer_shutw_now(req);
                                if (t->srv)
-                                       t->srv->failed_resp++;
-                               t->be->failed_resp++;
+                                       t->srv->counters.failed_resp++;
+                               t->be->counters.failed_resp++;
                                rep->analysers = 0;
                                txn->status = 502;
                                stream_int_return(rep->cons, error_message(t, 
HTTP_ERR_502));
@@ -2857,8 +2856,8 @@ int process_response(struct session *t)
                                buffer_shutr_now(rep);
                                buffer_shutw_now(req);
                                if (t->srv)
-                                       t->srv->failed_resp++;
-                               t->be->failed_resp++;
+                                       t->srv->counters.failed_resp++;
+                               t->be->counters.failed_resp++;
                                rep->analysers = 0;
                                txn->status = 502;
                                stream_int_return(rep->cons, error_message(t, 
HTTP_ERR_502));
@@ -2875,8 +2874,8 @@ int process_response(struct session *t)
                                buffer_shutr_now(rep);
                                buffer_shutw_now(req);
                                if (t->srv)
-                                       t->srv->failed_resp++;
-                               t->be->failed_resp++;
+                                       t->srv->counters.failed_resp++;
+                               t->be->counters.failed_resp++;
                                rep->analysers = 0;
                                txn->status = 504;
                                stream_int_return(rep->cons, error_message(t, 
HTTP_ERR_504));
@@ -2892,8 +2891,8 @@ int process_response(struct session *t)
                                        
http_capture_bad_message(&t->be->invalid_rep, t, rep, msg, t->fe);
                                buffer_shutw_now(req);
                                if (t->srv)
-                                       t->srv->failed_resp++;
-                               t->be->failed_resp++;
+                                       t->srv->counters.failed_resp++;
+                               t->be->counters.failed_resp++;
                                rep->analysers = 0;
                                txn->status = 502;
                                stream_int_return(rep->cons, error_message(t, 
HTTP_ERR_502));
@@ -2908,7 +2907,7 @@ int process_response(struct session *t)
                                if (msg->err_pos >= 0)
                                        
http_capture_bad_message(&t->be->invalid_rep, t, rep, msg, t->fe);
                                buffer_shutr_now(rep);
-                               t->be->failed_resp++;
+                               t->be->counters.failed_resp++;
                                rep->analysers = 0;
                                if (!(t->flags & SN_ERR_MASK))
                                        t->flags |= SN_ERR_CLICL;
@@ -2997,8 +2996,8 @@ int process_response(struct session *t)
                                if (apply_filters_to_response(t, rep, 
rule_set->rsp_exp) < 0) {
                                return_bad_resp:
                                        if (t->srv)
-                                               t->srv->failed_resp++;
-                                       cur_proxy->failed_resp++;
+                                               t->srv->counters.failed_resp++;
+                                       cur_proxy->counters.failed_resp++;
                                return_srv_prx_502:
                                        buffer_shutr_now(rep);
                                        buffer_shutw_now(req);
@@ -3016,8 +3015,8 @@ int process_response(struct session *t)
                        /* has the response been denied ? */
                        if (txn->flags & TX_SVDENY) {
                                if (t->srv)
-                                       t->srv->failed_secu++;
-                               cur_proxy->denied_resp++;
+                                       t->srv->counters.failed_secu++;
+                               cur_proxy->counters.denied_resp++;
                                goto return_srv_prx_502;
                        }
 
@@ -3157,9 +3156,8 @@ int process_response(struct session *t)
                         * the 'checkcache' option, and send an alert.
                         */
                        if (t->srv)
-                               t->srv->failed_secu++;
-                       t->be->denied_resp++;
-
+                               t->srv->counters.failed_secu++;
+                       cur_proxy->counters.denied_resp++;
                        Alert("Blocking cacheable cookie in response from 
instance %s, server %s.\n",
                              t->be->id, t->srv?t->srv->id:"<dispatch>");
                        send_log(t->be, LOG_ALERT,
@@ -3344,13 +3342,13 @@ int apply_filter_to_req_headers(struct session *t, 
struct buffer *req, struct hd
                        case ACT_DENY:
                                txn->flags |= TX_CLDENY;
                                last_hdr = 1;
-                               t->be->denied_req++;
+                               t->be->counters.denied_req++;
                                break;
 
                        case ACT_TARPIT:
                                txn->flags |= TX_CLTARPIT;
                                last_hdr = 1;
-                               t->be->denied_req++;
+                               t->be->counters.denied_req++;
                                break;
 
                        case ACT_REPLACE:
@@ -3455,13 +3453,13 @@ int apply_filter_to_req_line(struct session *t, struct 
buffer *req, struct hdr_e
 
                case ACT_DENY:
                        txn->flags |= TX_CLDENY;
-                       t->be->denied_req++;
+                       t->be->counters.denied_req++;
                        done = 1;
                        break;
 
                case ACT_TARPIT:
                        txn->flags |= TX_CLTARPIT;
-                       t->be->denied_req++;
+                       t->be->counters.denied_req++;
                        done = 1;
                        break;
 
diff --git a/src/proto_tcp.c b/src/proto_tcp.c
index a03c809..df6d034 100644
--- a/src/proto_tcp.c
+++ b/src/proto_tcp.c
@@ -686,7 +686,7 @@ int tcp_inspect_request(struct session *s, struct buffer 
*req, int an_bit)
                                buffer_abort(req);
                                buffer_abort(s->rep);
                                req->analysers = 0;
-                               s->fe->failed_req++;
+                               s->fe->counters.failed_req++;
                                if (!(s->flags & SN_ERR_MASK))
                                        s->flags |= SN_ERR_PRXCOND;
                                if (!(s->flags & SN_FINST_MASK))
diff --git a/src/proxy.c b/src/proxy.c
index 8683e74..c7b1f4d 100644
--- a/src/proxy.c
+++ b/src/proxy.c
@@ -645,8 +645,8 @@ int session_set_backend(struct session *s, struct proxy *be)
                return 1;
        s->be = be;
        be->beconn++;
-       if (be->beconn > be->beconn_max)
-               be->beconn_max = be->beconn;
+       if (be->beconn > be->counters.beconn_max)
+               be->counters.beconn_max = be->beconn;
        proxy_inc_be_ctr(be);
 
        /* assign new parameters to the session from the new backend */
diff --git a/src/session.c b/src/session.c
index e359eb1..9d46fe6 100644
--- a/src/session.c
+++ b/src/session.c
@@ -139,13 +139,13 @@ void session_process_counters(struct session *s)
                bytes = s->req->total - s->logs.bytes_in;
                s->logs.bytes_in = s->req->total;
                if (bytes) {
-                       s->fe->bytes_in          += bytes;
+                       s->fe->counters.bytes_in                        += 
bytes;
 
                        if (s->be != s->fe)
-                               s->be->bytes_in  += bytes;
+                               s->be->counters.bytes_in                += 
bytes;
 
                        if (s->srv)
-                               s->srv->bytes_in += bytes;
+                               s->srv->counters.bytes_in               += 
bytes;
                }
        }
 
@@ -153,13 +153,13 @@ void session_process_counters(struct session *s)
                bytes = s->rep->total - s->logs.bytes_out;
                s->logs.bytes_out = s->rep->total;
                if (bytes) {
-                       s->fe->bytes_out          += bytes;
+                       s->fe->counters.bytes_out                       += 
bytes;
 
                        if (s->be != s->fe)
-                               s->be->bytes_out  += bytes;
+                               s->be->counters.bytes_out               += 
bytes;
 
                        if (s->srv)
-                               s->srv->bytes_out += bytes;
+                               s->srv->counters.bytes_out              += 
bytes;
                }
        }
 }
@@ -255,8 +255,8 @@ int sess_update_st_cer(struct session *s, struct 
stream_interface *si)
                }
 
                if (s->srv)
-                       s->srv->failed_conns++;
-               s->be->failed_conns++;
+                       s->srv->counters.failed_conns++;
+               s->be->counters.failed_conns++;
                if (may_dequeue_tasks(s->srv, s->be))
                        process_srv_queue(s->srv);
 
@@ -286,8 +286,8 @@ int sess_update_st_cer(struct session *s, struct 
stream_interface *si)
                si->state = SI_ST_REQ;
        } else {
                if (s->srv)
-                       s->srv->retries++;
-               s->be->retries++;
+                       s->srv->counters.retries++;
+               s->be->counters.retries++;
                si->state = SI_ST_ASS;
        }
 
@@ -381,8 +381,8 @@ void sess_update_stream_int(struct session *s, struct 
stream_interface *si)
                        if (s->srv)
                                srv_inc_sess_ctr(s->srv);
                        if (s->srv)
-                               s->srv->failed_conns++;
-                       s->be->failed_conns++;
+                               s->srv->counters.failed_conns++;
+                       s->be->counters.failed_conns++;
 
                        /* release other sessions waiting for this server */
                        if (may_dequeue_tasks(s->srv, s->be))
@@ -436,8 +436,8 @@ void sess_update_stream_int(struct session *s, struct 
stream_interface *si)
                        si->exp = TICK_ETERNITY;
                        s->logs.t_queue = tv_ms_elapsed(&s->logs.tv_accept, 
&now);
                        if (s->srv)
-                               s->srv->failed_conns++;
-                       s->be->failed_conns++;
+                               s->srv->counters.failed_conns++;
+                       s->be->counters.failed_conns++;
                        si->shutr(si);
                        si->shutw(si);
                        si->ob->flags |= BF_WRITE_TIMEOUT;
@@ -698,9 +698,9 @@ struct task *process_session(struct task *t)
                        s->si[1].shutr(&s->si[1]);
                        s->si[1].shutw(&s->si[1]);
                        stream_int_report_error(&s->si[1]);
-                       s->be->failed_resp++;
+                       s->be->counters.failed_resp++;
                        if (s->srv)
-                               s->srv->failed_resp++;
+                               s->srv->counters.failed_resp++;
                        if (!(s->req->analysers) && !(s->rep->analysers)) {
                                if (!(s->flags & SN_ERR_MASK))
                                        s->flags |= SN_ERR_SRVCL;
@@ -1309,7 +1309,7 @@ void sess_set_term_flags(struct session *s)
 {
        if (!(s->flags & SN_FINST_MASK)) {
                if (s->si[1].state < SI_ST_REQ) {
-                       s->fe->failed_req++;
+                       s->fe->counters.failed_req++;
                        s->flags |= SN_FINST_R;
                }
                else if (s->si[1].state == SI_ST_QUE)
-- 
1.6.4.2


Reply via email to