refac network backend

pull/17/head
Edouard Paris 5 years ago
parent 6253b3cb5b
commit f3900d9105

@ -9,7 +9,7 @@ import (
type App struct {
Config *config.Config
Logger logging.Logger
Network *network.Network
Network network.Network
}
func New(cfg *config.Config) (*App, error) {

@ -1,101 +0,0 @@
package cli
import (
"context"
"os"
"os/signal"
cli "gopkg.in/urfave/cli.v2"
"github.com/edouardparis/lntop/app"
"github.com/edouardparis/lntop/config"
"github.com/edouardparis/lntop/events"
"github.com/edouardparis/lntop/logging"
"github.com/edouardparis/lntop/pubsub"
"github.com/edouardparis/lntop/ui"
)
const version = "v0.1.0"
// New creates a new cli app.
func New() *cli.App {
cli.VersionFlag = &cli.BoolFlag{
Name: "version", Aliases: []string{},
Usage: "print the version",
}
return &cli.App{
Name: "lntop",
Version: version,
EnableShellCompletion: true,
Action: run,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "config",
Aliases: []string{"c"},
Usage: "path to config file",
},
},
Commands: []*cli.Command{
{
Name: "pubsub",
Aliases: []string{""},
Usage: "run the pubsub only",
Action: pubsubRun,
},
},
}
}
func run(c *cli.Context) error {
cfg, err := config.Load(c.String("config"))
if err != nil {
return err
}
app, err := app.New(cfg)
if err != nil {
return err
}
ctx := context.Background()
events := make(chan *events.Event)
ps := pubsub.New(app.Logger, app.Network)
go func() {
err := ui.Run(ctx, app, events)
if err != nil {
app.Logger.Debug("ui", logging.String("error", err.Error()))
}
ps.Stop()
}()
ps.Run(ctx, events)
return nil
}
func pubsubRun(c *cli.Context) error {
cfg, err := config.Load(c.String("config"))
if err != nil {
return err
}
app, err := app.New(cfg)
if err != nil {
return err
}
events := make(chan *events.Event)
ps := pubsub.New(app.Logger, app.Network)
ps.Run(context.Background(), events)
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt)
go func() {
<-sig
ps.Stop()
}()
return nil
}

