Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feature/tui poc #1

Merged
merged 18 commits into from
Jun 17, 2022
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Improved
  • Loading branch information
aurc committed Jun 3, 2022
commit 9cc8c0d4aba585cb6653755a6cf110807882a0d5
35 changes: 35 additions & 0 deletions internal/uitest/helper/json_gen.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package helper

import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"math/rand"
"time"

"github.com/google/uuid"
)

func JsonGenerator(writer io.Writer) {
b, err := ioutil.ReadFile("testdata/test1.json")
if err != nil {
panic(err)
}
jm := make(map[string]interface{})
_ = json.Unmarshal(b, &jm)

for {
uid1 := uuid.New().String()
uid2 := uuid.New().String()
id3 := rand.Intn(30)
jm["severity"] = []string{"INFO", "ERROR", "DEBUG", "WARN"}[rand.Intn(4)]
jm["insertId"] = uid1
jm["trace"] = uid2
jm["spanId"] = fmt.Sprintf("%d", id3)
jm["timestamp"] = time.Now().Format("2006-01-02T15:04:05-0700")
b, _ = json.Marshal(jm)
_, _ = fmt.Fprintln(writer, string(b))
time.Sleep(time.Second)
}
}
26 changes: 2 additions & 24 deletions cmd/helper/json_gen.go → internal/uitest/helper/json_gen/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,12 @@ package main
import (
"encoding/json"
"fmt"
"io"
"io/ioutil"
"math/rand"
"os"
"time"

"github.com/aurc/loggo/internal/uitest/helper"
"github.com/google/uuid"
)

Expand All @@ -31,29 +31,7 @@ func main() {
jm["spanId"] = fmt.Sprintf("%d", id3)
jm["timestamp"] = time.Now().Format(datelayout)
b, _ = json.Marshal(jm)
JsonGenerator(os.Stdout)
time.Sleep(time.Second)
}
}

func JsonGenerator(writer io.Writer) {
b, err := ioutil.ReadFile("testdata/test1.json")
if err != nil {
panic(err)
}
jm := make(map[string]interface{})
_ = json.Unmarshal(b, &jm)

for {
uid1 := uuid.New().String()
uid2 := uuid.New().String()
id3 := rand.Intn(30)
jm["insertId"] = uid1
jm["trace"] = uid2
jm["spanId"] = fmt.Sprintf("%d", id3)
jm["timestamp"] = time.Now().Format(datelayout)
b, _ = json.Marshal(jm)
fmt.Fprintln(writer, string(b))
helper.JsonGenerator(os.Stdout)
time.Sleep(time.Second)
}
}
20 changes: 20 additions & 0 deletions internal/uitest/json/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package main

import (
"os"

"github.com/aurc/loggo/pkg/loggo"
)

func main() {
app := loggo.NewApp("")
view := loggo.NewJsonView(app, true, nil, nil)

b, err := os.ReadFile("testdata/test1.json")
if err != nil {
panic(err)
}
view.SetJson(b)

app.Run(view)
}
27 changes: 27 additions & 0 deletions internal/uitest/loggo/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package main

import (
"os"

"github.com/aurc/loggo/internal/reader"
"github.com/aurc/loggo/internal/uitest/helper"
"github.com/aurc/loggo/pkg/loggo"
)

func main() {
inputChan := make(chan string, 1)
rd := reader.MakeReader("")
oldStdIn := os.Stdin
defer func() {
os.Stdin = oldStdIn
}()
r, w, _ := os.Pipe()
os.Stdin = r
go func() {
helper.JsonGenerator(w)
}()

_ = rd.StreamInto(inputChan)
app := loggo.NewLoggoApp(inputChan, "")
app.Run()
}
9 changes: 9 additions & 0 deletions internal/uitest/template/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
package main

import "github.com/aurc/loggo/pkg/loggo"

func main() {
app := loggo.NewApp("")
view := loggo.NewTemplateView(app, nil, nil)
app.Run(view)
}
15 changes: 15 additions & 0 deletions pkg/loggo/app.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,17 @@ type LoggoApp struct {
modal *tview.Flex
}

type Loggo interface {
Draw()
SetInputCapture(cap func(event *tcell.EventKey) *tcell.EventKey)
Stop()
SetFocus(primitive tview.Primitive)
ShowPrefabModal(text string, width, height int, buttons ...*tview.Button)
ShowModal(p tview.Primitive, width, height int)
DismissModal()
Config() *config.Config
}

