-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathviews.go
144 lines (115 loc) · 3.52 KB
/
views.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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
package main
import (
"fmt"
"math"
"strings"
"github.com/jroimartin/gocui"
)
func PrintTubeList(v *gocui.View) {
line := fmt.Sprintf("%-35s %-22s %-22s", "Tube", "ready/delayed/buried", "waiting/watching/using")
fmt.Fprintln(v, line)
//Reload the tube stats - will detect new tubes and drop removed tubes
cTubes.UseAll()
//Calculate the size for paging
_, vy := v.Size()
cTubes.Pages = int(math.Ceil(float64(len(cTubes.Conns)) / float64(vy - 1)))
offset := vy * (cTubes.Page - 1)
limit := vy * cTubes.Page
if limit > len(cTubes.Conns) {
limit = len(cTubes.Conns)
}
displayed := cTubes.Conns[offset:limit]
for _, tube := range displayed {
stats, _ := tube.Stats()
jobStats := stats["current-jobs-ready"] + " / " + stats["current-jobs-delayed"] + " / " + stats["current-jobs-buried"]
workerStats := stats["current-waiting"] + " / " + stats["current-watching"] + " / " + stats["current-using"]
line := fmt.Sprintf("%-35s %-22s %-22s", tube.Name, jobStats, workerStats)
fmt.Fprintln(v, line)
}
}
func PrintString(v *gocui.View, s string) {
fmt.Fprintf(v, s)
}
func PrintLine(v *gocui.View, line string) {
fmt.Fprintf(v, fmt.Sprintf("%s\n", line))
}
func PrintMenu(v *gocui.View) {
v.Editable = true
menuItems := []interface{}{
"Exit (Ctrl C)",
"Toggle Cmd Mode (Tab)",
}
if cTubes.Page < cTubes.Pages {
menuItems = append(menuItems, "Next Page (Ctrl N)")
}
if cTubes.Page > 1 {
menuItems = append(menuItems, "Prev Page (Ctrl P)")
}
if !cmdMode {
verbs := []string{}
for _, _ = range menuItems {
verbs = append(verbs, "%s")
}
line := fmt.Sprintf(strings.Join(verbs, " | "), menuItems...)
fmt.Fprintln(v, line)
} else {
prefix := fmt.Sprintf(cmdPrefix, cTubes.Selected)
fmt.Fprintln(v, prefix)
}
}
func MoveTubeCursor(g *gocui.Gui, mx, my int) error {
if cmdMode {
return nil
}
tv, err := g.View("tubes")
if err != nil {
return err
}
cx, cy := tv.Cursor()
ny := cy + my
//Check the cursor isn't trying to move above the first tube or past the last tube
if ny < 1 || ny > len(cTubes.Conns) {
return nil
}
if err = tv.SetCursor(cx, ny); err != nil {
return err
}
//Set the selected tube to the currently highlighted row
cTubes.SelectedIdx = ny-1
cTubes.Selected = cTubes.Names[cTubes.SelectedIdx]
debugLog("Set tube to: ", cTubes.Selected)
return nil
}
func ChangePage(g *gocui.Gui, d int) error {
if cmdMode {
return nil
}
debugLog("Changing page ", cTubes.Page, " by ", d)
if cTubes.Page < cTubes.Pages && d > 0 {
cTubes.Page ++
} else if cTubes.Page > 1 && d < 0 {
cTubes.Page --
}
if err := reloadTubes(g); err != nil {
return err
}
if err := reloadMenu(g); err != nil {
return err
}
return nil
}
func RefreshCursor(g *gocui.Gui) error {
tv, err := g.View("tubes")
if err != nil {
return err
}
_, cy := tv.Cursor()
if cy > len(cTubes.Conns) {
debugLog("Resetting cursor position ", cy, " to ", len(cTubes.Conns))
//Temporary fix for the cursor dropping off the bottom of the list
if err = tv.SetCursor(0, len(cTubes.Conns)); err != nil {
return err
}
}
return nil
}