upd(all): ctx to database connector for ctrl+c
This commit is contained in:
@@ -33,10 +33,10 @@ func main() {
|
||||
|
||||
flag.Parse()
|
||||
|
||||
if err := system.Init(); err != nil {
|
||||
if err := system.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing: %+v", err)
|
||||
}
|
||||
if err := crm.Init(); err != nil {
|
||||
if err := crm.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing: %+v", err)
|
||||
}
|
||||
|
||||
|
||||
@@ -75,13 +75,13 @@ func main() {
|
||||
flag.PrintDefaults()
|
||||
default:
|
||||
// Initialize configuration of our services
|
||||
if err := system.Init(); err != nil {
|
||||
if err := system.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing system: %+v", err)
|
||||
}
|
||||
if err := crm.Init(); err != nil {
|
||||
if err := crm.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing crm: %+v", err)
|
||||
}
|
||||
if err := messaging.Init(); err != nil {
|
||||
if err := messaging.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing messaging: %+v", err)
|
||||
}
|
||||
|
||||
|
||||
@@ -33,10 +33,10 @@ func main() {
|
||||
|
||||
flag.Parse()
|
||||
|
||||
if err := system.Init(); err != nil {
|
||||
if err := system.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing: %+v", err)
|
||||
}
|
||||
if err := messaging.Init(); err != nil {
|
||||
if err := messaging.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing: %+v", err)
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,9 @@ import (
|
||||
"log"
|
||||
"os"
|
||||
|
||||
context "github.com/SentimensRG/ctx"
|
||||
"github.com/SentimensRG/ctx/sigctx"
|
||||
|
||||
"github.com/crusttech/crust/internal/auth"
|
||||
system "github.com/crusttech/crust/system"
|
||||
)
|
||||
@@ -15,7 +18,7 @@ func main() {
|
||||
|
||||
flags("system", system.Flags, auth.Flags)
|
||||
|
||||
system.Init()
|
||||
system.Init(context.AsContext(sigctx.New()))
|
||||
|
||||
setupCobra()
|
||||
}
|
||||
|
||||
@@ -31,7 +31,7 @@ func main() {
|
||||
|
||||
flag.Parse()
|
||||
|
||||
if err := system.Init(); err != nil {
|
||||
if err := system.Init(ctx); err != nil {
|
||||
log.Fatalf("Error initializing: %+v", err)
|
||||
}
|
||||
|
||||
|
||||
10
crm/start.go
10
crm/start.go
@@ -24,7 +24,7 @@ var (
|
||||
jwtEncoder auth.TokenEncoder
|
||||
)
|
||||
|
||||
func Init() error {
|
||||
func Init(ctx context.Context) error {
|
||||
// validate configuration
|
||||
if err := flags.Validate(); err != nil {
|
||||
return err
|
||||
@@ -40,7 +40,9 @@ func Init() error {
|
||||
|
||||
mail.SetupDialer(flags.smtp)
|
||||
|
||||
InitDatabase()
|
||||
if err := InitDatabase(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// configure resputil options
|
||||
resputil.SetConfig(resputil.Options{
|
||||
@@ -57,9 +59,9 @@ func Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func InitDatabase() error {
|
||||
func InitDatabase(ctx context.Context) error {
|
||||
// start/configure database connection
|
||||
db, err := db.TryToConnect("crm", flags.db.DSN, flags.db.Profiler)
|
||||
db, err := db.TryToConnect(ctx, "crm", flags.db.DSN, flags.db.Profiler)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not connect to database")
|
||||
}
|
||||
|
||||
@@ -1,25 +1,36 @@
|
||||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"time"
|
||||
|
||||
"github.com/pkg/errors"
|
||||
"github.com/titpetric/factory"
|
||||
)
|
||||
|
||||
func TryToConnect(name, dsn, profiler string) (db *factory.DB, err error) {
|
||||
func TryToConnect(ctx context.Context, name, dsn, profiler string) (db *factory.DB, err error) {
|
||||
factory.Database.Add(name, dsn)
|
||||
var try = 0
|
||||
|
||||
connect:
|
||||
try++
|
||||
db, err = factory.Database.Get(name)
|
||||
timeout := time.After(time.Minute)
|
||||
delay := 5 * time.Second
|
||||
|
||||
if err != nil {
|
||||
delay := time.Second * 5
|
||||
log.Printf("Failed to connect, try %d, error: %v, retry in %.0fs", try, err, delay.Seconds())
|
||||
time.Sleep(delay)
|
||||
goto connect
|
||||
for {
|
||||
select {
|
||||
case <-ctx.Done():
|
||||
return nil, errors.New("cancelled")
|
||||
case <-timeout:
|
||||
return nil, errors.New("connection timeout")
|
||||
case <-time.After(delay):
|
||||
try++
|
||||
db, err = factory.Database.Get(name)
|
||||
if err != nil {
|
||||
log.Printf("Failed to connect, try %d, error: %v, retry in %.0fs", try, err, delay.Seconds())
|
||||
continue
|
||||
}
|
||||
}
|
||||
break
|
||||
}
|
||||
|
||||
// @todo: profiling as an external service?
|
||||
|
||||
@@ -24,7 +24,7 @@ var (
|
||||
jwtEncoder auth.TokenEncoder
|
||||
)
|
||||
|
||||
func Init() error {
|
||||
func Init(ctx context.Context) error {
|
||||
// validate configuration
|
||||
if err := flags.Validate(); err != nil {
|
||||
return err
|
||||
@@ -40,7 +40,9 @@ func Init() error {
|
||||
|
||||
mail.SetupDialer(flags.smtp)
|
||||
|
||||
InitDatabase()
|
||||
if err := InitDatabase(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// configure resputil options
|
||||
resputil.SetConfig(resputil.Options{
|
||||
@@ -57,9 +59,9 @@ func Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func InitDatabase() error {
|
||||
func InitDatabase(ctx context.Context) error {
|
||||
// start/configure database connection
|
||||
db, err := db.TryToConnect("messaging", flags.db.DSN, flags.db.Profiler)
|
||||
db, err := db.TryToConnect(ctx, "messaging", flags.db.DSN, flags.db.Profiler)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not connect to database")
|
||||
}
|
||||
|
||||
@@ -24,7 +24,7 @@ var (
|
||||
jwtEncoder auth.TokenEncoder
|
||||
)
|
||||
|
||||
func Init() error {
|
||||
func Init(ctx context.Context) error {
|
||||
// validate configuration
|
||||
if err := flags.Validate(); err != nil {
|
||||
return err
|
||||
@@ -40,7 +40,9 @@ func Init() error {
|
||||
|
||||
mail.SetupDialer(flags.smtp)
|
||||
|
||||
InitDatabase()
|
||||
if err := InitDatabase(ctx); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
// configure resputil options
|
||||
resputil.SetConfig(resputil.Options{
|
||||
@@ -57,9 +59,9 @@ func Init() error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func InitDatabase() error {
|
||||
func InitDatabase(ctx context.Context) error {
|
||||
// start/configure database connection
|
||||
db, err := db.TryToConnect("system", flags.db.DSN, flags.db.Profiler)
|
||||
db, err := db.TryToConnect(ctx, "system", flags.db.DSN, flags.db.Profiler)
|
||||
if err != nil {
|
||||
return errors.Wrap(err, "could not connect to database")
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user