Skip to content

Commit eeebe0c

Browse files
committed
Add API
1 parent aacbeb1 commit eeebe0c

File tree

4 files changed

+29
-3
lines changed

4 files changed

+29
-3
lines changed

coderd/templates_test.go

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -608,6 +608,10 @@ func TestTemplateDAUs(t *testing.T) {
608608
Entries: []codersdk.DAUEntry{},
609609
}, daus, "no DAUs when stats are empty")
610610

611+
workspaces, err := client.Workspaces(ctx, codersdk.WorkspaceFilter{})
612+
require.NoError(t, err)
613+
assert.Zero(t, workspaces[0].LastUsedAt)
614+
611615
conn, err := client.DialWorkspaceAgent(ctx, resources[0].Agents[0].ID, opts)
612616
require.NoError(t, err)
613617
defer func() {
@@ -641,4 +645,10 @@ func TestTemplateDAUs(t *testing.T) {
641645
testutil.WaitShort, testutil.IntervalFast,
642646
"got %+v != %+v", daus, want,
643647
)
648+
649+
workspaces, err = client.Workspaces(ctx, codersdk.WorkspaceFilter{})
650+
require.NoError(t, err)
651+
assert.WithinDuration(t,
652+
time.Now(), workspaces[0].LastUsedAt, time.Minute,
653+
)
644654
}

coderd/workspaceagents.go

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -830,18 +830,20 @@ func (api *API) workspaceAgentReportStats(rw http.ResponseWriter, r *http.Reques
830830
// We will see duplicate reports when on idle connections
831831
// (e.g. web terminal left open) or when there are no connections at
832832
// all.
833-
var insert = !reflect.DeepEqual(lastReport, rep)
833+
// We also don't want to update the workspace last used at on duplicate
834+
// reports.
835+
var updateDB = !reflect.DeepEqual(lastReport, rep)
834836

835837
api.Logger.Debug(ctx, "read stats report",
836838
slog.F("interval", api.AgentStatsRefreshInterval),
837839
slog.F("agent", workspaceAgent.ID),
838840
slog.F("resource", resource.ID),
839841
slog.F("workspace", workspace.ID),
840-
slog.F("insert", insert),
842+
slog.F("update_db", updateDB),
841843
slog.F("payload", rep),
842844
)
843845

844-
if insert {
846+
if updateDB {
845847
lastReport = rep
846848

847849
_, err = api.Database.InsertAgentStat(ctx, database.InsertAgentStatParams{
@@ -860,6 +862,18 @@ func (api *API) workspaceAgentReportStats(rw http.ResponseWriter, r *http.Reques
860862
})
861863
return
862864
}
865+
866+
err = api.Database.UpdateWorkspaceLastUsedAt(ctx, database.UpdateWorkspaceLastUsedAtParams{
867+
ID: build.WorkspaceID,
868+
LastUsedAt: time.Now(),
869+
})
870+
if err != nil {
871+
httpapi.Write(rw, http.StatusBadRequest, codersdk.Response{
872+
Message: "Failed to update workspace last used at.",
873+
Detail: err.Error(),
874+
})
875+
return
876+
}
863877
}
864878

865879
select {

coderd/workspaces.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -941,6 +941,7 @@ func convertWorkspace(
941941
Name: workspace.Name,
942942
AutostartSchedule: autostartSchedule,
943943
TTLMillis: ttlMillis,
944+
LastUsedAt: workspace.LastUsedAt,
944945
}
945946
}
946947

codersdk/workspaces.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ type Workspace struct {
3030
Name string `json:"name"`
3131
AutostartSchedule *string `json:"autostart_schedule,omitempty"`
3232
TTLMillis *int64 `json:"ttl_ms,omitempty"`
33+
LastUsedAt time.Time `json:"last_used_at"`
3334
}
3435

3536
// CreateWorkspaceBuildRequest provides options to update the latest workspace build.

0 commit comments

Comments
 (0)