Diff

plugins/mod_storage_sql.lua @ 10993:b5e7f4d533e2

mod_storage_sql: Measure hits/misses on the item count cache A cache miss can be expensive so having numbers on how often this occurs may be valuable.
author Kim Alvefur <zash@zash.se>
date Thu, 02 Jul 2020 19:03:59 +0200
parent 10925:73e95ecec733
child 11271:41a962b72a6e
line wrap: on
line diff
--- a/plugins/mod_storage_sql.lua	Tue Jun 30 18:31:48 2020 +0200
+++ b/plugins/mod_storage_sql.lua	Thu Jul 02 19:03:59 2020 +0200
@@ -153,6 +153,9 @@
 local archive_item_limit = module:get_option_number("storage_archive_item_limit");
 local archive_item_count_cache = cache.new(module:get_option("storage_archive_item_limit_cache_size", 1000));
 
+local item_count_cache_hit = module:measure("item_count_cache_hit", "rate");
+local item_count_cache_miss = module:measure("item_count_cache_miss", "rate")
+
 -- luacheck: ignore 512 431/user 431/store 431/err
 local map_store = {};
 map_store.__index = map_store;
@@ -286,6 +289,7 @@
 	local cache_key = jid_join(username, host, store);
 	local item_count = archive_item_count_cache:get(cache_key);
 	if not item_count then
+		item_count_cache_miss();
 		local ok, ret = engine:transaction(function()
 			local count_sql = [[
 			SELECT COUNT(*) FROM "prosodyarchive"
@@ -303,6 +307,8 @@
 			return nil, "Failure while checking quota";
 		end
 		archive_item_count_cache:set(cache_key, item_count);
+	else
+		item_count_cache_hit();
 	end
 
 	if archive_item_limit then
@@ -408,6 +414,7 @@
 	local user,store = username,self.store;
 	local cache_key = jid_join(username, host, self.store);
 	local total = archive_item_count_cache:get(cache_key);
+	(total and item_count_cache_hit or item_count_cache_miss)();
 	if total ~= nil and query.limit == 0 and query.start == nil and query.with == nil and query["end"] == nil and query.key == nil then
 		return noop, total;
 	end