Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
59 changes: 53 additions & 6 deletions daemon/algod/tui/tui.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,20 +20,32 @@
package tui

import (
"context"
"fmt"
"log"
"os"
"os/signal"
"path"
"strconv"
"strings"
"syscall"
"time"

"github.com/algorand/go-algorand/daemon/algod"
"github.com/algorand/go-algorand/node"
"github.com/charmbracelet/bubbles/help"
"github.com/charmbracelet/bubbles/key"
tea "github.com/charmbracelet/bubbletea"
"github.com/charmbracelet/wish"
bm "github.com/charmbracelet/wish/bubbletea"
lm "github.com/charmbracelet/wish/logging"
"github.com/gliderlabs/ssh"
"github.com/muesli/reflow/indent"
)

const host = "localhost"
const port = 1324

type model struct {
server *algod.Server
status node.StatusReport
Expand Down Expand Up @@ -129,12 +141,47 @@ func (m model) View() string {
return builder.String()
}

func teaHandler(s ssh.Session) (tea.Model, []tea.ProgramOption) {

return makeModel(algodServer), []tea.ProgramOption{tea.WithAltScreen()}
}

var algodServer *algod.Server

// Start ...
func Start(s *algod.Server) {
p := tea.NewProgram(makeModel(s), tea.WithAltScreen())
if err := p.Start(); err != nil {
fmt.Printf("Error in UI: %v", err)
os.Exit(1)

algodServer = s
dirname, err := os.UserHomeDir()
if err != nil {
log.Fatal(err)
}
sshServer, err := wish.NewServer(
wish.WithAddress(fmt.Sprintf("%s:%d", host, port)),
wish.WithHostKeyPath(path.Join(dirname, ".ssh/term_info_ed25519")),
wish.WithMiddleware(
bm.Middleware(teaHandler),
lm.Middleware(),
),
)
if err != nil {
log.Fatalln(err)
}

done := make(chan os.Signal, 1)
signal.Notify(done, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
log.Printf("Starting SSH server on %s:%d", host, port)
go func() {
if err = sshServer.ListenAndServe(); err != nil {
log.Fatalln(err)
}
}()

<-done
log.Println("Stopping SSH server")
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
defer func() { cancel() }()
if err := sshServer.Shutdown(ctx); err != nil {
log.Fatalln(err)
}
fmt.Printf("\nUI Terminated, shutting down node.\n")
os.Exit(0)
}
3 changes: 2 additions & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ require (
github.com/charmbracelet/bubbles v0.10.3 // indirect
github.com/charmbracelet/bubbletea v0.20.0
github.com/charmbracelet/lipgloss v0.5.0 // indirect
github.com/charmbracelet/wish v0.3.0 // indirect
github.com/chrismcguire/gobberish v0.0.0-20150821175641-1d8adb509a0e
github.com/cpuguy83/go-md2man v1.0.8 // indirect
github.com/davidlazar/go-crypto v0.0.0-20170701192655-dcfb0a7ac018
Expand All @@ -23,6 +24,7 @@ require (
github.com/fortytw2/leaktest v1.3.0 // indirect
github.com/gen2brain/beeep v0.0.0-20180718162406-4e430518395f
github.com/getkin/kin-openapi v0.22.0
github.com/gliderlabs/ssh v0.3.3 // indirect
github.com/godbus/dbus v0.0.0-20181101234600-2ff6f7ffd60f // indirect
github.com/gofrs/flock v0.7.0
github.com/google/go-querystring v1.0.0
Expand Down Expand Up @@ -50,7 +52,6 @@ require (
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654
golang.org/x/text v0.3.7
google.golang.org/appengine v1.6.7 // indirect
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f // indirect
gopkg.in/sohlich/elogrus.v3 v3.0.0-20180410122755-1fa29e2f2009
gopkg.in/toast.v1 v1.0.0-20180812000517-0a84660828b2 // indirect
gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776 // indirect
Expand Down
Loading