purgeOldCacheEntries

Walks the channel-user cache and removes entries older than a certain age. Additionally removes channels with no users, and nicknames from the nickname account map that are not found in any channel.

version(WithPersistenceService)
private
void
purgeOldCacheEntries

Parameters

service PersistenceService

The current PersistenceService.

cacheEntryMaxAgeSeconds long

The maximum age of a cache entry in seconds; older than which will be removed.

Examples

import std.datetime.systime : Clock;

immutable nowInUnix = Clock.currTime.toUnixTime();

IRCPluginState state;
auto service = new PersistenceService(state);

IRCUser user1;
user1.nickname = "foo";
user1.account = "foo";
user1.updated = nowInUnix;

IRCUser user2;
user2.nickname = "bar";
user2.account = "bar";
user2.updated = nowInUnix - 3600;

IRCUser user3;
user3.nickname = "baz";
user3.account = "BAZ";
user3.updated = nowInUnix - 6*3600;

service.channelUserCache.aaOf["#channel1"]["foo"] = user1;
service.channelUserCache.aaOf["#channel1"]["bar"] = user2;
service.channelUserCache.aaOf["#channel1"]["baz"] = user3;
service.channelUserCache.aaOf["#channel2"]["foo"] = user1;
service.channelUserCache.aaOf["#channel2"]["bar"] = user2;
service.channelUserCache.aaOf["#channel3"]["baz"] = user3;

service.nicknameAccountMap["foo"] = "foo";
service.nicknameAccountMap["bar"] = "bar";
service.nicknameAccountMap["baz"] = "BAZ";

assert(service.channelUserCache["#channel1"].length == 3);
assert(service.channelUserCache["#channel2"].length == 2);
assert(service.channelUserCache["#channel3"].length == 1);
assert(service.nicknameAccountMap.length == 3);

service.purgeOldCacheEntries(5*3600);

assert("foo" in service.channelUserCache["#channel1"]);
assert("bar" in service.channelUserCache["#channel1"]);
assert("baz" !in service.channelUserCache["#channel1"]);
assert("foo" in service.channelUserCache["#channel2"]);
assert("bar" in service.channelUserCache["#channel2"]);
assert("#channel3" !in service.channelUserCache);

assert("foo" in service.nicknameAccountMap);
assert("bar" in service.nicknameAccountMap);
assert("baz" !in service.nicknameAccountMap);