141 lines
2.6 KiB
Go
141 lines
2.6 KiB
Go
package look
|
|
|
|
import (
|
|
//"database/sql"
|
|
tea "github.com/charmbracelet/bubbletea"
|
|
"github.com/charmbracelet/glamour"
|
|
"github.com/charmbracelet/bubbles/viewport"
|
|
"github.com/muesli/termenv"
|
|
tp "pgm/templates"
|
|
"encoding/json"
|
|
"fmt"
|
|
"github.com/spf13/viper"
|
|
"io/ioutil"
|
|
//"log"
|
|
"pgm/data"
|
|
//db2 "pgm/db"
|
|
"pgm/logger"
|
|
"time"
|
|
//"os"
|
|
)
|
|
|
|
var term = termenv.ColorProfile()
|
|
|
|
var (
|
|
columns = []string{"name", "company"}
|
|
rows = []string{"bob", "fart co"}
|
|
colCt = 2
|
|
sql_test = "SELECT usename, count(usename) FROM pg_stat_activity where usename is not null group by usename"
|
|
)
|
|
|
|
type tickMsg time.Time
|
|
|
|
|
|
func (e screen) Init() tea.Cmd {
|
|
return nil
|
|
}
|
|
|
|
|
|
type screen struct {
|
|
viewport viewport.Model
|
|
}
|
|
|
|
// the default view for a user once they load a database is called the look.
|
|
// the look loads
|
|
func Look(f string) {
|
|
var connectionDetails data.HostDetails
|
|
connectionDetails = loadHost(f)
|
|
_ = connectionDetails
|
|
|
|
|
|
var t tp.Tbl
|
|
t = tp.Tbl{columns, colCt, rows, ""}
|
|
tp.Table(t)
|
|
|
|
|
|
|
|
//model, err := newExample()
|
|
//if err != nil {
|
|
// fmt.Println("Could not intialize Bubble Tea model:", err)
|
|
// os.Exit(1)
|
|
//}
|
|
//
|
|
//if err := tea.NewProgram(model).Start(); err != nil {
|
|
// fmt.Println("Bummer, there's been an error:", err)
|
|
// os.Exit(1)
|
|
//}
|
|
|
|
|
|
}
|
|
|
|
func (e screen) Update(msg tea.Msg) (tea.Model, tea.Cmd) {
|
|
switch msg := msg.(type) {
|
|
case tea.WindowSizeMsg:
|
|
e.viewport.Width = msg.Width
|
|
return e, nil
|
|
|
|
case tea.KeyMsg:
|
|
switch msg.String() {
|
|
case "q", "ctrl+c":
|
|
return e, tea.Quit
|
|
default:
|
|
vp, _ := viewport.Update(msg, e.viewport)
|
|
e.viewport = vp
|
|
}
|
|
}
|
|
|
|
return e, nil
|
|
}
|
|
|
|
func (e screen) View() string {
|
|
return viewport.View(e.viewport) + e.helpView()
|
|
}
|
|
|
|
func (e screen) helpView() string {
|
|
return termenv.String("\n ↑/↓: Navigate • q: Quit\n").Foreground(term.Color("241")).String()
|
|
}
|
|
|
|
|
|
|
|
func newExample() (*screen, error) {
|
|
vp := viewport.Model{Width: 78, Height: 10}
|
|
renderer, err := glamour.NewTermRenderer(glamour.WithStylePath("notty"))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var t tp.Tbl
|
|
t = tp.Tbl{columns, colCt, rows, ""}
|
|
tp.Table(t)
|
|
|
|
|
|
str, err := renderer.Render(t.View)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
vp.SetContent(str)
|
|
|
|
return &screen{
|
|
viewport: vp,
|
|
}, nil
|
|
}
|
|
|
|
|
|
|
|
// gets information for host from hostDir
|
|
func loadHost(f string) data.HostDetails {
|
|
var hostDir string
|
|
hostDir = viper.GetString("hostsDir")
|
|
file, _ := ioutil.ReadFile(hostDir + "/"+ f)
|
|
|
|
data := data.HostDetails{}
|
|
|
|
err := json.Unmarshal(file, &data)
|
|
if err != nil {
|
|
logger.Logger("[ERROR] error loading host, malformed file: " + f)
|
|
logdir := viper.GetString("logsDir")
|
|
fmt.Println("fatal error occured, see logs at " + logdir)
|
|
}
|
|
return data
|
|
} |