81 lines
1.5 KiB
Go
81 lines
1.5 KiB
Go
|
package main
|
||
|
|
||
|
import (
|
||
|
// External
|
||
|
werr "git.gibonuddevalla.se/go/wrappederror"
|
||
|
|
||
|
// Internal
|
||
|
"smon/notification"
|
||
|
|
||
|
// Standard
|
||
|
"database/sql"
|
||
|
"encoding/json"
|
||
|
)
|
||
|
|
||
|
type DbNotificationService struct {
|
||
|
ID int
|
||
|
Service string
|
||
|
Configuration string
|
||
|
Prio int
|
||
|
}
|
||
|
|
||
|
func InitNotificationManager() (err error) { // {{{
|
||
|
var dbServices []DbNotificationService
|
||
|
var row *sql.Row
|
||
|
|
||
|
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
|
||
|
}
|
||
|
|
||
|
notificationManager = 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)
|
||
|
}
|
||
|
notificationManager.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
|
||
|
} // }}}
|