-
Notifications
You must be signed in to change notification settings - Fork 493
/
cmd-list-cachesummary.go
90 lines (74 loc) · 2.1 KB
/
cmd-list-cachesummary.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
package main
import (
"fmt"
"os"
"time"
"github.com/olekukonko/tablewriter"
)
type listCacheSummaryCmd struct {
TenantID string `arg:"" help:"tenant-id within the bucket"`
backendOptions
}
func (l *listCacheSummaryCmd) Run(ctx *globalOptions) error {
r, _, c, err := loadBackend(&l.backendOptions, ctx)
if err != nil {
return err
}
windowDuration := time.Hour
results, err := loadBucket(r, c, l.TenantID, windowDuration, false)
if err != nil {
return err
}
displayCacheSummary(results)
return nil
}
func displayCacheSummary(results []blockStats) {
fmt.Println()
fmt.Println("Bloom filter shards by day and compaction level:")
columns := []string{"bloom filter age"}
out := make([][]string, 0)
bloomTable := make([][]int, 0)
for _, r := range results {
row := r.CompactionLevel
// extend rows
for len(bloomTable)-1 < int(row) {
bloomTable = append(bloomTable, make([]int, 0))
}
column := -1 * (int(time.Until(r.StartTime) / (time.Hour * 24)))
// extend column of given row
for len(bloomTable[row])-1 < column {
bloomTable[row] = append(bloomTable[row], 0)
}
// extend columns (header of bloomTable)
for i := len(columns) - 1; i <= column; i++ {
columns = append(columns, fmt.Sprintf("%d days", i))
}
if int(row) < len(bloomTable) && column < len(bloomTable[row]) {
bloomTable[row][column] += int(r.BloomShardCount)
} else {
fmt.Println("something wrong with row / column", row, column)
}
}
fmt.Println()
columnTotals := make([]int, len(columns)-1)
for i, row := range bloomTable {
line := make([]string, 0)
line = append(line, fmt.Sprintf("compaction level %d", i))
for j, column := range row {
line = append(line, fmt.Sprintf("%d", column))
columnTotals[j] += column
}
out = append(out, line)
}
columnTotalsRow := make([]string, 0, len(columns))
columnTotalsRow = append(columnTotalsRow, "total")
for _, total := range columnTotals {
columnTotalsRow = append(columnTotalsRow, fmt.Sprintf("%d", total))
}
fmt.Println()
w := tablewriter.NewWriter(os.Stdout)
w.SetHeader(columns)
w.AppendBulk(out)
w.SetFooter(columnTotalsRow)
w.Render()
}