Added notification manager
This commit is contained in:
parent
317c233255
commit
49af9dc33c
6 changed files with 318 additions and 51 deletions
61
notification/pkg.go
Normal file
61
notification/pkg.go
Normal file
|
|
@ -0,0 +1,61 @@
|
|||
package notification
|
||||
|
||||
import (
|
||||
// External
|
||||
werr "git.gibonuddevalla.se/go/wrappederror"
|
||||
|
||||
// Standard
|
||||
"log/slog"
|
||||
"slices"
|
||||
)
|
||||
|
||||
type Service interface {
|
||||
SetLogger(*slog.Logger)
|
||||
GetPrio() int
|
||||
GetType() string
|
||||
Send(string, []byte) error
|
||||
}
|
||||
|
||||
type Manager struct {
|
||||
services []Service
|
||||
logger *slog.Logger
|
||||
}
|
||||
|
||||
func NewManager(logger *slog.Logger) (nm Manager) {
|
||||
nm.services = []Service{}
|
||||
nm.logger = logger
|
||||
return
|
||||
}
|
||||
|
||||
func (nm *Manager) AddService(service Service) {
|
||||
nm.services = append(nm.services, service)
|
||||
slices.SortFunc(nm.services, func(a, b Service) int {
|
||||
if a.GetPrio() < b.GetPrio() {
|
||||
return -1
|
||||
}
|
||||
if a.GetPrio() > b.GetPrio() {
|
||||
return 1
|
||||
}
|
||||
return 0
|
||||
})
|
||||
}
|
||||
|
||||
func (nm *Manager) Send(uuid string, msg []byte) (err error) {
|
||||
for _, service := range nm.services {
|
||||
nm.logger.Info("notification", "service", service.GetType(), "prio", service.GetPrio())
|
||||
if err = service.Send(uuid, msg); err == nil {
|
||||
break
|
||||
} else {
|
||||
data := struct {
|
||||
UUID string
|
||||
Msg []byte
|
||||
}{
|
||||
uuid,
|
||||
msg,
|
||||
}
|
||||
werr.Wrap(err).WithData(data).Log()
|
||||
}
|
||||
}
|
||||
|
||||
return
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue