From f0e5e8c173ceab193fecf14b6309fbfd59c1c81d Mon Sep 17 00:00:00 2001 From: Malte Bauch <malte.bauch@stud.h-da.de> Date: Fri, 16 Oct 2020 15:30:33 +0200 Subject: [PATCH] added footerView this view contains grpcStatus and databaseStatus --- cmd/gosdn-tview/views/datbaseStatusView.go | 43 ++++++++++++++++++++++ cmd/gosdn-tview/views/footerView.go | 35 ++++++++++++++++++ cmd/gosdn-tview/views/gRPCStatusView.go | 17 ++++++--- cmd/gosdn-tview/views/mainView.go | 14 ++----- 4 files changed, 94 insertions(+), 15 deletions(-) create mode 100644 cmd/gosdn-tview/views/datbaseStatusView.go create mode 100644 cmd/gosdn-tview/views/footerView.go diff --git a/cmd/gosdn-tview/views/datbaseStatusView.go b/cmd/gosdn-tview/views/datbaseStatusView.go new file mode 100644 index 000000000..2e9a26866 --- /dev/null +++ b/cmd/gosdn-tview/views/datbaseStatusView.go @@ -0,0 +1,43 @@ +package views + +import ( + "code.fbi.h-da.de/cocsn/gosdn/cmd/gosdn-tview/app" + "github.com/rivo/tview" + "time" +) + +type DatabaseStatusView struct { + databaseStatusView *tview.TextView +} + +func NewDatabaseStatusView(app *app.App) *DatabaseStatusView { + dv := &DatabaseStatusView{ + databaseStatusView: tview.NewTextView(), + } + dv.databaseStatusView. + SetDynamicColors(true). + SetTextAlign(tview.AlignCenter). + SetRegions(true). + SetBorder(true). + SetTitle("Database") + + go databaseTicker(dv) + + return dv +} + +func (dv *DatabaseStatusView) GetContent() tview.Primitive { + return dv.databaseStatusView +} + +func (dv *DatabaseStatusView) SetContent(s string) { + dv.databaseStatusView.Clear() + dv.databaseStatusView.SetText(s) +} + +func databaseTicker(dv *DatabaseStatusView) { + ticker := time.NewTicker(5 * time.Second) + for t := range ticker.C { + dv.SetContent(t.String()) + } +} diff --git a/cmd/gosdn-tview/views/footerView.go b/cmd/gosdn-tview/views/footerView.go new file mode 100644 index 000000000..f998d7ba5 --- /dev/null +++ b/cmd/gosdn-tview/views/footerView.go @@ -0,0 +1,35 @@ +package views + +import ( + "code.fbi.h-da.de/cocsn/gosdn/cmd/gosdn-tview/app" + "github.com/rivo/tview" + "google.golang.org/grpc" +) + +type FooterView struct { + footerView *tview.Flex + databaseStatusView *DatabaseStatusView + gRPCStatusView *GRPCStatusView +} + +func NewFooterView(app *app.App, conn *grpc.ClientConn) *FooterView { + + fw := &FooterView{ + footerView: tview.NewFlex(), + databaseStatusView: NewDatabaseStatusView(app), + gRPCStatusView: NewGRPCStatusView(app, conn), + } + fw.footerView. + SetBorder(true). + SetTitle("Status") + + fw.footerView. + AddItem(fw.gRPCStatusView.GetContent(), 0, 1, false). + AddItem(fw.databaseStatusView.GetContent(), 0, 1, false) + + return fw +} + +func (fw *FooterView) GetContent() tview.Primitive { + return fw.footerView +} diff --git a/cmd/gosdn-tview/views/gRPCStatusView.go b/cmd/gosdn-tview/views/gRPCStatusView.go index 1c6020b67..3e522db7f 100644 --- a/cmd/gosdn-tview/views/gRPCStatusView.go +++ b/cmd/gosdn-tview/views/gRPCStatusView.go @@ -11,23 +11,25 @@ type GRPCStatusView struct { gRPCStatusView *tview.TextView } -//TODO: change to grpcStatusView func NewGRPCStatusView(app *app.App, conn *grpc.ClientConn) *GRPCStatusView { - //TODO: change to uses FlexBox if there is more to display in the header sv := &GRPCStatusView{ gRPCStatusView: tview.NewTextView(), } sv.gRPCStatusView. + SetDynamicColors(true). + SetTextAlign(tview.AlignCenter). SetRegions(true). SetBorder(true). SetTitle("gRPC") + //TODO: maybe there is another way to do this. + // pretty ugly atm, since it re-draws every 5 seconds... sv.gRPCStatusView.SetChangedFunc(func() { app.Draw() }) - go goSDNTicker(sv, conn) + go gRPCTicker(sv, conn) return sv } @@ -41,9 +43,14 @@ func (sv *GRPCStatusView) SetContent(s string) { sv.gRPCStatusView.SetText(s) } -func goSDNTicker(sv *GRPCStatusView, conn *grpc.ClientConn) { +func gRPCTicker(sv *GRPCStatusView, conn *grpc.ClientConn) { + //TODO: refactor -> get rid of hardcoded values ticker := time.NewTicker(5 * time.Second) for range ticker.C { - sv.SetContent(conn.GetState().String()) + if str := conn.GetState().String(); str == "READY" || str == "IDLE" { + sv.SetContent("[green]" + "connected") + } else { + sv.SetContent("[red]" + "disconnected") + } } } diff --git a/cmd/gosdn-tview/views/mainView.go b/cmd/gosdn-tview/views/mainView.go index b5123b89e..e69d74dc6 100644 --- a/cmd/gosdn-tview/views/mainView.go +++ b/cmd/gosdn-tview/views/mainView.go @@ -12,7 +12,7 @@ type MainView struct { commandsListView *CommandListView resultAndInputView *ResultAndInputView headerView *HeaderView - goSDNStatusView *GRPCStatusView + footerView *FooterView } func NewMainView(app *app.App, conn *grpc.ClientConn) *MainView { @@ -22,15 +22,15 @@ func NewMainView(app *app.App, conn *grpc.ClientConn) *MainView { commandsListView: NewCommandListView(), resultAndInputView: NewResultAndInputView(), headerView: NewHeaderView(), - goSDNStatusView: NewGRPCStatusView(app, conn), + footerView: NewFooterView(app, conn), } mv.commandsListView.GetCommands(app, mv.resultAndInputView, conn) mv.mainGrid. - SetRows(8, 0, 3). + SetRows(8, 0, 5). SetColumns(40, 0). AddItem(mv.headerView.GetContent(), 0, 0, 1, 2, 0, 0, false). - AddItem(mv.goSDNStatusView.GetContent(), 2, 0, 1, 2, 0, 0, false) + AddItem(mv.footerView.GetContent(), 2, 0, 1, 2, 0, 0, false) mv.mainGrid.AddItem(mv.commandsListView.GetContent(), 1, 0, 1, 1, 0, 0, true). AddItem(mv.resultAndInputView.GetContent(), 1, 1, 1, 1, 0, 0, false) @@ -43,9 +43,3 @@ func NewMainView(app *app.App, conn *grpc.ClientConn) *MainView { func (mv *MainView) GetContent() tview.Primitive { return mv.pages } - -func newPrimitive(text string) tview.Primitive { - return tview.NewTextView(). - SetTextAlign(tview.AlignCenter). - SetText(text) -} -- GitLab