From a3f2fb5eae0484733c95d6df8354ad1858a2c430 Mon Sep 17 00:00:00 2001 From: mcrakhman Date: Tue, 18 Oct 2022 15:16:06 +0200 Subject: [PATCH] Add client cmd --- client/badgerprovider/service.go | 4 ++ client/cmd/client.go | 105 +++++++++++++++++++++++++++++++ 2 files changed, 109 insertions(+) create mode 100644 client/cmd/client.go diff --git a/client/badgerprovider/service.go b/client/badgerprovider/service.go index ed06f91e..64f80c2d 100644 --- a/client/badgerprovider/service.go +++ b/client/badgerprovider/service.go @@ -18,6 +18,10 @@ type service struct { db *badger.DB } +func New() BadgerProvider { + return &service{} +} + func (s *service) Init(a *app.App) (err error) { cfg := a.MustComponent(config.CName).(*config.Config) s.db, err = badger.Open(badger.DefaultOptions(cfg.Storage.Path)) diff --git a/client/cmd/client.go b/client/cmd/client.go new file mode 100644 index 00000000..b21214ce --- /dev/null +++ b/client/cmd/client.go @@ -0,0 +1,105 @@ +package main + +import ( + "context" + "flag" + "fmt" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/account" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/badgerprovider" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/clientspace/clientcache" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/document" + "github.com/anytypeio/go-anytype-infrastructure-experiments/client/storage" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/commonspace" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/config" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/dialer" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/pool" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/rpc/server" + "github.com/anytypeio/go-anytype-infrastructure-experiments/common/net/secure" + "go.uber.org/zap" + "net/http" + _ "net/http/pprof" + "os" + "os/signal" + "syscall" + "time" +) + +var log = logger.NewNamed("main") + +var ( + flagConfigFile = flag.String("c", "etc/config.yml", "path to config file") + flagVersion = flag.Bool("v", false, "show version and exit") + flagHelp = flag.Bool("h", false, "show help and exit") +) + +func main() { + flag.Parse() + + if *flagVersion { + fmt.Println(app.VersionDescription()) + return + } + if *flagHelp { + flag.PrintDefaults() + return + } + + if debug, ok := os.LookupEnv("ANYPROF"); ok && debug != "" { + go func() { + http.ListenAndServe(debug, nil) + }() + } + + // create app + ctx := context.Background() + a := new(app.App) + + // open config file + conf, err := config.NewFromFile(*flagConfigFile) + if err != nil { + log.Fatal("can't open config file", zap.Error(err)) + } + + // bootstrap components + a.Register(conf) + Bootstrap(a) + + // start app + if err := a.Start(ctx); err != nil { + log.Fatal("can't start app", zap.Error(err)) + } + log.Info("app started", zap.String("version", a.Version())) + + // wait exit signal + exit := make(chan os.Signal, 1) + signal.Notify(exit, os.Interrupt, syscall.SIGKILL, syscall.SIGTERM, syscall.SIGQUIT) + sig := <-exit + log.Info("received exit signal, stop app...", zap.String("signal", fmt.Sprint(sig))) + + // close app + ctx, cancel := context.WithTimeout(ctx, time.Minute) + defer cancel() + if err := a.Close(ctx); err != nil { + log.Fatal("close error", zap.Error(err)) + } else { + log.Info("goodbye!") + } + time.Sleep(time.Second / 3) +} + +func Bootstrap(a *app.App) { + a.Register(account.New()). + Register(badgerprovider.New()). + Register(storage.New()). + Register(clientcache.New(200)). + Register(secure.New()). + Register(dialer.New()). + Register(pool.New()). + Register(commonspace.New()). + Register(clientspace.New()). + Register(server.New()). + Register(document.New()) +}