mirror of
https://github.com/mentos1386/zdravko.git
synced 2024-11-26 17:27:59 +00:00
Tine
bb1ba5ed58
KeyValue store will be used by Incidents, so that the functions can decide based on history not just on the event that triggered them.
75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package server
|
|
|
|
import (
|
|
"context"
|
|
"log/slog"
|
|
|
|
"code.tjo.space/mentos1386/zdravko/database"
|
|
"code.tjo.space/mentos1386/zdravko/internal/config"
|
|
"code.tjo.space/mentos1386/zdravko/internal/kv"
|
|
"code.tjo.space/mentos1386/zdravko/internal/temporal"
|
|
"code.tjo.space/mentos1386/zdravko/web/templates"
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/labstack/echo/v4/middleware"
|
|
"github.com/pkg/errors"
|
|
)
|
|
|
|
type Server struct {
|
|
echo *echo.Echo
|
|
cfg *config.ServerConfig
|
|
logger *slog.Logger
|
|
|
|
worker *Worker
|
|
}
|
|
|
|
func NewServer(cfg *config.ServerConfig) (*Server, error) {
|
|
return &Server{
|
|
cfg: cfg,
|
|
echo: echo.New(),
|
|
logger: slog.Default().WithGroup("server"),
|
|
}, nil
|
|
}
|
|
|
|
func (s *Server) Name() string {
|
|
return "HTTP WEB and API Server"
|
|
}
|
|
|
|
func (s *Server) Start() error {
|
|
sqliteDb, err := database.ConnectToDatabase(s.logger, s.cfg.SqliteDatabasePath)
|
|
if err != nil {
|
|
return errors.Wrap(err, "failed to connect to sqlite")
|
|
}
|
|
|
|
temporalClient, err := temporal.ConnectServerToTemporal(s.logger, s.cfg)
|
|
if err != nil {
|
|
return errors.Wrap(err, "failed to connect to temporal")
|
|
}
|
|
|
|
kvStore, err := kv.NewBadgerKeyValueStore(s.cfg.KeyValueDatabasePath)
|
|
if err != nil {
|
|
return errors.Wrap(err, "failed to open kv store")
|
|
}
|
|
|
|
s.worker = NewWorker(temporalClient, s.cfg)
|
|
|
|
s.echo.Renderer = templates.NewTemplates()
|
|
s.echo.Use(middleware.Logger())
|
|
s.echo.Use(middleware.Recover())
|
|
s.echo.Use(middleware.Secure())
|
|
Routes(s.echo, sqliteDb, kvStore, temporalClient, s.cfg, s.logger)
|
|
|
|
go func() {
|
|
if err := s.worker.Start(); err != nil {
|
|
panic(err)
|
|
}
|
|
}()
|
|
|
|
return s.echo.Start(":" + s.cfg.Port)
|
|
}
|
|
|
|
func (s *Server) Stop() error {
|
|
s.worker.Stop()
|
|
|
|
ctx := context.Background()
|
|
return s.echo.Shutdown(ctx)
|
|
}
|