89 lines
1.5 KiB
Go
89 lines
1.5 KiB
Go
|
package logic
|
||
|
|
||
|
import (
|
||
|
scn "blackforestbytes.com/simplecloudnotifier"
|
||
|
"blackforestbytes.com/simplecloudnotifier/db"
|
||
|
logsdb "blackforestbytes.com/simplecloudnotifier/db/impl/logs"
|
||
|
primarydb "blackforestbytes.com/simplecloudnotifier/db/impl/primary"
|
||
|
requestsdb "blackforestbytes.com/simplecloudnotifier/db/impl/requests"
|
||
|
"context"
|
||
|
)
|
||
|
|
||
|
type DBPool struct {
|
||
|
Primary *primarydb.Database
|
||
|
Requests *requestsdb.Database
|
||
|
Logs *logsdb.Database
|
||
|
}
|
||
|
|
||
|
func NewDBPool(conf scn.Config) (*DBPool, error) {
|
||
|
|
||
|
dbprimary, err := primarydb.NewPrimaryDatabase(conf)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
dbrequests, err := requestsdb.NewRequestsDatabase(conf)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
dblogs, err := logsdb.NewLogsDatabase(conf)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return &DBPool{
|
||
|
Primary: dbprimary,
|
||
|
Requests: dbrequests,
|
||
|
Logs: dblogs,
|
||
|
}, nil
|
||
|
}
|
||
|
|
||
|
func (p DBPool) List() []db.DatabaseImpl {
|
||
|
return []db.DatabaseImpl{
|
||
|
p.Primary,
|
||
|
p.Requests,
|
||
|
p.Logs,
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (p DBPool) Stop(ctx context.Context) error {
|
||
|
|
||
|
var err error = nil
|
||
|
|
||
|
for _, subdb := range p.List() {
|
||
|
err2 := subdb.Stop(ctx)
|
||
|
if err2 != nil && err == nil {
|
||
|
err = err2
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (p DBPool) Migrate(ctx context.Context) error {
|
||
|
for _, subdb := range p.List() {
|
||
|
err := subdb.Migrate(ctx)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
func (p DBPool) Ping(ctx context.Context) error {
|
||
|
for _, subdb := range p.List() {
|
||
|
err := subdb.Ping(ctx)
|
||
|
if err != nil {
|
||
|
return err
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return nil
|
||
|
}
|