smon/notification_manager.go
2024-05-05 10:12:21 +02:00

80 lines
1.5 KiB
Go

package main
import (
// External
werr "git.gibonuddevalla.se/go/wrappederror"
// Internal
"smon/notification"
// Standard
"encoding/json"
)
type DbNotificationService struct {
ID int
Service string
Configuration string
Prio int
}
func InitNotificationManager() (nm notification.Manager, err error) { // {{{
var dbServices []DbNotificationService
row := service.Db.Conn.QueryRow(`
WITH services AS (
SELECT
id,
prio,
service,
configuration::varchar
FROM notification n
ORDER BY
prio ASC
)
SELECT COALESCE(jsonb_agg(s.*), '[]')
FROM services s
`,
)
var dbData []byte
err = row.Scan(&dbData)
if err != nil {
err = werr.Wrap(err).WithCode("002-0006")
return
}
err = json.Unmarshal(dbData, &dbServices)
if err != nil {
err = werr.Wrap(err).WithCode("002-0007")
return
}
nm = notification.NewManager(logger)
var service notification.Service
for _, dbService := range dbServices {
service, err = notification.ServiceFactory(
dbService.Service,
[]byte(dbService.Configuration),
dbService.Prio,
"blah",
//config.Application.NotificationBaseURL,
logger,
)
if err != nil {
err = werr.Wrap(err).WithData(dbService.Service)
}
nm.AddService(service)
}
return
} // }}}
func AcknowledgeNotification(uuid string) (err error) { // {{{
/*
_, err = service.Db.Conn.Exec(`UPDATE schedule SET acknowledged=true WHERE schedule_uuid=$1`, uuid)
if err != nil {
err = werr.Wrap(err).WithData(uuid)
}
*/
return
} // }}}