3
0

upd(all): ctx to database connector for ctrl+c

This commit is contained in:
Tit Petric
2019-04-03 13:33:14 +02:00
parent d189899c13
commit 46a0a9fe25
9 changed files with 50 additions and 30 deletions

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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)
}

View File

@@ -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()
}

View File

@@ -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)
}

View File

@@ -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")
}

View File

@@ -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?

View File

@@ -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")
}

View File

@@ -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")
}