MINOR: cache: report the number of cache lookups and cache hits
The cache lookups and hits is now accounted per frontend and per backend,
and reported on the stats page.
diff --git a/include/types/counters.h b/include/types/counters.h
index 79dd6d4..1898548 100644
--- a/include/types/counters.h
+++ b/include/types/counters.h
@@ -56,6 +56,8 @@
long long comp_rsp; /* number of compressed responses */
unsigned int rps_max; /* maximum of new HTTP requests second observed */
long long rsp[6]; /* http response codes */
+ long long cache_lookups;/* cache lookups */
+ long long cache_hits; /* cache hits */
} http;
} p; /* protocol-specific stats */
};
@@ -105,6 +107,8 @@
long long comp_rsp; /* number of compressed responses */
unsigned int rps_max; /* maximum of new HTTP requests second observed */
long long rsp[6]; /* http response codes */
+ long long cache_lookups;/* cache lookups */
+ long long cache_hits; /* cache hits */
} http;
} p; /* protocol-specific stats */
};
diff --git a/include/types/stats.h b/include/types/stats.h
index c3b9fc8..ec29c78 100644
--- a/include/types/stats.h
+++ b/include/types/stats.h
@@ -394,6 +394,8 @@
ST_F_WREW,
ST_F_CONNECT,
ST_F_REUSE,
+ ST_F_CACHE_LOOKUPS,
+ ST_F_CACHE_HITS,
/* must always be the last one */
ST_F_TOTAL_FIELDS
diff --git a/src/cache.c b/src/cache.c
index 74743f2..199b865 100644
--- a/src/cache.c
+++ b/src/cache.c
@@ -1389,6 +1389,11 @@
if (s->txn->flags & TX_CACHE_IGNORE)
return ACT_RET_CONT;
+ if (px == strm_fe(s))
+ HA_ATOMIC_ADD(&px->fe_counters.p.http.cache_lookups, 1);
+ else
+ HA_ATOMIC_ADD(&px->be_counters.p.http.cache_lookups, 1);
+
shctx_lock(shctx_ptr(cache));
res = entry_exist(cache, s->txn->cache_hash);
if (res) {
@@ -1402,6 +1407,11 @@
appctx->ctx.cache.entry = res;
appctx->ctx.cache.next = NULL;
appctx->ctx.cache.sent = 0;
+
+ if (px == strm_fe(s))
+ HA_ATOMIC_ADD(&px->fe_counters.p.http.cache_hits, 1);
+ else
+ HA_ATOMIC_ADD(&px->be_counters.p.http.cache_hits, 1);
return ACT_RET_CONT;
} else {
shctx_lock(shctx_ptr(cache));
diff --git a/src/stats.c b/src/stats.c
index 823502f..3ee1689 100644
--- a/src/stats.c
+++ b/src/stats.c
@@ -230,6 +230,8 @@
[ST_F_WREW] = "wrew",
[ST_F_CONNECT] = "connect",
[ST_F_REUSE] = "reuse",
+ [ST_F_CACHE_LOOKUPS] = "cache_lookups",
+ [ST_F_CACHE_HITS] = "cache_hits",
};
/* one line of info */
@@ -724,6 +726,8 @@
"<tr><th>- HTTP 5xx responses:</th><td>%s</td></tr>"
"<tr><th>- other responses:</th><td>%s</td></tr>"
"<tr><th>Intercepted requests:</th><td>%s</td></tr>"
+ "<tr><th>Cache lookups:</th><td>%s</td></tr>"
+ "<tr><th>Cache hits:</th><td>%s</td><td>(%d%%)</td></tr>"
"<tr><th>Failed hdr rewrites:</th><td>%s</td></tr>"
"",
U2H(stats[ST_F_REQ_TOT].u.u64),
@@ -737,6 +741,10 @@
U2H(stats[ST_F_HRSP_5XX].u.u64),
U2H(stats[ST_F_HRSP_OTHER].u.u64),
U2H(stats[ST_F_INTERCEPTED].u.u64),
+ U2H(stats[ST_F_CACHE_LOOKUPS].u.u64),
+ U2H(stats[ST_F_CACHE_HITS].u.u64),
+ stats[ST_F_CACHE_LOOKUPS].u.u64 ?
+ (int)(100 * stats[ST_F_CACHE_HITS].u.u64 / stats[ST_F_CACHE_LOOKUPS].u.u64) : 0,
U2H(stats[ST_F_WREW].u.u64));
}
@@ -1198,6 +1206,8 @@
"<tr><th>- HTTP 4xx responses:</th><td>%s</td></tr>"
"<tr><th>- HTTP 5xx responses:</th><td>%s</td></tr>"
"<tr><th>- other responses:</th><td>%s</td></tr>"
+ "<tr><th>Cache lookups:</th><td>%s</td></tr>"
+ "<tr><th>Cache hits:</th><td>%s</td><td>(%d%%)</td></tr>"
"<tr><th>Failed hdr rewrites:</th><td>%s</td></tr>"
"<tr><th colspan=3>Avg over last 1024 success. conn.</th></tr>"
"",
@@ -1215,6 +1225,10 @@
U2H(stats[ST_F_HRSP_4XX].u.u64),
U2H(stats[ST_F_HRSP_5XX].u.u64),
U2H(stats[ST_F_HRSP_OTHER].u.u64),
+ U2H(stats[ST_F_CACHE_LOOKUPS].u.u64),
+ U2H(stats[ST_F_CACHE_HITS].u.u64),
+ stats[ST_F_CACHE_LOOKUPS].u.u64 ?
+ (int)(100 * stats[ST_F_CACHE_HITS].u.u64 / stats[ST_F_CACHE_LOOKUPS].u.u64) : 0,
U2H(stats[ST_F_WREW].u.u64));
}
@@ -1363,6 +1377,8 @@
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]);
stats[ST_F_INTERCEPTED] = mkf_u64(FN_COUNTER, px->fe_counters.intercepted_req);
+ stats[ST_F_CACHE_LOOKUPS] = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cache_lookups);
+ stats[ST_F_CACHE_HITS] = mkf_u64(FN_COUNTER, px->fe_counters.p.http.cache_hits);
}
/* requests : req_rate, req_rate_max, req_tot, */
@@ -1839,6 +1855,8 @@
stats[ST_F_HRSP_4XX] = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[4]);
stats[ST_F_HRSP_5XX] = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[5]);
stats[ST_F_HRSP_OTHER] = mkf_u64(FN_COUNTER, px->be_counters.p.http.rsp[0]);
+ stats[ST_F_CACHE_LOOKUPS] = mkf_u64(FN_COUNTER, px->be_counters.p.http.cache_lookups);
+ stats[ST_F_CACHE_HITS] = mkf_u64(FN_COUNTER, px->be_counters.p.http.cache_hits);
}
stats[ST_F_CLI_ABRT] = mkf_u64(FN_COUNTER, px->be_counters.cli_aborts);