add graceful shutdown, add reconnect on connection loss
This commit is contained in:
@@ -6,7 +6,6 @@ import (
|
||||
"flag"
|
||||
"log"
|
||||
"log/slog"
|
||||
"net/http"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
@@ -28,6 +27,7 @@ const (
|
||||
type config struct {
|
||||
mode service_mode
|
||||
port string
|
||||
env string
|
||||
|
||||
db struct {
|
||||
dsn string
|
||||
@@ -72,6 +72,7 @@ func openDB(cfg config) (*sql.DB, error) {
|
||||
// TODO: change default values
|
||||
func (app *application) parseFlags() *requests.FoundryHttpRequest {
|
||||
flag.StringVar(&app.cfg.port, "port", ":9090", "Service port")
|
||||
flag.StringVar(&app.cfg.env, "env", "development", "Enivornment (development|staging|production)")
|
||||
|
||||
flag.StringVar(&app.cfg.db.dsn, "db-dsn", "file:db/default.db?cache=shared", "PostgreSQL DSN")
|
||||
flag.IntVar(&app.cfg.db.maxOpenConns, "db-max-open-conns", 25, "PostgreSQL max open connections")
|
||||
@@ -91,7 +92,6 @@ func (app *application) parseFlags() *requests.FoundryHttpRequest {
|
||||
flag.Parse()
|
||||
|
||||
app.cfg.mode = service_mode(mode)
|
||||
// app.foundryApp.SetConfig(&foundryConfig)
|
||||
|
||||
logLevel, ok := StringToLogLevel[logLevelStr]
|
||||
if !ok {
|
||||
@@ -105,19 +105,7 @@ func (app *application) parseFlags() *requests.FoundryHttpRequest {
|
||||
return &foundryHttpData
|
||||
}
|
||||
|
||||
// TODO: Handle application exit if wrong data
|
||||
func (app *application) StartListenFoundry() {
|
||||
var err error
|
||||
|
||||
for {
|
||||
err = app.foundryApp.ConnectToWebSocket()
|
||||
if err != nil {
|
||||
app.slogger.Error("Error raised", "err", err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// TODO: Handle grace application exit
|
||||
func main() {
|
||||
app := application{foundryApp: &foundry.FoundryApi{}}
|
||||
|
||||
@@ -133,29 +121,8 @@ func main() {
|
||||
defer db.Close()
|
||||
app.slogger.Info("Database connection pool established")
|
||||
|
||||
app.foundryApp.Transport = transport.NewFoundryTransport(db, app.slogger, foundryHttpData)
|
||||
go app.StartListenFoundry()
|
||||
app.foundryApp.SetTransport(transport.NewFoundryTransport(db, app.slogger, foundryHttpData))
|
||||
go app.foundryApp.StartListenFoundry()
|
||||
|
||||
errLog := slog.NewLogLogger(app.slogger.Handler(), slog.LevelError)
|
||||
server := &http.Server{
|
||||
Addr: app.cfg.port,
|
||||
Handler: app.routes(),
|
||||
ErrorLog: errLog,
|
||||
// TLSConfig: tlsConfig,
|
||||
IdleTimeout: time.Minute,
|
||||
ReadTimeout: 5 * time.Second,
|
||||
WriteTimeout: 10 * time.Second,
|
||||
}
|
||||
|
||||
switch app.cfg.mode {
|
||||
case API_MODE:
|
||||
app.slogger.Info("Server is started", "port", app.cfg.port)
|
||||
server.ListenAndServe()
|
||||
case DISCORD_BOT_MODE:
|
||||
app.slogger.Warn("TODO: implement this mode")
|
||||
case TG_BOT_MODE:
|
||||
app.slogger.Warn("TODO: implement this mode")
|
||||
default:
|
||||
app.slogger.Error("Wrong Mode. Should be one of: 'api', 'discord', 'tg'", "mode", app.cfg.mode)
|
||||
}
|
||||
app.serve()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user