alby-hub/cmd/http/main.go

80 lines
2.1 KiB
Go
Raw Permalink Normal View History

2024-06-17 19:42:09 +07:00
package main
import (
"context"
"fmt"
nethttp "net/http"
"os"
"os/signal"
"syscall"
"time"
2024-07-05 20:32:40 +07:00
"github.com/getAlby/hub/http"
"github.com/getAlby/hub/logger"
"github.com/getAlby/hub/service"
2024-06-17 19:42:09 +07:00
"github.com/labstack/echo/v4"
log "github.com/sirupsen/logrus"
)
func main() {
2024-08-28 17:34:50 +02:00
log.Info("AlbyHub Starting in HTTP mode")
// Create a channel to receive OS signals.
osSignalChannel := make(chan os.Signal, 1)
// Notify the channel on os.Interrupt, syscall.SIGTERM. os.Kill cannot be caught.
2025-07-23 17:00:00 +07:00
signal.Notify(osSignalChannel, os.Interrupt, syscall.SIGTERM, syscall.SIGPIPE)
ctx, cancel := context.WithCancel(context.Background())
var signal os.Signal
go func() {
for {
// wait for exit signal
signal = <-osSignalChannel
logger.Logger.WithField("signal", signal).Info("Received OS signal")
if signal == syscall.SIGPIPE {
logger.Logger.WithField("signal", signal).Warn("Ignoring SIGPIPE signal")
continue
}
cancel()
break
2025-07-23 17:00:00 +07:00
}
}()
svc, err := service.NewService(ctx)
if err != nil {
log.WithError(err).Fatal("Failed to create service")
return
}
2024-06-17 19:42:09 +07:00
e := echo.New()
//register shared routes
httpSvc := http.NewHttpService(svc, svc.GetEventPublisher())
httpSvc.RegisterSharedRoutes(e)
//start Echo server
go func() {
if err := e.Start(fmt.Sprintf(":%v", svc.GetConfig().GetEnv().Port)); err != nil && err != nethttp.ErrServerClosed {
logger.Logger.WithError(err).Error("echo server failed to start")
cancel()
2024-06-17 19:42:09 +07:00
}
}()
2024-06-17 19:42:09 +07:00
//handle graceful shutdown
<-ctx.Done()
logger.Logger.WithField("signal", signal).Info("Context Done")
logger.Logger.Info("Shutting down echo server...")
ctx, cancel = context.WithTimeout(context.Background(), 10*time.Second)
2024-06-17 19:42:09 +07:00
defer cancel()
err = e.Shutdown(ctx)
if err != nil {
logger.Logger.WithError(err).Error("Failed to shutdown echo server")
}
2024-06-17 19:42:09 +07:00
logger.Logger.Info("Echo server exited")
svc.Shutdown()
2024-06-17 19:42:09 +07:00
logger.Logger.Info("Service exited")
logger.Logger.Info("Alby Hub needs to stay online to send and receive transactions. Channels may be closed if your hub stays offline for an extended period of time.")
2024-06-17 19:42:09 +07:00
}