From 5a5a649cba7a0e452a069de64d44a4a15ad6172e Mon Sep 17 00:00:00 2001 From: Aine Date: Mon, 29 Aug 2022 15:28:37 +0300 Subject: [PATCH] add cache --- bot/bot.go | 3 +++ bot/settings.go | 8 ++++++++ go.mod | 1 + go.sum | 2 ++ 4 files changed, 14 insertions(+) diff --git a/bot/bot.go b/bot/bot.go index 7c6128d..c36373d 100644 --- a/bot/bot.go +++ b/bot/bot.go @@ -6,6 +6,7 @@ import ( "regexp" "sync" + "git.sr.ht/~xn/cache/v2" "github.com/getsentry/sentry-go" "gitlab.com/etke.cc/go/logger" "gitlab.com/etke.cc/linkpearl" @@ -24,6 +25,7 @@ type Bot struct { allowedAdmins []*regexp.Regexp commands commandList rooms sync.Map + cfg cache.Cache[settings] log *logger.Logger lp *linkpearl.Linkpearl mu map[id.RoomID]*sync.Mutex @@ -47,6 +49,7 @@ func New( allowedUsers: allowedUsers, allowedAdmins: allowedAdmins, rooms: sync.Map{}, + cfg: cache.NewLRU[settings](1000), log: log, lp: lp, mu: map[id.RoomID]*sync.Mutex{}, diff --git a/bot/settings.go b/bot/settings.go index 4efd21f..74886c3 100644 --- a/bot/settings.go +++ b/bot/settings.go @@ -81,6 +81,11 @@ func (b *Bot) migrateSettings(roomID id.RoomID) { } func (b *Bot) getSettings(roomID id.RoomID) (settings, error) { + cfg := b.cfg.Get(roomID.String()) + if cfg != nil { + return cfg, nil + } + config := settings{} err := b.lp.GetClient().GetRoomAccountData(roomID, settingskey, &config) if err != nil { @@ -90,11 +95,14 @@ func (b *Bot) getSettings(roomID id.RoomID) (settings, error) { // In such cases, just return a default (empty) settings object. err = nil } + } else { + b.cfg.Set(roomID.String(), config) } return config, utils.UnwrapError(err) } func (b *Bot) setSettings(roomID id.RoomID, cfg settings) error { + b.cfg.Set(roomID.String(), cfg) return utils.UnwrapError(b.lp.GetClient().SetRoomAccountData(roomID, settingskey, cfg)) } diff --git a/go.mod b/go.mod index f170745..a69b4b8 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module gitlab.com/etke.cc/postmoogle go 1.18 require ( + git.sr.ht/~xn/cache/v2 v2.0.0 github.com/emersion/go-smtp v0.15.0 github.com/getsentry/sentry-go v0.13.0 github.com/jhillyerd/enmime v0.10.0 diff --git a/go.sum b/go.sum index 316dd09..aeb359c 100644 --- a/go.sum +++ b/go.sum @@ -1,3 +1,5 @@ +git.sr.ht/~xn/cache/v2 v2.0.0 h1:aYzwGDyVIzjCl2yqcxZjprnu++Q3BmUQeK2agqvcQt8= +git.sr.ht/~xn/cache/v2 v2.0.0/go.mod h1:HIPSMiDudQ483tRDup586e0YZdwMySIZFWXMPwYMuV8= github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60= github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a h1:MISbI8sU/PSK/ztvmWKFcI7UGb5/HQT7B+i3a2myKgI= github.com/cention-sany/utf7 v0.0.0-20170124080048-26cad61bd60a/go.mod h1:2GxOXOlEPAMFPfp014mK1SWq8G8BN8o7/dfYqJrVGn8=