Files
gmbase/app/starter/starter.go
T
2026-06-09 22:33:18 +02:00

94 lines
1.6 KiB
Go

/*
* Copyright 2026 Oleg Borodin <onborodin@gmail.com>
*/
package starter
import (
"os"
"path/filepath"
"mbase/app/config"
"mbase/app/server"
"github.com/spf13/cobra"
)
type Starter struct {
//runAsDaemon bool
//port uint32
cmd *cobra.Command
srv *server.Server
conf *config.Config
}
func NewStarter() *Starter {
execName := filepath.Base(os.Args[0])
sta := &Starter{}
cmd := &cobra.Command{
Use: execName,
Short: "\nService",
SilenceUsage: true,
RunE: sta.run,
}
cmd.CompletionOptions.DisableDefaultCmd = true
cmd.Flags().BoolVarP(&sta.conf.AsDaemon, "asDaemon", "D", sta.conf.AsDaemon, "Run service as daemon")
cmd.Flags().Uint32VarP(&sta.conf.Service.Portnum, "port", "P", sta.conf.Service.Portnum, "Service port")
sta.cmd = cmd
return sta
}
func (sta *Starter) GetCmd() *cobra.Command {
return sta.cmd
}
func (sta *Starter) run(cmd *cobra.Command, args []string) error {
var err error
err = sta.configure()
if err != nil {
return err
}
srv, err := server.NewServer(sta.conf)
if err != nil {
return err
}
err = srv.Daemonize()
if err != nil {
return err
}
err = srv.Build()
if err != nil {
return err
}
err = srv.Run()
if err != nil {
return err
}
sta.srv = srv
return err
}
func (sta *Starter) configure() error {
var err error
sta.conf = config.NewConfig()
err = sta.conf.ReadFile()
if err != nil {
return err
}
err = sta.conf.ReadEnv()
if err != nil {
return err
}
err = sta.conf.ReadOpts()
if err != nil {
return err
}
return err
}
func (sta *Starter) Exec() error {
return sta.cmd.Execute()
}