Skip to content

Commit 4b868d2

Browse files
committed
fix: cli/list: show extension in list output
1 parent 3ecb323 commit 4b868d2

File tree

1 file changed

+49
-24
lines changed

1 file changed

+49
-24
lines changed

cli/list.go

+49-24
Original file line numberDiff line numberDiff line change
@@ -86,28 +86,6 @@ func list() *cobra.Command {
8686
}
8787

8888
duration := time.Now().UTC().Sub(workspace.LatestBuild.Job.CreatedAt).Truncate(time.Second)
89-
if duration > time.Hour {
90-
duration = duration.Truncate(time.Hour)
91-
}
92-
if duration > time.Minute {
93-
duration = duration.Truncate(time.Minute)
94-
}
95-
days := 0
96-
for duration.Hours() > 24 {
97-
days++
98-
duration -= 24 * time.Hour
99-
}
100-
durationDisplay := duration.String()
101-
if days > 0 {
102-
durationDisplay = fmt.Sprintf("%dd%s", days, durationDisplay)
103-
}
104-
if strings.HasSuffix(durationDisplay, "m0s") {
105-
durationDisplay = durationDisplay[:len(durationDisplay)-2]
106-
}
107-
if strings.HasSuffix(durationDisplay, "h0m") {
108-
durationDisplay = durationDisplay[:len(durationDisplay)-2]
109-
}
110-
11189
autostartDisplay := "-"
11290
if workspace.AutostartSchedule != "" {
11391
if sched, err := schedule.Weekly(workspace.AutostartSchedule); err == nil {
@@ -117,15 +95,18 @@ func list() *cobra.Command {
11795

11896
autostopDisplay := "-"
11997
if workspace.TTL != nil {
120-
autostopDisplay = workspace.TTL.String()
98+
autostopDisplay = durationDisplay(*workspace.TTL)
99+
if has, ext := hasExtension(workspace); has {
100+
autostopDisplay += fmt.Sprintf(" (+%s)", durationDisplay(ext))
101+
}
121102
}
122103

123104
user := usersByID[workspace.OwnerID]
124105
tableWriter.AppendRow(table.Row{
125106
user.Username + "/" + workspace.Name,
126107
workspace.TemplateName,
127108
status,
128-
durationDisplay,
109+
durationDisplay(duration),
129110
workspace.Outdated,
130111
autostartDisplay,
131112
autostopDisplay,
@@ -139,3 +120,47 @@ func list() *cobra.Command {
139120
"Specify a column to filter in the table.")
140121
return cmd
141122
}
123+
124+
func hasExtension(ws codersdk.Workspace) (bool, time.Duration) {
125+
if ws.LatestBuild.Transition != codersdk.WorkspaceTransitionStart {
126+
return false, 0
127+
}
128+
if ws.LatestBuild.Deadline.IsZero() {
129+
return false, 0
130+
}
131+
if ws.TTL == nil {
132+
return false, 0
133+
}
134+
delta := ws.LatestBuild.Deadline.Add(-*ws.TTL).Sub(ws.LatestBuild.UpdatedAt).Round(time.Minute)
135+
if delta <= 0 {
136+
return false, 0
137+
}
138+
139+
return true, delta
140+
}
141+
142+
func durationDisplay(d time.Duration) string {
143+
duration := d
144+
if duration > time.Hour {
145+
duration = duration.Truncate(time.Hour)
146+
}
147+
if duration > time.Minute {
148+
duration = duration.Truncate(time.Minute)
149+
}
150+
days := 0
151+
for duration.Hours() > 24 {
152+
days++
153+
duration -= 24 * time.Hour
154+
}
155+
durationDisplay := duration.String()
156+
if days > 0 {
157+
durationDisplay = fmt.Sprintf("%dd%s", days, durationDisplay)
158+
}
159+
if strings.HasSuffix(durationDisplay, "m0s") {
160+
durationDisplay = durationDisplay[:len(durationDisplay)-2]
161+
}
162+
if strings.HasSuffix(durationDisplay, "h0m") {
163+
durationDisplay = durationDisplay[:len(durationDisplay)-2]
164+
}
165+
return durationDisplay
166+
}

0 commit comments

Comments
 (0)