func initRedis(app *App) { if app.config.RedisUrl == "" { return } redisURL, err := url.Parse(app.config.RedisUrl) if err != nil { log.Panic(app.ctx, err) } app.redis = &redis.Pool{ MaxIdle: 3, IdleTimeout: 240 * time.Second, Dial: dialRedis(redisURL), TestOnBorrow: pingRedis, } // test the connection c := app.redis.Get() defer c.Close() _, err = c.Do("PING") if err != nil { log.Panic(app.ctx, err) } }
// Serve starts the horizon system, binding it to a socket, setting up // the shutdown signals and starting the appropriate db-streaming pumps. func (a *App) Serve() { a.web.router.Compile() http.Handle("/", a.web.router) listenStr := fmt.Sprintf(":%d", a.config.Port) listener := bind.Socket(listenStr) log.Infof(a.ctx, "Starting horizon on %s", listener.Addr()) graceful.HandleSignals() bind.Ready() graceful.PreHook(func() { log.Info(a.ctx, "received signal, gracefully stopping") a.Cancel() }) graceful.PostHook(func() { log.Info(a.ctx, "stopped") }) if a.config.Autopump { sse.SetPump(a.ctx, sse.AutoPump) } else { sse.SetPump(a.ctx, db.NewLedgerClosePump(a.ctx, a.historyDb)) } err := graceful.Serve(listener, http.DefaultServeMux) if err != nil { log.Panic(a.ctx, err) } graceful.Wait() }