@ -1,14 +1,107 @@
package main
import (
"context"
"log"
"os"
"os/signal"
"github.com/edouardparis/lntop/cli"
cli "gopkg.in/urfave/cli.v2"
"github.com/edouardparis/lntop/app"
"github.com/edouardparis/lntop/config"
"github.com/edouardparis/lntop/events"
"github.com/edouardparis/lntop/logging"
"github.com/edouardparis/lntop/pubsub"
"github.com/edouardparis/lntop/ui"
"github.com/edouardparis/lntop/version"
)
// newApp creates a new cli app.
func newApp() *cli.App {
cli.VersionFlag = &cli.BoolFlag{
Name: "version", Aliases: []string{},
Usage: "print the version",
}
return &cli.App{
Name: "lntop",
Version: version.Version,
EnableShellCompletion: true,
Action: run,
Flags: []cli.Flag{
&cli.StringFlag{
Name: "config",
Aliases: []string{"c"},
Usage: "path to config file",
},
},
Commands: []*cli.Command{
{
Name: "pubsub",
Aliases: []string{""},
Usage: "run the pubsub only",
Action: pubsubRun,
},
},
}
}
func run(c *cli.Context) error {
cfg, err := config.Load(c.String("config"))
if err != nil {
return err
}
app, err := app.New(cfg)
if err != nil {
return err
}
ctx := context.Background()
events := make(chan *events.Event)
ps := pubsub.New(app.Logger, app.Network)
go func() {
err := ui.Run(ctx, app, events)
if err != nil {
app.Logger.Debug("ui", logging.String("error", err.Error()))
}
ps.Stop()
}()
ps.Run(ctx, events)
return nil
}
func pubsubRun(c *cli.Context) error {
cfg, err := config.Load(c.String("config"))
if err != nil {
return err
}
app, err := app.New(cfg)
if err != nil {
return err
}
events := make(chan *events.Event)
ps := pubsub.New(app.Logger, app.Network)
ps.Run(context.Background(), events)
sig := make(chan os.Signal, 1)
signal.Notify(sig, os.Interrupt)
go func() {
<-sig
ps.Stop()
}()
return nil
}
func main() {
err := cli.New().Run(os.Args)
err := newApp().Run(os.Args)
if err != nil {
log.Fatal(err)
}

@ -33,6 +33,8 @@ type Network struct {
MaxMsgRecvSize int `toml:"max_msg_recv_size"`
ConnTimeout int `toml:"conn_timeout"`
PoolCapacity int `toml:"pool_capacity"`
LightningDir string `toml:"lightning_dir"`
RPCFile string `toml:"rpc_file"`
}
type Views struct {

@ -130,6 +130,8 @@ github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzp
github.com/miekg/dns v0.0.0-20171125082028-79bfde677fa8/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.6 h1:jVwb4GDwD65q/gtItR/lIZHjNH93QfeGxZUkzJcW9mc=
github.com/miekg/dns v1.1.6/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/niftynei/glightning v0.0.0-20190514204352-5c44d2707d4f h1:YIyRM8QuiikmxtCVyQGVS283OJkpIiXmBaApqpMIauk=
github.com/niftynei/glightning v0.0.0-20190514204352-5c44d2707d4f/go.mod h1:nOHtsM1ZfMwOxwl6LE72U611ozP+IBj/xVkJ+9vwtd4=
github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d h1:x3S6kxmy49zXVVyhcnrFqxvNVCBPb2KZ9hV2RBdS840=
github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d/go.mod h1:IuKpRQcYE1Tfu+oAQqaLisqDeXgjyyltCfsaoYN18NQ=
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=

@ -1,42 +0,0 @@
package backend
import (
"context"
"github.com/edouardparis/lntop/network/models"
"github.com/edouardparis/lntop/network/options"
)
type Backend interface {
Ping() error
SubscribeInvoice(context.Context, chan *models.Invoice) error
SubscribeChannels(context.Context, chan *models.ChannelUpdate) error
NodeName() string
Info(context.Context) (*models.Info, error)
GetNode(context.Context, string) (*models.Node, error)
GetWalletBalance(context.Context) (*models.WalletBalance, error)
GetChannelsBalance(context.Context) (*models.ChannelsBalance, error)
ListChannels(context.Context, ...options.Channel) ([]*models.Channel, error)
GetChannelInfo(context.Context, *models.Channel) error
CreateInvoice(context.Context, int64, string) (*models.Invoice, error)
GetInvoice(context.Context, string) (*models.Invoice, error)
DecodePayReq(context.Context, string) (*models.PayReq, error)
SendPayment(context.Context, *models.PayReq) (*models.Payment, error)
GetTransactions(context.Context) ([]*models.Transaction, error)
SubscribeTransactions(context.Context, chan *models.Transaction) error
}

@ -13,9 +13,9 @@ import (
"github.com/edouardparis/lntop/config"
"github.com/edouardparis/lntop/logging"
"github.com/edouardparis/lntop/network/backend/pool"
"github.com/edouardparis/lntop/network/models"
"github.com/edouardparis/lntop/network/options"
"github.com/edouardparis/lntop/network/pool"
)
const (

@ -1,21 +1,54 @@
package network
import (
"context"
"github.com/edouardparis/lntop/config"
"github.com/edouardparis/lntop/logging"
"github.com/edouardparis/lntop/network/backend"
"github.com/edouardparis/lntop/network/backend/lnd"
"github.com/edouardparis/lntop/network/backend/mock"
"github.com/edouardparis/lntop/network/lnd"
"github.com/edouardparis/lntop/network/mock"
"github.com/edouardparis/lntop/network/models"
"github.com/edouardparis/lntop/network/options"
)
type Network struct {
backend.Backend
type Network interface {
Ping() error
SubscribeInvoice(context.Context, chan *models.Invoice) error
SubscribeChannels(context.Context, chan *models.ChannelUpdate) error
NodeName() string
Info(context.Context) (*models.Info, error)
GetNode(context.Context, string) (*models.Node, error)
GetWalletBalance(context.Context) (*models.WalletBalance, error)
GetChannelsBalance(context.Context) (*models.ChannelsBalance, error)
ListChannels(context.Context, ...options.Channel) ([]*models.Channel, error)
GetChannelInfo(context.Context, *models.Channel) error
CreateInvoice(context.Context, int64, string) (*models.Invoice, error)
GetInvoice(context.Context, string) (*models.Invoice, error)
DecodePayReq(context.Context, string) (*models.PayReq, error)
SendPayment(context.Context, *models.PayReq) (*models.Payment, error)
GetTransactions(context.Context) ([]*models.Transaction, error)
SubscribeTransactions(context.Context, chan *models.Transaction) error
}
func New(c *config.Network, logger logging.Logger) (*Network, error) {
func New(c *config.Network, logger logging.Logger) (Network, error) {
var (
err error
b backend.Backend
b Network
)
if c.Type == "mock" {
b = mock.New(c)
@ -31,5 +64,5 @@ func New(c *config.Network, logger logging.Logger) (*Network, error) {
return nil, err
}
return &Network{b}, nil
return b, nil
}

@ -13,11 +13,11 @@ import (
type PubSub struct {
stop chan bool
logger logging.Logger
network *network.Network
network network.Network
wg *sync.WaitGroup
}
func New(logger logging.Logger, network *network.Network) *PubSub {
func New(logger logging.Logger, network network.Network) *PubSub {
return &PubSub{
logger: logger.With(logging.String("logger", "pubsub")),
network: network,

@ -10,7 +10,7 @@ import (
"github.com/edouardparis/lntop/network/models"
)
type tickerFunc func(context.Context, logging.Logger, *network.Network, chan *events.Event)
type tickerFunc func(context.Context, logging.Logger, network.Network, chan *events.Event)
func (p *PubSub) ticker(ctx context.Context, sub chan *events.Event, fn ...tickerFunc) {
p.wg.Add(1)
@ -34,7 +34,7 @@ func (p *PubSub) ticker(ctx context.Context, sub chan *events.Event, fn ...ticke
// withTickerInfo checks if general information did not changed changed in the ticker interval.
func withTickerInfo() tickerFunc {
var old *models.Info
return func(ctx context.Context, logger logging.Logger, net *network.Network, sub chan *events.Event) {
return func(ctx context.Context, logger logging.Logger, net network.Network, sub chan *events.Event) {
info, err := net.Info(ctx)
if err != nil {
logger.Error("network info returned an error", logging.Error(err))
@ -68,7 +68,7 @@ func withTickerInfo() tickerFunc {
// changed in the ticker interval.
func withTickerChannelsBalance() tickerFunc {
var old *models.ChannelsBalance
return func(ctx context.Context, logger logging.Logger, net *network.Network, sub chan *events.Event) {
return func(ctx context.Context, logger logging.Logger, net network.Network, sub chan *events.Event) {
channelsBalance, err := net.GetChannelsBalance(ctx)
if err != nil {
logger.Error("network channels balance returned an error", logging.Error(err))
@ -87,7 +87,7 @@ func withTickerChannelsBalance() tickerFunc {
// changed in the ticker interval.
func withTickerWalletBalance() tickerFunc {
var old *models.WalletBalance
return func(ctx context.Context, logger logging.Logger, net *network.Network, sub chan *events.Event) {
return func(ctx context.Context, logger logging.Logger, net network.Network, sub chan *events.Event) {
walletBalance, err := net.GetWalletBalance(ctx)
if err != nil {
logger.Error("network wallet balance returned an error", logging.Error(err))

@ -12,7 +12,7 @@ import (
type Models struct {
logger logging.Logger
network *network.Network
network network.Network
Info *Info
Channels *Channels
WalletBalance *WalletBalance

@ -6,11 +6,11 @@ import (
"github.com/jroimartin/gocui"
"github.com/edouardparis/lntop/ui/color"
"github.com/edouardparis/lntop/version"
)
const (
version = "v0.1.0"
HELP = "help"
HELP = "help"
)
type Help struct {
@ -60,7 +60,7 @@ func (h Help) Set(g *gocui.Gui, x0, y0, x1, y1 int) error {
}
h.view.Frame = false
cyan := color.Cyan()
fmt.Fprintln(h.view, fmt.Sprintf("lntop %s - (C) 2019 Edouard Paris", version))
fmt.Fprintln(h.view, fmt.Sprintf("lntop %s - (C) 2019 Edouard Paris", version.Version))
fmt.Fprintln(h.view, "Released under the MIT License")
fmt.Fprintln(h.view, "")
fmt.Fprintln(h.view, fmt.Sprintf("%6s %s",

@ -0,0 +1,3 @@
package version
const Version = "v0.1.0"
Loading…
Cancel
Save