mirror of
https://github.com/renorris/openfsd
synced 2026-03-22 23:05:36 +08:00
75 lines
1.2 KiB
Go
75 lines
1.2 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"database/sql"
|
|
"fmt"
|
|
"github.com/renorris/openfsd/db"
|
|
"log/slog"
|
|
"net"
|
|
)
|
|
|
|
type Server struct {
|
|
cfg *ServerConfig
|
|
dbRepo *db.Repositories
|
|
}
|
|
|
|
func NewDefaultServer(ctx context.Context) (server *Server, err error) {
|
|
cfg, err := loadServerConfig(ctx)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
slog.Info(fmt.Sprintf("using %s", cfg.DatabaseDriver))
|
|
|
|
slog.Debug("connecting to SQL")
|
|
sqlDb, err := sql.Open(cfg.DatabaseDriver, cfg.DatabaseSourceName)
|
|
if err != nil {
|
|
return
|
|
}
|
|
slog.Debug("SQL OK")
|
|
|
|
sqlDb.SetMaxOpenConns(cfg.DatabaseMaxConns)
|
|
|
|
dbRepo, err := db.NewRepositories(sqlDb)
|
|
if err != nil {
|
|
return
|
|
}
|
|
|
|
if server, err = NewServer(cfg, dbRepo); err != nil {
|
|
return
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func NewServer(cfg *ServerConfig, dbRepo *db.Repositories) (server *Server, err error) {
|
|
server = &Server{
|
|
cfg: cfg,
|
|
dbRepo: dbRepo,
|
|
}
|
|
|
|
return
|
|
}
|
|
|
|
func (s *Server) Run(ctx context.Context) (err error) {
|
|
e := s.setupRoutes()
|
|
go s.runDatafeedWorker(ctx)
|
|
|
|
listener, err := net.Listen("tcp", s.cfg.ListenAddr)
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer listener.Close()
|
|
|
|
go func() {
|
|
if err := e.RunListener(listener); err != nil {
|
|
slog.Error(err.Error())
|
|
}
|
|
}()
|
|
|
|
<-ctx.Done()
|
|
|
|
return
|
|
}
|