pgm/look/look.go
2020-10-30 20:12:51 -05:00

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
}