-
Notifications
You must be signed in to change notification settings - Fork 2
/
logsview.go
102 lines (76 loc) · 2.13 KB
/
logsview.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
package main
import (
"fmt"
"log"
"time"
"github.com/jroimartin/gocui"
)
type logLevel int
const (
info logLevel = 0
warning logLevel = 1
errorr logLevel = 2
)
type logEntry struct {
Timestamp time.Time
Level logLevel
Message string
}
type logListView struct {
viewBase
form *formEdit
}
func newlogListView(physicalView string, fmtnormal string, fmtheader string, fmtselected string) *logListView {
cv := new(logListView)
cv.grid = makeNewDataGrid()
cv.mappedToPhysicalView = physicalView
cv.init(fmtnormal, fmtheader, fmtselected)
return cv
}
func (cv *logListView) init(fmtnormal string, fmtheader string, fmtselected string) {
cv.grid.fmtForeground = fmtnormal
cv.grid.fmtHeader = fmtheader
cv.grid.fmtSelected = fmtselected
cv.shortcuts = nil
cv.shortcuts = append(cv.shortcuts, &keyHandle{"Scroll Up", "Up", gocui.KeyArrowUp, gocui.ModNone, func() { cv.grid.moveSelectionUp() }, false, ""})
cv.shortcuts = append(cv.shortcuts, &keyHandle{"Scroll Down", "Down", gocui.KeyArrowDown, gocui.ModNone, func() { cv.grid.moveSelectionDown() }, false, ""})
cv.grid.header = "[Logs]"
cv.grid.addColumn("Level", "Level", stringRow)
cv.grid.addColumn("Timestamp", "Timestamp", dateRow)
cv.grid.addColumn("Message", "Message", stringRow)
cv.grid.addDisplayColumn("Level", "Level", 6)
cv.grid.addDisplayColumn("Timestamp", "Timestamp", 18)
cv.grid.addDisplayColumn("Message", "Message", 0)
}
func (cv *logListView) refreshView(g *gocui.Gui) {
v, err := g.View(cv.mappedToPhysicalView)
if err != nil {
log.Panicln(err.Error())
return
}
v.Clear()
x, y := v.Size()
cv.grid.items = context.logs
cv.grid.setRenderSize(x, y)
for _, row := range cv.grid.getGridRows() {
fmt.Fprintln(v, row)
}
if cv.form != nil {
cv.form.layout(g)
}
}
func (cv *logListView) getShortCuts() []*keyHandle {
return cv.shortcuts
}
func (cv *logListView) getGrid() *dataGrid {
return cv.grid
}
func (cv *logListView) getPhysicalView() string {
return cv.mappedToPhysicalView
}
func writelog(lvl logLevel, e string) {
context.logs = append(context.logs, &logEntry{time.Now(), lvl, e})
}
func logError(e string) {
writelog(errorr, e)
}