changeset 3415:4e36a99268dd HEAD

Count cache hits and misses, report them on SIGUSR2.
author Timo Sirainen <tss@iki.fi>
date Wed, 08 Jun 2005 18:45:41 +0300
parents c2497d4c60c9
children 27312b7941e9
files src/auth/auth-cache.c
diffstat 1 files changed, 20 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/auth/auth-cache.c	Wed Jun 08 16:37:17 2005 +0300
+++ b/src/auth/auth-cache.c	Wed Jun 08 18:45:41 2005 +0300
@@ -24,7 +24,9 @@
 
 	size_t size_left;
 	unsigned int ttl_secs;
-	unsigned int hup_count;
+	unsigned int hup_count, usr2_count;
+
+	unsigned int hit_count, miss_count;
 };
 
 char *auth_cache_parse_key(const char *query)
@@ -130,6 +132,7 @@
 {
 	string_t *str;
 	struct cache_node *node;
+	unsigned int total_count;
 
 	*expired_r = FALSE;
 
@@ -140,13 +143,28 @@
 		return NULL;
 	}
 
+	if (cache->usr2_count != lib_signal_usr2_count) {
+		cache->usr2_count = lib_signal_usr2_count;
+
+		total_count = cache->hit_count + cache->miss_count;
+		i_info("Authentication cache hits %u/%u (%u%%)",
+		       cache->hit_count, total_count,
+		       cache->hit_count * 100 / total_count);
+
+		/* reset hit counter */
+		cache->hit_count = cache->miss_count = 0;
+	}
+
 	str = t_str_new(256);
 	var_expand(str, key,
 		   auth_request_get_var_expand_table(request, str_escape));
 
 	node = hash_lookup(cache->hash, str_c(str));
-	if (node == NULL)
+	if (node == NULL) {
+		cache->miss_count++;
 		return NULL;
+	}
+	cache->hit_count++;
 
 	if (node->created < time(NULL) - (time_t)cache->ttl_secs) {
 		/* TTL expired */