]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
MEDIUM: stats: convert stats_dump_fe_stats() to use stats_dump_fields_csv()
authorWilly Tarreau <w@1wt.eu>
Mon, 4 Jan 2016 18:36:41 +0000 (19:36 +0100)
committerWilly Tarreau <w@1wt.eu>
Fri, 11 Mar 2016 16:08:04 +0000 (17:08 +0100)
This function now only fills the relevant fields with raw values and
calls stats_dump_fields_csv() for the CSV part. The output remains
exactly the same for now.

src/dumpstats.c

index 3e82ceb600a32093046ef092b10af24958a996aa..2aa8cbec36e8c40bb48a807902e542412861001c 100644 (file)
@@ -3229,7 +3229,6 @@ static int stats_dump_fields_csv(struct chunk *out, const struct field *stats)
 static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px)
 {
        struct appctx *appctx = __objt_appctx(si->end);
-       int i;
 
        if (!(px->cap & PR_CAP_FE))
                return 0;
@@ -3237,6 +3236,49 @@ static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px)
        if ((appctx->ctx.stats.flags & STAT_BOUND) && !(appctx->ctx.stats.type & (1 << STATS_TYPE_FE)))
                return 0;
 
+       memset(&stats, 0, sizeof(stats));
+
+       stats[ST_F_PXNAME]   = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, px->id);
+       stats[ST_F_SVNAME]   = mkf_str(FO_KEY|FN_NAME|FS_SERVICE, "FRONTEND");
+       stats[ST_F_SCUR]     = mkf_u32(0, px->feconn);
+       stats[ST_F_SMAX]     = mkf_u32(FN_MAX, px->fe_counters.conn_max);
+       stats[ST_F_SLIM]     = mkf_u32(FO_CONFIG|FN_LIMIT, px->maxconn);
+       stats[ST_F_STOT]     = mkf_u64(FN_COUNTER, px->fe_counters.cum_sess);
+       stats[ST_F_BIN]      = mkf_u64(FN_COUNTER, px->fe_counters.bytes_in);
+       stats[ST_F_BOUT]     = mkf_u64(FN_COUNTER, px->fe_counters.bytes_out);
+       stats[ST_F_DREQ]     = mkf_u64(FN_COUNTER, px->fe_counters.denied_req);
+       stats[ST_F_DRESP]    = mkf_u64(FN_COUNTER, px->fe_counters.denied_resp);
+       stats[ST_F_EREQ]     = mkf_u64(FN_COUNTER, px->fe_counters.failed_req);
+       stats[ST_F_STATUS]   = mkf_str(FO_STATUS, px->state == PR_STREADY ? "OPEN" : px->state == PR_STFULL ? "FULL" : "STOP");
+       stats[ST_F_PID]      = mkf_u32(FO_KEY, relative_pid);
+       stats[ST_F_IID]      = mkf_u32(FO_KEY|FS_SERVICE, px->uuid);
+       stats[ST_F_SID]      = mkf_u32(FO_KEY|FS_SERVICE, 0);
+       stats[ST_F_TYPE]     = mkf_u32(FO_CONFIG|FS_SERVICE, STATS_TYPE_FE);
+       stats[ST_F_RATE]     = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_sess_per_sec));
+       stats[ST_F_RATE_LIM] = mkf_u32(FO_CONFIG|FN_LIMIT, px->fe_sps_lim);
+       stats[ST_F_RATE_MAX] = mkf_u32(FN_MAX, px->fe_counters.sps_max);
+
+       /* http response: 1xx, 2xx, 3xx, 4xx, 5xx, other */
+       if (px->mode == PR_MODE_HTTP) {
+               stats[ST_F_HRSP_1XX]    = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[1]);
+               stats[ST_F_HRSP_2XX]    = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[2]);
+               stats[ST_F_HRSP_3XX]    = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[3]);
+               stats[ST_F_HRSP_4XX]    = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[4]);
+               stats[ST_F_HRSP_5XX]    = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[5]);
+               stats[ST_F_HRSP_OTHER] = mkf_u64(FN_COUNTER, px->fe_counters.p.http.rsp[0]);
+       }
+
+       /* requests : req_rate, req_rate_max, req_tot, */
+       stats[ST_F_REQ_RATE]     = mkf_u32(FN_RATE, read_freq_ctr(&px->fe_req_per_sec));
+       stats[ST_F_REQ_RATE_MAX] = mkf_u32(FN_MAX, px->fe_counters.p.http.rps_max);
+       stats[ST_F_REQ_TOT]      = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cum_req);
+
+       /* compression: in, out, bypassed, responses */
+       stats[ST_F_COMP_IN]      = mkf_u64(FN_COUNTER, px->fe_counters.comp_in);
+       stats[ST_F_COMP_OUT]     = mkf_u64(FN_COUNTER, px->fe_counters.comp_out);
+       stats[ST_F_COMP_BYP]     = mkf_u64(FN_COUNTER, px->fe_counters.comp_byp);
+       stats[ST_F_COMP_RSP]     = mkf_u64(FN_COUNTER, px->fe_counters.p.http.comp_rsp);
+
        if (appctx->ctx.stats.flags & STAT_FMT_HTML) {
                chunk_appendf(&trash,
                              /* name, queue */
@@ -3377,73 +3419,8 @@ static int stats_dump_fe_stats(struct stream_interface *si, struct proxy *px)
                              px->state == PR_STFULL ? "FULL" : "STOP");
        }
        else { /* CSV mode */
-               chunk_appendf(&trash,
-                             /* pxid, name, queue cur, queue max, */
-                             "%s,FRONTEND,,,"
-                             /* sessions : current, max, limit, total */
-                             "%d,%d,%d,%lld,"
-                             /* bytes : in, out */
-                             "%lld,%lld,"
-                             /* denied: req, resp */
-                             "%lld,%lld,"
-                             /* errors : request, connect, response */
-                             "%lld,,,"
-                             /* warnings: retries, redispatches */
-                             ",,"
-                             /* server status : reflect frontend status */
-                             "%s,"
-                             /* rest of server: nothing */
-                             ",,,,,,,,"
-                             /* pid, iid, sid, throttle, lbtot, tracked, type */
-                             "%d,%d,0,,,,%d,"
-                             /* rate, rate_lim, rate_max */
-                             "%u,%u,%u,"
-                             /* check_status, check_code, check_duration */
-                             ",,,",
-                             px->id,
-                             px->feconn, px->fe_counters.conn_max, px->maxconn, px->fe_counters.cum_sess,
-                             px->fe_counters.bytes_in, px->fe_counters.bytes_out,
-                             px->fe_counters.denied_req, px->fe_counters.denied_resp,
-                             px->fe_counters.failed_req,
-                             px->state == PR_STREADY ? "OPEN" :
-                             px->state == PR_STFULL ? "FULL" : "STOP",
-                             relative_pid, px->uuid, STATS_TYPE_FE,
-                             read_freq_ctr(&px->fe_sess_per_sec),
-                             px->fe_sps_lim, px->fe_counters.sps_max);
-
-               /* http response: 1xx, 2xx, 3xx, 4xx, 5xx, other */
-               if (px->mode == PR_MODE_HTTP) {
-                       for (i=1; i<6; i++)
-                               chunk_appendf(&trash, "%lld,", px->fe_counters.p.http.rsp[i]);
-                       chunk_appendf(&trash, "%lld,", px->fe_counters.p.http.rsp[0]);
-               }
-               else
-                       chunk_appendf(&trash, ",,,,,,");
-
-               /* failed health analyses */
-               chunk_appendf(&trash, ",");
-
-               /* requests : req_rate, req_rate_max, req_tot, */
-               chunk_appendf(&trash, "%u,%u,%lld,",
-                             read_freq_ctr(&px->fe_req_per_sec),
-                             px->fe_counters.p.http.rps_max, px->fe_counters.p.http.cum_req);
-
-               /* errors: cli_aborts, srv_aborts */
-               chunk_appendf(&trash, ",,");
-
-               /* compression: in, out, bypassed */
-               chunk_appendf(&trash, "%lld,%lld,%lld,",
-                             px->fe_counters.comp_in, px->fe_counters.comp_out, px->fe_counters.comp_byp);
-
-               /* compression: comp_rsp */
-               chunk_appendf(&trash, "%lld,",
-                             px->fe_counters.p.http.comp_rsp);
-
-               /* lastsess, last_chk, last_agt, qtime, ctime, rtime, ttime, */
-               chunk_appendf(&trash, ",,,,,,,");
-
-               /* finish with EOL */
-               chunk_appendf(&trash, "\n");
+               /* dump everything */
+               stats_dump_fields_csv(&trash, stats);
        }
        return 1;
 }