func NewLoggoApp(input <-chan string, configFile string) *LoggoApp {
cfg, err := config.MakeConfig(configFile)
if err != nil {
Expand All @@ -35,6 +46,10 @@ func NewLoggoApp(input <-chan string, configFile string) *LoggoApp {
return lapp
}

func (a *LoggoApp) Config() *config.Config {
return a.config
}

func (a *LoggoApp) Draw() {
a.app.Draw()
}
Expand Down
103 changes: 103 additions & 0 deletions pkg/loggo/app_scaffold.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,103 @@
package loggo

import (
"github.com/aurc/loggo/pkg/config"
"github.com/gdamore/tcell/v2"
"github.com/rivo/tview"
)

type appScaffold struct {
app *tview.Application
config *config.Config
pages *tview.Pages
modal *tview.Flex
}

type App interface {
Stop()
Run(p tview.Primitive)
}

func NewApp(configFile string) *appScaffold {
scaffold := &appScaffold{}
cfg, err := config.MakeConfig(configFile)
if err != nil {
panic(err)
}
app := tview.NewApplication()

scaffold.app = app
scaffold.config = cfg

scaffold.pages = tview.NewPages()

return scaffold
}

func (a *appScaffold) Config() *config.Config {
return a.config
}

func (a *appScaffold) Draw() {
a.app.Draw()
}

func (a *appScaffold) SetInputCapture(cap func(event *tcell.EventKey) *tcell.EventKey) {
a.app.SetInputCapture(cap)
}

func (a *appScaffold) Stop() {
a.app.Stop()
}

func (a *appScaffold) SetFocus(primitive tview.Primitive) {
a.app.SetFocus(primitive)
}

func (a *appScaffold) ShowPrefabModal(text string, width, height int, buttons ...*tview.Button) {
modal := tview.NewFlex().SetDirection(tview.FlexRow)
modal.SetBackgroundColor(tcell.ColorDarkBlue)
mainContent := tview.NewTextView().
SetTextAlign(tview.AlignCenter).
SetWordWrap(true).
SetText(text)
mainContent.SetBackgroundColor(tcell.ColorDarkBlue).SetBorderPadding(1, 0, 2, 2)

buts := tview.NewFlex().SetDirection(tview.FlexColumn)
for _, b := range buttons {
buts.AddItem(tview.NewBox().SetBackgroundColor(tcell.ColorDarkBlue), 2, 1, false)
buts.AddItem(b, 0, 1, false)
}
buts.AddItem(tview.NewBox().SetBackgroundColor(tcell.ColorDarkBlue), 2, 1, false)

modal.AddItem(mainContent, 0, 1, false)
modal.AddItem(buts, 1, 1, false)
a.ShowModal(modal, width, height)
}

func (a *appScaffold) ShowModal(p tview.Primitive, width, height int) {
modContainer := tview.NewFlex().AddItem(p, 0, 1, false)
modContainer.SetBorder(true).SetBackgroundColor(tcell.ColorDarkBlue)
a.modal = tview.NewFlex().
AddItem(nil, 0, 1, false).
AddItem(tview.NewFlex().SetDirection(tview.FlexRow).
AddItem(nil, 0, 1, false).
AddItem(modContainer, height, 1, false).
AddItem(nil, 0, 1, false), width, 1, false).
AddItem(nil, 0, 1, false)
a.pages.AddPage("modal", a.modal, true, true)
}

func (a *appScaffold) DismissModal() {
a.pages.RemovePage("modal")
}

func (a *appScaffold) Run(p tview.Primitive) {
a.pages.AddPage("background", p, true, true)
if err := a.app.
SetRoot(a.pages, true).
EnableMouse(true).
Run(); err != nil {
panic(err)
}
}
4 changes: 2 additions & 2 deletions pkg/loggo/json_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (

type JsonView struct {
tview.Flex
app *LoggoApp
app Loggo
textView *tview.TextView
searchInput *tview.InputField
searchType *tview.DropDown
Expand All @@ -32,7 +32,7 @@ type JsonView struct {
closeCallback func()
}

func NewJsonView(app *LoggoApp, showQuit bool,
func NewJsonView(app Loggo, showQuit bool,
toggleFullScreenCallback, closeCallback func()) *JsonView {
v := &JsonView{
Flex: *tview.NewFlex(),
Expand Down
2 changes: 1 addition & 1 deletion pkg/loggo/log_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,7 @@ func (l *LogView) read() {
}

func (l *LogView) makeUIComponents() {
l.templateView = NewTemplateView(l.app, l.config, func() {
l.templateView = NewTemplateView(l.app, func() {
// Toggle full screen func
l.templateFullScreen = !l.templateFullScreen
l.makeLayoutsWithTemplateView()
Expand Down
7 changes: 3 additions & 4 deletions pkg/loggo/template_view.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import (

type TemplateView struct {
tview.Flex
app *LoggoApp
app Loggo
config *config.Config
table *tview.Table
data *TemplateData
Expand All @@ -20,12 +20,11 @@ type TemplateView struct {
closeCallback func()
}

func NewTemplateView(app *LoggoApp, config *config.Config,
toggleFullScreenCallback, closeCallback func()) *TemplateView {
func NewTemplateView(app Loggo, toggleFullScreenCallback, closeCallback func()) *TemplateView {
tv := &TemplateView{
Flex: *tview.NewFlex(),
app: app,
config: config,
config: app.Config(),
toggleFullScreenCallback: toggleFullScreenCallback,
closeCallback: closeCallback,
}
Expand Down