Organize backend into product executable and shared Go modules
This commit is contained in:
1 parent
981e84a4b4
commit
f0720ec66b
382 files changed
+1944
-6989
No files matched your search
@@ -0,0 +1,5 @@
|
||||
package server
|
||||
|
||||
import "git.sendico.io/tech/sxchnge/shared/logging"
|
||||
|
||||
type ServerFactoryT = func(logger mlogger.Logger, file string, debug bool) (Application, error)
|
||||
@@ -0,0 +1,40 @@
|
||||
package serverimp
|
||||
|
||||
import (
|
||||
"git.sendico.io/tech/sxchnge/product/app/process"
|
||||
"git.sendico.io/tech/sxchnge/shared/logging"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
type Instance struct {
|
||||
srv server.Application
|
||||
logger mlogger.Logger
|
||||
file string
|
||||
debug bool
|
||||
factory server.ServerFactoryT
|
||||
}
|
||||
|
||||
func (i *Instance) Start() error {
|
||||
var err error
|
||||
if i.srv, err = i.factory(i.logger, i.file, i.debug); err != nil {
|
||||
i.logger.Warn("Failed to create server instance", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
return i.srv.Start()
|
||||
}
|
||||
|
||||
func (i *Instance) Shutdown() {
|
||||
if i.srv != nil {
|
||||
i.srv.Shutdown()
|
||||
}
|
||||
}
|
||||
|
||||
func NewInstance(factory server.ServerFactoryT, logger mlogger.Logger, file string, debug bool) *Instance {
|
||||
return &Instance{
|
||||
srv: nil,
|
||||
logger: logger,
|
||||
file: file,
|
||||
debug: debug,
|
||||
factory: factory,
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,66 @@
|
||||
package serverimp
|
||||
|
||||
import (
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"git.sendico.io/tech/sxchnge/product/app/process"
|
||||
"git.sendico.io/tech/sxchnge/shared/logging"
|
||||
lf "git.sendico.io/tech/sxchnge/shared/logging/factory"
|
||||
"git.sendico.io/tech/sxchnge/shared/version"
|
||||
"github.com/google/uuid"
|
||||
"go.uber.org/zap"
|
||||
)
|
||||
|
||||
var (
|
||||
configFileFlag = flag.String("config.file", "config.yml", "Path to the configuration file.")
|
||||
versionFlag = flag.Bool("version", false, "Show version information.")
|
||||
debugFlag = flag.Bool("debug", false, "Show debug information.")
|
||||
)
|
||||
|
||||
func prepareLogger() mlogger.Logger {
|
||||
flag.Parse()
|
||||
|
||||
return lf.NewLogger(*debugFlag)
|
||||
}
|
||||
|
||||
func RunServer(rootLoggerName string, av version.Printer, factory server.ServerFactoryT) error {
|
||||
logger := mlogger.Named(prepareLogger(), rootLoggerName)
|
||||
logger = logger.With(zap.String("instance_id", uuid.NewString()))
|
||||
defer func() {
|
||||
_ = logger.Sync()
|
||||
}()
|
||||
|
||||
// Show version information
|
||||
if *versionFlag {
|
||||
if _, err := fmt.Fprintln(os.Stdout, av.Print()); err != nil {
|
||||
logger.Warn("Failed to print version", zap.Error(err))
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// Create server instance
|
||||
instance := NewInstance(factory, logger, *configFileFlag, *debugFlag)
|
||||
|
||||
// Interrupt handler
|
||||
go func() {
|
||||
c := make(chan os.Signal, 1)
|
||||
signal.Notify(c, syscall.SIGINT, syscall.SIGTERM)
|
||||
sig := <-c
|
||||
logger.Info("Received sigint/segterm signal, shutting down", zap.String("signal", sig.String()))
|
||||
instance.Shutdown()
|
||||
}()
|
||||
|
||||
// Start server
|
||||
logger.Info(fmt.Sprintf("Starting %s", av.Program()), zap.String("version", av.Info()))
|
||||
logger.Info("Build context", zap.String("context", av.Context()))
|
||||
if err := instance.Start(); err != nil {
|
||||
logger.Error("Failed to start service", zap.Error(err))
|
||||
return err
|
||||
}
|
||||
logger.Info("Server stopped")
|
||||
return nil
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
package server
|
||||
|
||||
import (
|
||||
sd "git.sendico.io/tech/sxchnge/product/app/process"
|
||||
serverimp "git.sendico.io/tech/sxchnge/product/app/process/internal"
|
||||
"git.sendico.io/tech/sxchnge/shared/version"
|
||||
)
|
||||
|
||||
func RunServer(rootLoggerName string, av version.Printer, factory sd.ServerFactoryT) error {
|
||||
return serverimp.RunServer(rootLoggerName, av, factory)
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
package server
|
||||
|
||||
// Typical service interface
|
||||
type Application interface {
|
||||
Shutdown()
|
||||
Start() error
|
||||
}
|
||||
Reference in new issue
Block a user