Commit 1a237256 authored by Ethen Pociask's avatar Ethen Pociask

[indexer.risk_mitigations] [indexer] Added Write Timeouts & Closure Handling

parent bc602c07
...@@ -6,6 +6,7 @@ import ( ...@@ -6,6 +6,7 @@ import (
"net/http" "net/http"
"runtime/debug" "runtime/debug"
"sync" "sync"
"time"
"github.com/ethereum-optimism/optimism/indexer/api/routes" "github.com/ethereum-optimism/optimism/indexer/api/routes"
"github.com/ethereum-optimism/optimism/indexer/config" "github.com/ethereum-optimism/optimism/indexer/config"
...@@ -46,6 +47,7 @@ func NewApi(logger log.Logger, bv database.BridgeTransfersView, serverConfig con ...@@ -46,6 +47,7 @@ func NewApi(logger log.Logger, bv database.BridgeTransfersView, serverConfig con
promRecorder := metrics.NewPromHTTPRecorder(mr, MetricsNamespace) promRecorder := metrics.NewPromHTTPRecorder(mr, MetricsNamespace)
apiRouter.Use(chiMetricsMiddleware(promRecorder)) apiRouter.Use(chiMetricsMiddleware(promRecorder))
apiRouter.Use(middleware.Timeout(time.Duration(serverConfig.WriteTimeout) * time.Second))
apiRouter.Use(middleware.Recoverer) apiRouter.Use(middleware.Recoverer)
apiRouter.Use(middleware.Heartbeat("/healthz")) apiRouter.Use(middleware.Heartbeat("/healthz"))
......
...@@ -36,7 +36,12 @@ func runIndexer(ctx *cli.Context) error { ...@@ -36,7 +36,12 @@ func runIndexer(ctx *cli.Context) error {
log.Error("failed to connect to database", "err", err) log.Error("failed to connect to database", "err", err)
return err return err
} }
defer db.Close() defer func() {
err := db.Close()
if err != nil {
log.Error("failed to close database", "err", err)
}
}()
indexer, err := indexer.NewIndexer(log, db, cfg.Chain, cfg.RPCs, cfg.HTTPServer, cfg.MetricsServer) indexer, err := indexer.NewIndexer(log, db, cfg.Chain, cfg.RPCs, cfg.HTTPServer, cfg.MetricsServer)
if err != nil { if err != nil {
...@@ -60,7 +65,12 @@ func runApi(ctx *cli.Context) error { ...@@ -60,7 +65,12 @@ func runApi(ctx *cli.Context) error {
log.Error("failed to connect to database", "err", err) log.Error("failed to connect to database", "err", err)
return err return err
} }
defer db.Close() defer func() {
err := db.Close()
if err != nil {
log.Error("failed to close database", "err", err)
}
}()
api := api.NewApi(log, db.BridgeTransfers, cfg.HTTPServer, cfg.MetricsServer) api := api.NewApi(log, db.BridgeTransfers, cfg.HTTPServer, cfg.MetricsServer)
return api.Start(ctx.Context) return api.Start(ctx.Context)
......
...@@ -96,10 +96,11 @@ type DBConfig struct { ...@@ -96,10 +96,11 @@ type DBConfig struct {
Password string `toml:"password"` Password string `toml:"password"`
} }
// Configures the a server // Configures the server
type ServerConfig struct { type ServerConfig struct {
Host string `toml:"host"` Host string `toml:"host"`
Port int `toml:"port"` Port int `toml:"port"`
WriteTimeout int `toml:"timeout"`
} }
// LoadConfig loads the `indexer.toml` config file from a given path // LoadConfig loads the `indexer.toml` config file from a given path
......
...@@ -35,6 +35,7 @@ name = "$INDEXER_DB_NAME" ...@@ -35,6 +35,7 @@ name = "$INDEXER_DB_NAME"
[http] [http]
host = "127.0.0.1" host = "127.0.0.1"
port = 8080 port = 8080
timeout = 10
[metrics] [metrics]
host = "127.0.0.1" host = "127.0.0.1"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment