Add scripts

This commit is contained in:
mcrakhman 2022-12-01 22:08:01 +01:00 committed by Mikhail Iudin
parent 896b2d982a
commit bd7e38d1af
No known key found for this signature in database
GPG Key ID: FAAAA8BAABDFF1C0
2 changed files with 86 additions and 8 deletions

View File

@ -3,12 +3,14 @@ package api
import ( import (
"context" "context"
"errors" "errors"
"fmt"
"github.com/anytypeio/go-anytype-infrastructure-experiments/client/api/apiproto" "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"
"github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger" "github.com/anytypeio/go-anytype-infrastructure-experiments/common/app/logger"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/client"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/api/node"
"github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers" "github.com/anytypeio/go-anytype-infrastructure-experiments/util/cmd/debug/peers"
"strconv"
) )
const CName = "debug.api" const CName = "debug.api"
@ -25,23 +27,40 @@ type Command struct {
Cmd func(server peers.Peer, params []string) (string, error) Cmd func(server peers.Peer, params []string) (string, error)
} }
type Script struct {
Cmd func(params []string) (string, error)
}
type Service interface { type Service interface {
app.Component app.Component
Call(server peers.Peer, cmdName string, params []string) (string, error) Call(server peers.Peer, cmdName string, params []string) (string, error)
Script(scriptName string, params []string) (res string, err error)
} }
type service struct { type service struct {
clientCommands map[string]Command clientCommands map[string]Command
nodeCommands map[string]Command nodeCommands map[string]Command
scripts map[string]Script
client client.Service
node node.Service
peers peers.Service
} }
func New() Service { func New() Service {
return &service{clientCommands: map[string]Command{}, nodeCommands: map[string]Command{}} return &service{
clientCommands: map[string]Command{},
nodeCommands: map[string]Command{},
scripts: map[string]Script{},
}
} }
func (s *service) Init(a *app.App) (err error) { func (s *service) Init(a *app.App) (err error) {
s.registerClientCommands(a.MustComponent(client.CName).(client.Service)) s.client = a.MustComponent(client.CName).(client.Service)
s.registerNodeCommands(a.MustComponent(node.CName).(node.Service)) s.node = a.MustComponent(node.CName).(node.Service)
s.peers = a.MustComponent(peers.CName).(peers.Service)
s.registerClientCommands()
s.registerNodeCommands()
s.registerScripts()
return nil return nil
} }
@ -50,6 +69,15 @@ func (s *service) Name() (name string) {
return CName return CName
} }
func (s *service) Script(scriptName string, params []string) (res string, err error) {
script, ok := s.scripts[scriptName]
if !ok {
err = ErrNoSuchCommand
return
}
return script.Cmd(params)
}
func (s *service) Call(server peers.Peer, cmdName string, params []string) (res string, err error) { func (s *service) Call(server peers.Peer, cmdName string, params []string) (res string, err error) {
var ( var (
cmd Command cmd Command
@ -69,7 +97,8 @@ func (s *service) Call(server peers.Peer, cmdName string, params []string) (res
return cmd.Cmd(server, params) return cmd.Cmd(server, params)
} }
func (s *service) registerClientCommands(client client.Service) { func (s *service) registerClientCommands() {
client := s.client
s.clientCommands["create-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) { s.clientCommands["create-space"] = Command{Cmd: func(server peers.Peer, params []string) (res string, err error) {
if len(params) != 0 { if len(params) != 0 {
err = ErrIncorrectParamsCount err = ErrIncorrectParamsCount
@ -141,5 +170,38 @@ func (s *service) registerClientCommands(client client.Service) {
}} }}
} }
func (s *service) registerNodeCommands(node node.Service) { func (s *service) registerNodeCommands() {
}
func (s *service) registerScripts() {
s.scripts["create-many"] = Script{Cmd: func(params []string) (res string, err error) {
if len(params) != 5 {
err = ErrIncorrectParamsCount
return
}
peer, err := s.peers.Get(params[0])
if err != nil {
return
}
last, err := strconv.Atoi(params[4])
if err != nil {
return
}
if last <= 0 {
err = fmt.Errorf("incorrect number of steps")
return
}
for i := 0; i < last; i++ {
_, err := s.client.AddText(context.Background(), peer.Address, &apiproto.AddTextRequest{
SpaceId: params[1],
DocumentId: params[2],
Text: params[3],
})
if err != nil {
return "", err
}
}
return
}}
} }

View File

@ -50,6 +50,7 @@ func (s *service) Close(ctx context.Context) (err error) {
func (s *service) readStdin() { func (s *service) readStdin() {
reader := bufio.NewReader(os.Stdin) reader := bufio.NewReader(os.Stdin)
Loop:
for { for {
fmt.Print("> ") fmt.Print("> ")
str, err := reader.ReadString('\n') str, err := reader.ReadString('\n')
@ -65,16 +66,31 @@ func (s *service) readStdin() {
fmt.Println("incorrect number of arguments") fmt.Println("incorrect number of arguments")
continue continue
} }
switch split[0] {
case "script":
res, err := s.api.Script(split[1], split[2:])
if err != nil {
fmt.Println("error in performing script:", err)
continue Loop
}
fmt.Println(res)
continue Loop
case "cmd":
break
default:
fmt.Println("incorrect input")
continue Loop
}
peer, err := s.peers.Get(split[0]) peer, err := s.peers.Get(split[1])
if err != nil { if err != nil {
fmt.Println("no such peer", err) fmt.Println("no such peer", err)
continue continue
} }
res, err := s.api.Call(peer, split[1], split[2:]) res, err := s.api.Call(peer, split[2], split[3:])
if err != nil { if err != nil {
fmt.Println("error in performing request:", err) fmt.Println("error in performing command:", err)
continue continue
} }
fmt.Println(res) fmt.Println(res)