-
Notifications
You must be signed in to change notification settings - Fork 221
/
allocations.go
88 lines (73 loc) · 1.91 KB
/
allocations.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
package render
import (
"io"
"strconv"
"time"
"github.com/logrusorgru/aurora"
"github.com/superfly/flyctl/api"
"github.com/superfly/flyctl/internal/format"
)
func AllocationStatuses(w io.Writer, title string, backupRegions []api.Region, statuses ...*api.AllocationStatus) error {
multipleVersions := hasMultipleVersions(statuses)
var rows [][]string
for _, alloc := range statuses {
version := strconv.Itoa(alloc.Version)
if multipleVersions && alloc.LatestVersion {
version = version + " " + aurora.Green("⇡").String()
}
region := alloc.Region
if len(backupRegions) > 0 {
for _, r := range backupRegions {
if alloc.Region == r.Code {
region = alloc.Region + "(B)"
break
}
}
}
rows = append(rows, []string{
alloc.IDShort, // ID,
alloc.TaskName, // Process
version, // Version
region, // Region
alloc.DesiredStatus, // Desired
format.AllocStatus(alloc), // Status
format.HealthChecksSummary(alloc), // Health Checks
strconv.Itoa(alloc.Restarts), // Restarts
format.RelativeTime(alloc.CreatedAt), // Created
})
}
return Table(w, title, rows,
"ID",
"Process",
"Version",
"Region",
"Desired",
"Status",
"Health Checks",
"Restarts",
"Created",
)
}
func hasMultipleVersions(allocations []*api.AllocationStatus) bool {
if len(allocations) == 0 {
return false
}
v := allocations[0].Version
for _, a := range allocations[1:] {
if v != a.Version {
return true
}
}
return false
}
func AllocationEvents(w io.Writer, title string, events ...api.AllocationEvent) error {
var rows [][]string
for _, evt := range events {
rows = append(rows, []string{
evt.Timestamp.Format(time.RFC3339),
evt.Type,
evt.Message,
})
}
return Table(w, title, rows, "Timestamp", "Type", "Message")
}