saving before doing something dumb
This commit is contained in:
parent
1f05d1579c
commit
cad1ad2fe2
@ -7,6 +7,7 @@ import (
|
|||||||
_ "github.com/lib/pq"
|
_ "github.com/lib/pq"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
"shiny-pancake/internal/model"
|
"shiny-pancake/internal/model"
|
||||||
|
"shiny-pancake/logger"
|
||||||
)
|
)
|
||||||
|
|
||||||
const datetime = `2006-01-02T15:04:05Z`
|
const datetime = `2006-01-02T15:04:05Z`
|
||||||
@ -57,8 +58,10 @@ func (db *Database) UserSessions() ([]*model.Session, error) {
|
|||||||
defer rows.Close()
|
defer rows.Close()
|
||||||
for rows.Next() {
|
for rows.Next() {
|
||||||
var sessCount model.Session
|
var sessCount model.Session
|
||||||
|
var l logger.Log
|
||||||
err = rows.Scan(&sessCount.Username, &sessCount.Count)
|
err = rows.Scan(&sessCount.Username, &sessCount.Count)
|
||||||
|
l = logger.Log{"info", logrus.Fields{"session" : sessCount.Count}, " count " + sessCount.Username + " users on host"}
|
||||||
|
logger.Lgr(&l)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
// handle this error
|
// handle this error
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|||||||
@ -3,14 +3,20 @@ package gui
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
|
"shiny-pancake/internal/model"
|
||||||
"shiny-pancake/logger"
|
"shiny-pancake/logger"
|
||||||
|
|
||||||
|
|
||||||
"shiny-pancake/internal/database"
|
"shiny-pancake/internal/database"
|
||||||
"strings"
|
"strings"
|
||||||
|
"github.com/rivo/tview"
|
||||||
tview "gitlab.com/tslocum/cview"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type resources struct {
|
||||||
|
ActSess []*model.Session
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
type panels struct {
|
type panels struct {
|
||||||
currentPanel int
|
currentPanel int
|
||||||
panel []panel
|
panel []panel
|
||||||
@ -32,7 +38,7 @@ func newState() *state {
|
|||||||
|
|
||||||
type Gui struct {
|
type Gui struct {
|
||||||
app *tview.Application
|
app *tview.Application
|
||||||
panels *tview.Panels
|
pages *tview.Pages
|
||||||
state *state
|
state *state
|
||||||
db *database.Database
|
db *database.Database
|
||||||
}
|
}
|
||||||
@ -40,16 +46,26 @@ type Gui struct {
|
|||||||
func New(db *database.Database) *Gui {
|
func New(db *database.Database) *Gui {
|
||||||
return &Gui{
|
return &Gui{
|
||||||
app: tview.NewApplication(),
|
app: tview.NewApplication(),
|
||||||
panels: tview.NewPanels(),
|
pages: tview.NewPages(),
|
||||||
state: newState(),
|
state: newState(),
|
||||||
db: db,
|
db: db,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
func (g *Gui) sessionPanel() *activeSessions {
|
||||||
|
for _, panel := range g.state.panels.panel {
|
||||||
|
if panel.name() == `activeSessions` {
|
||||||
|
return panel.(*activeSessions)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// Start start application
|
// Start start application
|
||||||
func (g *Gui) Start() error {
|
func (g *Gui) Start() error {
|
||||||
g.initPanels()
|
g.initPanels()
|
||||||
|
g.startMonitoring()
|
||||||
var l logger.Log
|
var l logger.Log
|
||||||
l = logger.Log{"info", logrus.Fields{"init" : "ran"}, "got this far"}
|
l = logger.Log{"info", logrus.Fields{"init" : "ran"}, "got this far"}
|
||||||
logger.Lgr(&l)
|
logger.Lgr(&l)
|
||||||
@ -62,46 +78,26 @@ func (g *Gui) Start() error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (g *Gui) Stop() {
|
func (g *Gui) Stop() {
|
||||||
|
g.stopMonitoring()
|
||||||
g.app.Stop()
|
g.app.Stop()
|
||||||
}
|
}
|
||||||
|
|
||||||
// Page "definitions"
|
// Page "definitions"
|
||||||
|
|
||||||
func (g *Gui) sessionPanel() *activeSessions {
|
|
||||||
for _, panel := range g.state.panels.panel {
|
|
||||||
if panel.name() == `activeSessions` {
|
|
||||||
return panel.(*activeSessions)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
func (g *Gui) initPanels() {
|
func (g *Gui) initPanels() {
|
||||||
|
|
||||||
g.state.tabBar = newTabBar()
|
g.state.tabBar = newTabBar()
|
||||||
|
|
||||||
// Page definitions
|
// Page definitions
|
||||||
s := newSessions(g)
|
s := newSessions(g)
|
||||||
|
|
||||||
var l logger.Log
|
var l logger.Log
|
||||||
l = logger.Log{"info", logrus.Fields{"initPanels" : "ran"}, "got this far"}
|
l = logger.Log{"info", logrus.Fields{"initPanels" : "ran"}, "got this far"}
|
||||||
logger.Lgr(&l)
|
logger.Lgr(&l)
|
||||||
|
|
||||||
/*
|
|
||||||
// NOTE: I would really like to get this working as it would be far neater.
|
|
||||||
// The issue is with the three panels being of different types.
|
|
||||||
// cannot use pg (type panel) as type tview.Primitive in argument to g.panels.AddPage:
|
|
||||||
// panel does not implement tview.Primitive (missing Blur method)
|
|
||||||
for idx, pg := range []panel{trips, cavers, caves} {
|
|
||||||
name := pg.name()
|
|
||||||
g.panels.AddPage(name, pg, true, idx == 0)
|
|
||||||
fmt.Fprintf(g.state.tabBar, ` %d ["%d"][darkcyan]%s[white][""] `, idx+1, idx, strings.Title(name))
|
|
||||||
}
|
|
||||||
g.state.tabBar.Highlight("0")
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Add panels to the "book"
|
g.pages.AddPage(`activeSessions`, s, true, true)
|
||||||
g.panels.AddPanel(`activeSessions`, s, true, true)
|
|
||||||
fmt.Fprintf(g.state.tabBar, ` ["%d"]%d %s[""] `, 0, 1, strings.Title(s.name()))
|
fmt.Fprintf(g.state.tabBar, ` ["%d"]%d %s[""] `, 0, 1, strings.Title(s.name()))
|
||||||
|
|
||||||
g.state.tabBar.Highlight("0")
|
g.state.tabBar.Highlight("0")
|
||||||
@ -110,6 +106,15 @@ func (g *Gui) initPanels() {
|
|||||||
|
|
||||||
g.state.panels.panel = append(g.state.panels.panel, s)
|
g.state.panels.panel = append(g.state.panels.panel, s)
|
||||||
|
|
||||||
|
layout := tview.NewFlex().SetDirection(tview.FlexRow).
|
||||||
|
AddItem(g.state.tabBar, 1, 1, false).
|
||||||
|
AddItem(g.pages, 0, 16, true)
|
||||||
|
|
||||||
g.app.SetRoot(g.panels, true)
|
g.app.SetRoot(layout, true)
|
||||||
|
g.goTo(`activeSessions`)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (g *Gui) goTo(page string) {
|
||||||
|
g.pages.SwitchToPage(page)
|
||||||
|
}
|
||||||
|
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
package gui
|
package gui
|
||||||
|
|
||||||
//func (g *Gui) startMonitoring() {
|
func (g *Gui) startMonitoring() {
|
||||||
// stop := make(chan int, 1)
|
stop := make(chan int, 1)
|
||||||
// g.state.stopChans["activeSessions"] = stop
|
g.state.stopChans["activeSessions"] = stop
|
||||||
// go g.sessionPanel().monitoringSessions(g)
|
go g.sessionPanel().monitoringSessions(g)
|
||||||
//}
|
}
|
||||||
//
|
|
||||||
//func (g *Gui) stopMonitoring() {
|
func (g *Gui) stopMonitoring() {
|
||||||
// g.state.stopChans["activeSessions"] <- 1
|
g.state.stopChans["activeSessions"] <- 1
|
||||||
//
|
|
||||||
//}
|
}
|
||||||
|
|
||||||
/*func (g *Gui) updateTask() {
|
/*func (g *Gui) updateTask() {
|
||||||
g.app.QueueUpdateDraw(func() {
|
g.app.QueueUpdateDraw(func() {
|
||||||
|
|||||||
@ -3,7 +3,8 @@ package gui
|
|||||||
type panel interface {
|
type panel interface {
|
||||||
name() string
|
name() string
|
||||||
entries(*Gui)
|
entries(*Gui)
|
||||||
//setEntries(*Gui)
|
setEntries(*Gui)
|
||||||
//focus(*Gui)
|
updateEntries(*Gui)
|
||||||
//unfocus()
|
focus(*Gui)
|
||||||
|
unfocus()
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,14 +1,13 @@
|
|||||||
package gui
|
package gui
|
||||||
|
|
||||||
import (
|
import (
|
||||||
tview "gitlab.com/tslocum/cview"
|
|
||||||
|
"github.com/gdamore/tcell/v2"
|
||||||
|
"github.com/rivo/tview"
|
||||||
"shiny-pancake/internal/model"
|
"shiny-pancake/internal/model"
|
||||||
|
"time"
|
||||||
)
|
)
|
||||||
|
|
||||||
type resources struct {
|
|
||||||
ActSess []*model.Session
|
|
||||||
//statsLocations []*model.Statistic
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
type activeSessions struct {
|
type activeSessions struct {
|
||||||
@ -44,3 +43,66 @@ func (t *activeSessions) entries(g *Gui) {
|
|||||||
g.state.resources.ActSess = sss
|
g.state.resources.ActSess = sss
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *activeSessions) setEntries(g *Gui) {
|
||||||
|
t.entries(g)
|
||||||
|
table := t.Clear()
|
||||||
|
|
||||||
|
headers := []string{
|
||||||
|
"user",
|
||||||
|
"session count",
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, header := range headers {
|
||||||
|
table.SetCell(0, i, &tview.TableCell{
|
||||||
|
Text: header,
|
||||||
|
NotSelectable: true,
|
||||||
|
Align: tview.AlignLeft,
|
||||||
|
Color: tview.Styles.PrimaryTextColor,
|
||||||
|
BackgroundColor: tview.Styles.PrimitiveBackgroundColor,
|
||||||
|
Attributes: tcell.AttrBold,
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
for i, s := range g.state.resources.ActSess {
|
||||||
|
table.SetCell(i+1, 0, tview.NewTableCell(s.Username).
|
||||||
|
SetTextColor(tview.Styles.PrimaryTextColor).
|
||||||
|
SetMaxWidth(30).
|
||||||
|
SetExpansion(1))
|
||||||
|
|
||||||
|
table.SetCell(i+1, 1, tview.NewTableCell(string(s.Count)).
|
||||||
|
SetTextColor(tview.Styles.PrimaryTextColor).
|
||||||
|
SetMaxWidth(30).
|
||||||
|
SetExpansion(1))
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *activeSessions) updateEntries(g *Gui) {
|
||||||
|
g.app.QueueUpdateDraw(func() {
|
||||||
|
t.setEntries(g)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *activeSessions) focus(g *Gui) {
|
||||||
|
t.SetSelectable(true, false)
|
||||||
|
g.app.SetFocus(t)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *activeSessions) unfocus() {
|
||||||
|
t.SetSelectable(false, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (t *activeSessions) monitoringSessions(g *Gui) {
|
||||||
|
ticker := time.NewTicker(5 * time.Minute)
|
||||||
|
|
||||||
|
LOOP:
|
||||||
|
for {
|
||||||
|
select {
|
||||||
|
case <-ticker.C:
|
||||||
|
t.updateEntries(g)
|
||||||
|
case <-g.state.stopChans["trips"]:
|
||||||
|
ticker.Stop()
|
||||||
|
break LOOP
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1,10 +1,15 @@
|
|||||||
package gui
|
package gui
|
||||||
|
|
||||||
|
|
||||||
import (
|
import (
|
||||||
tview "gitlab.com/tslocum/cview"
|
"github.com/rivo/tview"
|
||||||
)
|
)
|
||||||
|
|
||||||
func newTabBar() *tview.TextView {
|
func newTabBar() *tview.TextView {
|
||||||
return tview.NewTextView()
|
return tview.NewTextView().
|
||||||
|
SetDynamicColors(true).
|
||||||
|
SetRegions(true).
|
||||||
|
SetWrap(false)/*.
|
||||||
|
SetHighlightedFunc(func(added, removed, remaining []string) {
|
||||||
|
g.pages.SwitchToPage(added[0])
|
||||||
|
})*/
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user