WIP debug client
This commit is contained in:
parent
ea6dd0dc99
commit
bab107ebf6
@ -56,7 +56,8 @@ func (s *service) Name() (name string) {
|
|||||||
func (s *service) Run(ctx context.Context) (err error) {
|
func (s *service) Run(ctx context.Context) (err error) {
|
||||||
err = s.BaseDrpcServer.Run(
|
err = s.BaseDrpcServer.Run(
|
||||||
ctx,
|
ctx,
|
||||||
s.cfg.APIServer.ListenAddrs, func(handler drpc.Handler) drpc.Handler {
|
s.cfg.APIServer.ListenAddrs,
|
||||||
|
func(handler drpc.Handler) drpc.Handler {
|
||||||
return handler
|
return handler
|
||||||
},
|
},
|
||||||
s.transport.BasicListener)
|
s.transport.BasicListener)
|
||||||
|
|||||||
@ -61,7 +61,8 @@ func (s *drpcServer) Run(ctx context.Context) (err error) {
|
|||||||
if err = s.metric.Registry().Register(histVec); err != nil {
|
if err = s.metric.Registry().Register(histVec); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
return s.BaseDrpcServer.Run(ctx,
|
return s.BaseDrpcServer.Run(
|
||||||
|
ctx,
|
||||||
s.config.ListenAddrs,
|
s.config.ListenAddrs,
|
||||||
func(handler drpc.Handler) drpc.Handler {
|
func(handler drpc.Handler) drpc.Handler {
|
||||||
return &metric.PrometheusDRPC{
|
return &metric.PrometheusDRPC{
|
||||||
|
|||||||
43
util/cmd/debug/api/service.go
Normal file
43
util/cmd/debug/api/service.go
Normal file
@ -0,0 +1,43 @@
|
|||||||
|
package api
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto"
|
||||||
|
"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/util/cmd/debug/client"
|
||||||
|
)
|
||||||
|
|
||||||
|
const CName = "debug.api"
|
||||||
|
|
||||||
|
var log = logger.NewNamed(CName)
|
||||||
|
|
||||||
|
type Service interface {
|
||||||
|
CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error)
|
||||||
|
app.Component
|
||||||
|
}
|
||||||
|
|
||||||
|
type service struct {
|
||||||
|
client client.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() Service {
|
||||||
|
return &service{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Init(a *app.App) (err error) {
|
||||||
|
s.client = a.MustComponent(client.CName).(client.Service)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Name() (name string) {
|
||||||
|
return CName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) CreateSpace(ctx context.Context, ip string, request *apiproto.CreateSpaceRequest) (resp *apiproto.CreateSpaceResponse, err error) {
|
||||||
|
cl, err := s.client.Get(ctx, ip)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
return cl.CreateSpace(ctx, request)
|
||||||
|
}
|
||||||
73
util/cmd/debug/client/service.go
Normal file
73
util/cmd/debug/client/service.go
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
package client
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto"
|
||||||
|
"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/pkg/ocache"
|
||||||
|
"net"
|
||||||
|
"storj.io/drpc/drpcconn"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Service interface {
|
||||||
|
Get(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error)
|
||||||
|
app.ComponentRunnable
|
||||||
|
}
|
||||||
|
|
||||||
|
const CName = "debug.client"
|
||||||
|
|
||||||
|
var log = logger.NewNamed(CName)
|
||||||
|
|
||||||
|
type service struct {
|
||||||
|
cache ocache.OCache
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() Service {
|
||||||
|
return &service{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Init(a *app.App) (err error) {
|
||||||
|
s.cache = ocache.New(
|
||||||
|
func(ctx context.Context, ip string) (value ocache.Object, err error) {
|
||||||
|
conn, err := net.Dial("tcp", ip)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
value = drpcconn.New(conn)
|
||||||
|
return
|
||||||
|
},
|
||||||
|
ocache.WithLogger(log.Sugar()),
|
||||||
|
ocache.WithGCPeriod(time.Minute),
|
||||||
|
ocache.WithTTL(time.Minute*5),
|
||||||
|
)
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Name() (name string) {
|
||||||
|
return CName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Run(ctx context.Context) (err error) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Get(ctx context.Context, ip string) (apiproto.DRPCClientApiClient, error) {
|
||||||
|
v, err := s.cache.Get(ctx, ip)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
conn := v.(*drpcconn.Conn)
|
||||||
|
select {
|
||||||
|
case <-conn.Closed():
|
||||||
|
default:
|
||||||
|
return apiproto.NewDRPCClientApiClient(conn), nil
|
||||||
|
}
|
||||||
|
s.cache.Remove(ip)
|
||||||
|
return s.Get(ctx, ip)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Close(ctx context.Context) (err error) {
|
||||||
|
return s.cache.Close()
|
||||||
|
}
|
||||||
77
util/cmd/debug/debug.go
Normal file
77
util/cmd/debug/debug.go
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"flag"
|
||||||
|
"fmt"
|
||||||
|
"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/util/cmd/debug/api"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/client"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/stdin"
|
||||||
|
"go.uber.org/zap"
|
||||||
|
"net/http"
|
||||||
|
"os"
|
||||||
|
"os/signal"
|
||||||
|
"syscall"
|
||||||
|
"time"
|
||||||
|
)
|
||||||
|
|
||||||
|
var log = logger.NewNamed("main")
|
||||||
|
|
||||||
|
var (
|
||||||
|
// we can't use "v" here because of glog init (through badger) setting flag.Bool with "v"
|
||||||
|
flagVersion = flag.Bool("ver", 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)
|
||||||
|
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(client.New()).
|
||||||
|
Register(api.New()).
|
||||||
|
Register(stdin.New())
|
||||||
|
}
|
||||||
69
util/cmd/debug/stdin/service.go
Normal file
69
util/cmd/debug/stdin/service.go
Normal file
@ -0,0 +1,69 @@
|
|||||||
|
package stdin
|
||||||
|
|
||||||
|
import (
|
||||||
|
"bufio"
|
||||||
|
"context"
|
||||||
|
"github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto"
|
||||||
|
"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/util/cmd/debug/api"
|
||||||
|
"os"
|
||||||
|
)
|
||||||
|
|
||||||
|
const CName = "debug.stdin"
|
||||||
|
|
||||||
|
var log = logger.NewNamed(CName).Sugar()
|
||||||
|
|
||||||
|
type Service interface {
|
||||||
|
app.ComponentRunnable
|
||||||
|
}
|
||||||
|
|
||||||
|
type service struct {
|
||||||
|
api api.Service
|
||||||
|
}
|
||||||
|
|
||||||
|
func New() Service {
|
||||||
|
return &service{}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Init(a *app.App) (err error) {
|
||||||
|
s.api = a.MustComponent(api.CName).(api.Service)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Name() (name string) {
|
||||||
|
return CName
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Run(ctx context.Context) (err error) {
|
||||||
|
go s.readStdin()
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) Close(ctx context.Context) (err error) {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *service) readStdin() {
|
||||||
|
// create new reader from stdin
|
||||||
|
reader := bufio.NewReader(os.Stdin)
|
||||||
|
// start infinite loop to continuously listen to input
|
||||||
|
for {
|
||||||
|
// read by one line (enter pressed)
|
||||||
|
str, err := reader.ReadString('\n')
|
||||||
|
// check for errors
|
||||||
|
if err != nil {
|
||||||
|
// close channel just to inform others
|
||||||
|
log.Errorf("Error in read string: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Debug(str)
|
||||||
|
|
||||||
|
res, err := s.api.CreateSpace(context.Background(), "127.0.0.1:8090", &apiproto.CreateSpaceRequest{})
|
||||||
|
if err != nil {
|
||||||
|
log.Errorf("Error in performing request: %s", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
log.Debug(res)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user