Improve memory efficiency of noticesToBeSent by mapping pointers instead of WidNotice structs

This commit is contained in:
ChaoticByte 2025-06-12 17:23:08 +02:00
parent 295ceec3de
commit 9b00959fdb
No known key found for this signature in database
4 changed files with 8 additions and 7 deletions

View file

@ -49,7 +49,7 @@ type SmtpSettings struct {
Password string `json:"password"` Password string `json:"password"`
} }
func sendNotices(recipient string, notices []WidNotice, template MailTemplate, auth smtp.Auth, smtpConfig SmtpSettings, cache *map[string][]byte) error { func sendNotices(recipient string, notices []*WidNotice, template MailTemplate, auth smtp.Auth, smtpConfig SmtpSettings, cache *map[string][]byte) error {
logger.debug("Generating and sending mails for recipient " + recipient + " ...") logger.debug("Generating and sending mails for recipient " + recipient + " ...")
cacheHits := 0 cacheHits := 0
cacheMisses := 0 cacheMisses := 0

View file

@ -121,16 +121,17 @@ func main() {
if len(newNotices) > 0 { if len(newNotices) > 0 {
logger.info("Sending email notifications ...") logger.info("Sending email notifications ...")
// mail recipient : pointer to slice of wid notices to be sent // mail recipient : pointer to slice of wid notices to be sent
noticesToBeSent := map[string][]WidNotice{} noticesToBeSent := map[string][]*WidNotice{}
recipientsNotified := 0 recipientsNotified := 0
var err error var err error
for _, l := range *config.Lists { for _, l := range *config.Lists {
// Filter notices for this list // Filter notices for this list
for _, f := range l.Filter { for _, f := range l.Filter {
for _, n := range f.filter(newNotices) { for _, n := range f.filter(newNotices) {
np := &n
for _, r := range l.Recipients { for _, r := range l.Recipients {
if !noticeSliceContains(noticesToBeSent[r], n) { if !noticeSliceContains(noticesToBeSent[r], np) {
noticesToBeSent[r] = append(noticesToBeSent[r], n) noticesToBeSent[r] = append(noticesToBeSent[r], np)
} }
} }
} }
@ -138,7 +139,7 @@ func main() {
} }
for r, notices := range noticesToBeSent { for r, notices := range noticesToBeSent {
// sort by publish date // sort by publish date
slices.SortFunc(notices, func(a WidNotice, b WidNotice) int { slices.SortFunc(notices, func(a *WidNotice, b *WidNotice) int {
if a.Published == b.Published { if a.Published == b.Published {
return 0 return 0
} else if a.Published.After(b.Published) { } else if a.Published.After(b.Published) {

View file

@ -25,7 +25,7 @@ type WidNotice struct {
PortalUrl string PortalUrl string
} }
func noticeSliceContains(notices []WidNotice, notice WidNotice) bool { func noticeSliceContains(notices []*WidNotice, notice *WidNotice) bool {
for _, x := range notices { for _, x := range notices {
if x.Uuid == notice.Uuid { if x.Uuid == notice.Uuid {
return true return true

View file

@ -33,7 +33,7 @@ Sent by WidNotifier {{ .WidNotifierVersion }}
` `
type TemplateData struct { type TemplateData struct {
WidNotice *WidNotice
WidNotifierVersion string WidNotifierVersion string
} }