From f61b9b87e267541ebada5684924503bf3e54f52a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9E=D0=BB=D0=B5=D0=B3=20=D0=91=D0=BE=D1=80=D0=BE=D0=B4?= =?UTF-8?q?=D0=B8=D0=BD?= Date: Tue, 9 Jun 2026 22:33:18 +0200 Subject: [PATCH] working commit --- app/config/config.go | 19 --------- app/server/server.go | 40 +++++------------- app/starter/starter.go | 93 ++++++++++++++++++++++++++++++++++++++++++ cmd/mbased/main.go | 2 +- etc/mbase/mbased.yaml | 2 +- 5 files changed, 106 insertions(+), 50 deletions(-) create mode 100644 app/starter/starter.go diff --git a/app/config/config.go b/app/config/config.go index 33eb558..8f6ae06 100644 --- a/app/config/config.go +++ b/app/config/config.go @@ -2,8 +2,6 @@ package config import ( "errors" - "flag" - "fmt" "os" "path/filepath" @@ -102,23 +100,6 @@ func (conf *Config) ReadEnv() error { func (conf *Config) ReadOpts() error { var err error - - exeName := filepath.Base(os.Args[0]) - - flag.BoolVar(&conf.AsDaemon, "asDaemon", conf.AsDaemon, "run as daemon") - flag.BoolVar(&conf.Debug, "debug", conf.Debug, "on debug mode") - - help := func() { - fmt.Println("") - fmt.Printf("Usage: %s [option]\n", exeName) - fmt.Println("") - fmt.Println("Options:") - flag.PrintDefaults() - fmt.Println("") - } - flag.Usage = help - flag.Parse() - return err } diff --git a/app/server/server.go b/app/server/server.go index 656be4c..822c016 100644 --- a/app/server/server.go +++ b/app/server/server.go @@ -1,6 +1,7 @@ package server import ( + "context" "fmt" "io/ioutil" "os" @@ -8,10 +9,9 @@ import ( "os/user" "path/filepath" "strconv" + "sync" "syscall" "time" - "context" - "sync" "mbase/app/config" "mbase/app/maindb" @@ -41,40 +41,21 @@ type Server struct { state descr.Server sfile string logf *os.File - ctx context.Context - cancel context.CancelFunc - wg sync.WaitGroup + ctx context.Context + cancel context.CancelFunc + wg sync.WaitGroup } -func NewServer() (*Server, error) { +func NewServer(conf *config.Config) (*Server, error) { var err error - srv := &Server{} + srv := &Server{ + conf: conf, + } srv.log = logger.NewLogger("server") srv.ctx, srv.cancel = context.WithCancel(context.Background()) return srv, err } -func (srv *Server) Configure() error { - var err error - srv.conf = config.NewConfig() - - err = srv.conf.ReadFile() - if err != nil { - return err - } - err = srv.conf.ReadEnv() - if err != nil { - return err - } - err = srv.conf.ReadOpts() - if err != nil { - return err - } - srv.sfile = filepath.Join(srv.conf.DataDir, "mbase.yaml") - - return err -} - func (srv *Server) LoadState() error { var err error _, err = os.Stat(srv.sfile) @@ -125,6 +106,8 @@ func (srv *Server) Build() error { var err error srv.log.Infof("Build server") + srv.sfile = filepath.Join(srv.conf.DataDir, "mbase.yaml") + currUser, err := user.Current() if err != nil { err = fmt.Errorf("Error getting current user: %v\n", err) @@ -458,7 +441,6 @@ func (srv *Server) Daemonize() error { return err } - func (srv *Server) Rotator() { srv.wg.Add(1) var counter uint64 diff --git a/app/starter/starter.go b/app/starter/starter.go new file mode 100644 index 0000000..8700df6 --- /dev/null +++ b/app/starter/starter.go @@ -0,0 +1,93 @@ +/* + * Copyright 2026 Oleg Borodin + */ +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() +} diff --git a/cmd/mbased/main.go b/cmd/mbased/main.go index 6715c39..e23a3d3 100644 --- a/cmd/mbased/main.go +++ b/cmd/mbased/main.go @@ -6,8 +6,8 @@ package main import ( "os" - "mbase/pkg/logger" "mbase/app/starter" + "mbase/pkg/logger" ) func main() { diff --git a/etc/mbase/mbased.yaml b/etc/mbase/mbased.yaml index ee1b322..ae6ac6e 100644 --- a/etc/mbase/mbased.yaml +++ b/etc/mbase/mbased.yaml @@ -1 +1 @@ -daemon: false +asDaemon: false