From 996be217b9cac278eea140513757b42d047f6a16 Mon Sep 17 00:00:00 2001 From: Andras Banki-Horvath Date: Wed, 19 Jan 2022 21:33:15 +0100 Subject: [PATCH] lncli: add (dev only) importgraph --- cmd/lncli/devrpc_active.go | 64 +++++++++++++++++++++++++++++++++++++ cmd/lncli/devrpc_default.go | 11 +++++++ cmd/lncli/main.go | 1 + 3 files changed, 76 insertions(+) create mode 100644 cmd/lncli/devrpc_active.go create mode 100644 cmd/lncli/devrpc_default.go diff --git a/cmd/lncli/devrpc_active.go b/cmd/lncli/devrpc_active.go new file mode 100644 index 000000000..925b2df18 --- /dev/null +++ b/cmd/lncli/devrpc_active.go @@ -0,0 +1,64 @@ +//go:build dev +// +build dev + +package main + +import ( + "bytes" + "fmt" + "io/ioutil" + + "github.com/lightninglabs/protobuf-hex-display/jsonpb" + "github.com/lightningnetwork/lnd/lncfg" + "github.com/lightningnetwork/lnd/lnrpc" + "github.com/lightningnetwork/lnd/lnrpc/devrpc" + "github.com/urfave/cli" +) + +// devCommands will return the set of commands to enable for devrpc builds. +func devCommands() []cli.Command { + return []cli.Command{ + { + Name: "importgraph", + Category: "Development", + Description: "Imports graph from describegraph JSON", + Usage: "Import the network graph.", + ArgsUsage: "graph-json-file", + Action: actionDecorator(importGraph), + }, + } +} + +func getDevClient(ctx *cli.Context) (devrpc.DevClient, func()) { + conn := getClientConn(ctx, false) + cleanUp := func() { + conn.Close() + } + return devrpc.NewDevClient(conn), cleanUp +} + +func importGraph(ctx *cli.Context) error { + ctxc := getContext() + client, cleanUp := getDevClient(ctx) + defer cleanUp() + + jsonFile := lncfg.CleanAndExpandPath(ctx.Args().First()) + jsonBytes, err := ioutil.ReadFile(jsonFile) + if err != nil { + return fmt.Errorf("error reading JSON from file %v: %v", + jsonFile, err) + } + + jsonGraph := &lnrpc.ChannelGraph{} + err = jsonpb.Unmarshal(bytes.NewReader(jsonBytes), jsonGraph) + if err != nil { + return fmt.Errorf("error parsing JSON: %v", err) + } + res, err := client.ImportGraph(ctxc, jsonGraph) + if err != nil { + return err + } + + printRespJSON(res) + return nil +} diff --git a/cmd/lncli/devrpc_default.go b/cmd/lncli/devrpc_default.go new file mode 100644 index 000000000..b9362cb42 --- /dev/null +++ b/cmd/lncli/devrpc_default.go @@ -0,0 +1,11 @@ +//go:build !dev +// +build !dev + +package main + +import "github.com/urfave/cli" + +// devCommands will return nil for non-devrpc builds. +func devCommands() []cli.Command { + return nil +} diff --git a/cmd/lncli/main.go b/cmd/lncli/main.go index d65568dab..8c636a0d3 100644 --- a/cmd/lncli/main.go +++ b/cmd/lncli/main.go @@ -400,6 +400,7 @@ func main() { app.Commands = append(app.Commands, walletCommands()...) app.Commands = append(app.Commands, watchtowerCommands()...) app.Commands = append(app.Commands, wtclientCommands()...) + app.Commands = append(app.Commands, devCommands()...) if err := app.Run(os.Args); err != nil { fatal(err)