Skip to content

Commit 19d7da3

Browse files
authored
refactor(coderd/database): split Time and Now into dbtime package (#9482)
Ref: #9380
1 parent 702b064 commit 19d7da3

File tree

89 files changed

+466
-390
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

89 files changed

+466
-390
lines changed

agent/agent.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ import (
3838
"github.com/coder/coder/v2/agent/reconnectingpty"
3939
"github.com/coder/coder/v2/buildinfo"
4040
"github.com/coder/coder/v2/cli/gitauth"
41-
"github.com/coder/coder/v2/coderd/database"
41+
"github.com/coder/coder/v2/coderd/database/dbtime"
4242
"github.com/coder/coder/v2/codersdk"
4343
"github.com/coder/coder/v2/codersdk/agentsdk"
4444
"github.com/coder/coder/v2/tailnet"
@@ -523,7 +523,7 @@ func (a *agent) reportLifecycleLoop(ctx context.Context) {
523523
func (a *agent) setLifecycle(ctx context.Context, state codersdk.WorkspaceAgentLifecycle) {
524524
report := agentsdk.PostLifecycleRequest{
525525
State: state,
526-
ChangedAt: database.Now(),
526+
ChangedAt: dbtime.Now(),
527527
}
528528

529529
a.lifecycleMu.Lock()

cli/cliui/provisionerjob_test.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ import (
1313

1414
"github.com/coder/coder/v2/cli/clibase"
1515
"github.com/coder/coder/v2/cli/cliui"
16-
"github.com/coder/coder/v2/coderd/database"
16+
"github.com/coder/coder/v2/coderd/database/dbtime"
1717
"github.com/coder/coder/v2/codersdk"
1818
"github.com/coder/coder/v2/pty/ptytest"
1919
)
@@ -29,13 +29,13 @@ func TestProvisionerJob(t *testing.T) {
2929
<-test.Next
3030
test.JobMutex.Lock()
3131
test.Job.Status = codersdk.ProvisionerJobRunning
32-
now := database.Now()
32+
now := dbtime.Now()
3333
test.Job.StartedAt = &now
3434
test.JobMutex.Unlock()
3535
<-test.Next
3636
test.JobMutex.Lock()
3737
test.Job.Status = codersdk.ProvisionerJobSucceeded
38-
now = database.Now()
38+
now = dbtime.Now()
3939
test.Job.CompletedAt = &now
4040
close(test.Logs)
4141
test.JobMutex.Unlock()
@@ -56,17 +56,17 @@ func TestProvisionerJob(t *testing.T) {
5656
<-test.Next
5757
test.JobMutex.Lock()
5858
test.Job.Status = codersdk.ProvisionerJobRunning
59-
now := database.Now()
59+
now := dbtime.Now()
6060
test.Job.StartedAt = &now
6161
test.Logs <- codersdk.ProvisionerJobLog{
62-
CreatedAt: database.Now(),
62+
CreatedAt: dbtime.Now(),
6363
Stage: "Something",
6464
}
6565
test.JobMutex.Unlock()
6666
<-test.Next
6767
test.JobMutex.Lock()
6868
test.Job.Status = codersdk.ProvisionerJobSucceeded
69-
now = database.Now()
69+
now = dbtime.Now()
7070
test.Job.CompletedAt = &now
7171
close(test.Logs)
7272
test.JobMutex.Unlock()
@@ -99,7 +99,7 @@ func TestProvisionerJob(t *testing.T) {
9999
<-test.Next
100100
test.JobMutex.Lock()
101101
test.Job.Status = codersdk.ProvisionerJobCanceled
102-
now := database.Now()
102+
now := dbtime.Now()
103103
test.Job.CompletedAt = &now
104104
close(test.Logs)
105105
test.JobMutex.Unlock()
@@ -123,7 +123,7 @@ type provisionerJobTest struct {
123123
func newProvisionerJob(t *testing.T) provisionerJobTest {
124124
job := &codersdk.ProvisionerJob{
125125
Status: codersdk.ProvisionerJobPending,
126-
CreatedAt: database.Now(),
126+
CreatedAt: dbtime.Now(),
127127
}
128128
jobLock := sync.Mutex{}
129129
logs := make(chan codersdk.ProvisionerJobLog, 1)

cli/cliui/resources.go

+4-5
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@ import (
99
"github.com/jedib0t/go-pretty/v6/table"
1010
"golang.org/x/mod/semver"
1111

12-
"github.com/coder/coder/v2/coderd/database"
13-
12+
"github.com/coder/coder/v2/coderd/database/dbtime"
1413
"github.com/coder/coder/v2/codersdk"
1514
)
1615

@@ -122,15 +121,15 @@ func WorkspaceResources(writer io.Writer, resources []codersdk.WorkspaceResource
122121
func renderAgentStatus(agent codersdk.WorkspaceAgent) string {
123122
switch agent.Status {
124123
case codersdk.WorkspaceAgentConnecting:
125-
since := database.Now().Sub(agent.CreatedAt)
124+
since := dbtime.Now().Sub(agent.CreatedAt)
126125
return DefaultStyles.Warn.Render("⦾ connecting") + " " +
127126
DefaultStyles.Placeholder.Render("["+strconv.Itoa(int(since.Seconds()))+"s]")
128127
case codersdk.WorkspaceAgentDisconnected:
129-
since := database.Now().Sub(*agent.DisconnectedAt)
128+
since := dbtime.Now().Sub(*agent.DisconnectedAt)
130129
return DefaultStyles.Error.Render("⦾ disconnected") + " " +
131130
DefaultStyles.Placeholder.Render("["+strconv.Itoa(int(since.Seconds()))+"s]")
132131
case codersdk.WorkspaceAgentTimeout:
133-
since := database.Now().Sub(agent.CreatedAt)
132+
since := dbtime.Now().Sub(agent.CreatedAt)
134133
return fmt.Sprintf(
135134
"%s %s",
136135
DefaultStyles.Warn.Render("⦾ timeout"),

cli/cliui/resources_test.go

+3-3
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import (
77
"github.com/stretchr/testify/assert"
88

99
"github.com/coder/coder/v2/cli/cliui"
10-
"github.com/coder/coder/v2/coderd/database"
10+
"github.com/coder/coder/v2/coderd/database/dbtime"
1111
"github.com/coder/coder/v2/codersdk"
1212
"github.com/coder/coder/v2/pty/ptytest"
1313
)
@@ -44,7 +44,7 @@ func TestWorkspaceResources(t *testing.T) {
4444
t.Run("MultipleStates", func(t *testing.T) {
4545
t.Parallel()
4646
ptty := ptytest.New(t)
47-
disconnected := database.Now().Add(-4 * time.Second)
47+
disconnected := dbtime.Now().Add(-4 * time.Second)
4848
done := make(chan struct{})
4949
go func() {
5050
err := cliui.WorkspaceResources(ptty.Output(), []codersdk.WorkspaceResource{{
@@ -60,7 +60,7 @@ func TestWorkspaceResources(t *testing.T) {
6060
Type: "google_compute_instance",
6161
Name: "dev",
6262
Agents: []codersdk.WorkspaceAgent{{
63-
CreatedAt: database.Now().Add(-10 * time.Second),
63+
CreatedAt: dbtime.Now().Add(-10 * time.Second),
6464
Status: codersdk.WorkspaceAgentConnecting,
6565
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
6666
Name: "dev",

cli/server_createadminuser.go

+7-6
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/coder/coder/v2/cli/clibase"
1616
"github.com/coder/coder/v2/cli/cliui"
1717
"github.com/coder/coder/v2/coderd/database"
18+
"github.com/coder/coder/v2/coderd/database/dbtime"
1819
"github.com/coder/coder/v2/coderd/gitsshkey"
1920
"github.com/coder/coder/v2/coderd/httpapi"
2021
"github.com/coder/coder/v2/coderd/rbac"
@@ -180,8 +181,8 @@ func (r *RootCmd) newCreateAdminUserCommand() *clibase.Cmd {
180181
Email: newUserEmail,
181182
Username: newUserUsername,
182183
HashedPassword: []byte(hashedPassword),
183-
CreatedAt: database.Now(),
184-
UpdatedAt: database.Now(),
184+
CreatedAt: dbtime.Now(),
185+
UpdatedAt: dbtime.Now(),
185186
RBACRoles: []string{rbac.RoleOwner()},
186187
LoginType: database.LoginTypePassword,
187188
})
@@ -196,8 +197,8 @@ func (r *RootCmd) newCreateAdminUserCommand() *clibase.Cmd {
196197
}
197198
_, err = tx.InsertGitSSHKey(ctx, database.InsertGitSSHKeyParams{
198199
UserID: newUser.ID,
199-
CreatedAt: database.Now(),
200-
UpdatedAt: database.Now(),
200+
CreatedAt: dbtime.Now(),
201+
UpdatedAt: dbtime.Now(),
201202
PrivateKey: privateKey,
202203
PublicKey: publicKey,
203204
})
@@ -210,8 +211,8 @@ func (r *RootCmd) newCreateAdminUserCommand() *clibase.Cmd {
210211
_, err := tx.InsertOrganizationMember(ctx, database.InsertOrganizationMemberParams{
211212
OrganizationID: org.ID,
212213
UserID: newUser.ID,
213-
CreatedAt: database.Now(),
214-
UpdatedAt: database.Now(),
214+
CreatedAt: dbtime.Now(),
215+
UpdatedAt: dbtime.Now(),
215216
Roles: []string{rbac.RoleOrgAdmin(org.ID)},
216217
})
217218
if err != nil {

cli/server_createadminuser_test.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313

1414
"github.com/coder/coder/v2/cli/clitest"
1515
"github.com/coder/coder/v2/coderd/database"
16+
"github.com/coder/coder/v2/coderd/database/dbtime"
1617
"github.com/coder/coder/v2/coderd/database/postgres"
1718
"github.com/coder/coder/v2/coderd/rbac"
1819
"github.com/coder/coder/v2/coderd/userpassword"
@@ -106,15 +107,15 @@ func TestServerCreateAdminUser(t *testing.T) {
106107
_, err = db.InsertOrganization(ctx, database.InsertOrganizationParams{
107108
ID: org1ID,
108109
Name: org1Name,
109-
CreatedAt: database.Now(),
110-
UpdatedAt: database.Now(),
110+
CreatedAt: dbtime.Now(),
111+
UpdatedAt: dbtime.Now(),
111112
})
112113
require.NoError(t, err)
113114
_, err = db.InsertOrganization(ctx, database.InsertOrganizationParams{
114115
ID: org2ID,
115116
Name: org2Name,
116-
CreatedAt: database.Now(),
117-
UpdatedAt: database.Now(),
117+
CreatedAt: dbtime.Now(),
118+
UpdatedAt: dbtime.Now(),
118119
})
119120
require.NoError(t, err)
120121

cmd/cliui/main.go

+8-8
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ import (
1717

1818
"github.com/coder/coder/v2/cli/clibase"
1919
"github.com/coder/coder/v2/cli/cliui"
20-
"github.com/coder/coder/v2/coderd/database"
20+
"github.com/coder/coder/v2/coderd/database/dbtime"
2121
"github.com/coder/coder/v2/codersdk"
2222
)
2323

@@ -82,21 +82,21 @@ func main() {
8282
Handler: func(inv *clibase.Invocation) error {
8383
job := codersdk.ProvisionerJob{
8484
Status: codersdk.ProvisionerJobPending,
85-
CreatedAt: database.Now(),
85+
CreatedAt: dbtime.Now(),
8686
}
8787
go func() {
8888
time.Sleep(time.Second)
8989
if job.Status != codersdk.ProvisionerJobPending {
9090
return
9191
}
92-
started := database.Now()
92+
started := dbtime.Now()
9393
job.StartedAt = &started
9494
job.Status = codersdk.ProvisionerJobRunning
9595
time.Sleep(3 * time.Second)
9696
if job.Status != codersdk.ProvisionerJobRunning {
9797
return
9898
}
99-
completed := database.Now()
99+
completed := dbtime.Now()
100100
job.CompletedAt = &completed
101101
job.Status = codersdk.ProvisionerJobSucceeded
102102
}()
@@ -154,7 +154,7 @@ func main() {
154154
job.Status = codersdk.ProvisionerJobCanceling
155155
time.Sleep(time.Second)
156156
job.Status = codersdk.ProvisionerJobCanceled
157-
completed := database.Now()
157+
completed := dbtime.Now()
158158
job.CompletedAt = &completed
159159
return nil
160160
},
@@ -236,7 +236,7 @@ func main() {
236236
time.Sleep(144 * time.Millisecond)
237237
}
238238
agent.LifecycleState = codersdk.WorkspaceAgentLifecycleReady
239-
readyAt := database.Now()
239+
readyAt := dbtime.Now()
240240
agent.ReadyAt = &readyAt
241241
}()
242242
} else {
@@ -258,7 +258,7 @@ func main() {
258258
root.Children = append(root.Children, &clibase.Cmd{
259259
Use: "resources",
260260
Handler: func(inv *clibase.Invocation) error {
261-
disconnected := database.Now().Add(-4 * time.Second)
261+
disconnected := dbtime.Now().Add(-4 * time.Second)
262262
return cliui.WorkspaceResources(inv.Stdout, []codersdk.WorkspaceResource{{
263263
Transition: codersdk.WorkspaceTransitionStart,
264264
Type: "google_compute_disk",
@@ -272,7 +272,7 @@ func main() {
272272
Type: "google_compute_instance",
273273
Name: "dev",
274274
Agents: []codersdk.WorkspaceAgent{{
275-
CreatedAt: database.Now().Add(-10 * time.Second),
275+
CreatedAt: dbtime.Now().Add(-10 * time.Second),
276276
Status: codersdk.WorkspaceAgentConnecting,
277277
LifecycleState: codersdk.WorkspaceAgentLifecycleCreated,
278278
Name: "dev",

coderd/activitybump.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111

1212
"cdr.dev/slog"
1313
"github.com/coder/coder/v2/coderd/database"
14+
"github.com/coder/coder/v2/coderd/database/dbtime"
1415
)
1516

1617
// activityBumpWorkspace automatically bumps the workspace's auto-off timer
@@ -69,14 +70,14 @@ func activityBumpWorkspace(ctx context.Context, log slog.Logger, db database.Sto
6970
return nil
7071
}
7172

72-
newDeadline := database.Now().Add(bumpAmount)
73+
newDeadline := dbtime.Now().Add(bumpAmount)
7374
if !build.MaxDeadline.IsZero() && newDeadline.After(build.MaxDeadline) {
7475
newDeadline = build.MaxDeadline
7576
}
7677

7778
if err := s.UpdateWorkspaceBuildByID(ctx, database.UpdateWorkspaceBuildByIDParams{
7879
ID: build.ID,
79-
UpdatedAt: database.Now(),
80+
UpdatedAt: dbtime.Now(),
8081
ProvisionerState: build.ProvisionerState,
8182
Deadline: newDeadline,
8283
MaxDeadline: build.MaxDeadline,

coderd/activitybump_test.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/coder/coder/v2/coderd/coderdtest"
1414
"github.com/coder/coder/v2/coderd/database"
1515
"github.com/coder/coder/v2/coderd/database/dbtestutil"
16+
"github.com/coder/coder/v2/coderd/database/dbtime"
1617
"github.com/coder/coder/v2/coderd/schedule"
1718
"github.com/coder/coder/v2/codersdk"
1819
"github.com/coder/coder/v2/codersdk/agentsdk"
@@ -77,10 +78,10 @@ func TestWorkspaceActivityBump(t *testing.T) {
7778

7879
err = db.UpdateWorkspaceBuildByID(ctx, database.UpdateWorkspaceBuildByIDParams{
7980
ID: workspace.LatestBuild.ID,
80-
UpdatedAt: database.Now(),
81+
UpdatedAt: dbtime.Now(),
8182
ProvisionerState: dbBuild.ProvisionerState,
8283
Deadline: dbBuild.Deadline,
83-
MaxDeadline: database.Now().Add(maxTTL),
84+
MaxDeadline: dbtime.Now().Add(maxTTL),
8485
})
8586
require.NoError(t, err)
8687
}
@@ -146,11 +147,11 @@ func TestWorkspaceActivityBump(t *testing.T) {
146147

147148
// If the workspace has a max deadline, the deadline must not exceed
148149
// it.
149-
if maxTTL != 0 && database.Now().Add(ttl).After(workspace.LatestBuild.MaxDeadline.Time) {
150+
if maxTTL != 0 && dbtime.Now().Add(ttl).After(workspace.LatestBuild.MaxDeadline.Time) {
150151
require.Equal(t, workspace.LatestBuild.Deadline.Time, workspace.LatestBuild.MaxDeadline.Time)
151152
return
152153
}
153-
require.WithinDuration(t, database.Now().Add(ttl), workspace.LatestBuild.Deadline.Time, 3*time.Second)
154+
require.WithinDuration(t, dbtime.Now().Add(ttl), workspace.LatestBuild.Deadline.Time, 3*time.Second)
154155
}
155156
}
156157

coderd/apikey.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import (
1515
"github.com/coder/coder/v2/coderd/apikey"
1616
"github.com/coder/coder/v2/coderd/audit"
1717
"github.com/coder/coder/v2/coderd/database"
18+
"github.com/coder/coder/v2/coderd/database/dbtime"
1819
"github.com/coder/coder/v2/coderd/httpapi"
1920
"github.com/coder/coder/v2/coderd/httpmw"
2021
"github.com/coder/coder/v2/coderd/rbac"
@@ -84,7 +85,7 @@ func (api *API) postToken(rw http.ResponseWriter, r *http.Request) {
8485
UserID: user.ID,
8586
LoginType: database.LoginTypeToken,
8687
DeploymentValues: api.DeploymentValues,
87-
ExpiresAt: database.Now().Add(lifeTime),
88+
ExpiresAt: dbtime.Now().Add(lifeTime),
8889
Scope: scope,
8990
LifetimeSeconds: int64(lifeTime.Seconds()),
9091
TokenName: tokenName,
@@ -132,7 +133,7 @@ func (api *API) postAPIKey(rw http.ResponseWriter, r *http.Request) {
132133
RemoteAddr: r.RemoteAddr,
133134
// All api generated keys will last 1 week. Browser login tokens have
134135
// a shorter life.
135-
ExpiresAt: database.Now().Add(lifeTime),
136+
ExpiresAt: dbtime.Now().Add(lifeTime),
136137
LifetimeSeconds: int64(lifeTime.Seconds()),
137138
})
138139
if err != nil {

coderd/apikey/apikey.go

+5-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import (
1111
"golang.org/x/xerrors"
1212

1313
"github.com/coder/coder/v2/coderd/database"
14+
"github.com/coder/coder/v2/coderd/database/dbtime"
1415
"github.com/coder/coder/v2/codersdk"
1516
"github.com/coder/coder/v2/cryptorand"
1617
)
@@ -43,9 +44,9 @@ func Generate(params CreateParams) (database.InsertAPIKeyParams, string, error)
4344
// set.
4445
if params.ExpiresAt.IsZero() {
4546
if params.LifetimeSeconds != 0 {
46-
params.ExpiresAt = database.Now().Add(time.Duration(params.LifetimeSeconds) * time.Second)
47+
params.ExpiresAt = dbtime.Now().Add(time.Duration(params.LifetimeSeconds) * time.Second)
4748
} else {
48-
params.ExpiresAt = database.Now().Add(params.DeploymentValues.SessionDuration.Value())
49+
params.ExpiresAt = dbtime.Now().Add(params.DeploymentValues.SessionDuration.Value())
4950
params.LifetimeSeconds = int64(params.DeploymentValues.SessionDuration.Value().Seconds())
5051
}
5152
}
@@ -85,8 +86,8 @@ func Generate(params CreateParams) (database.InsertAPIKeyParams, string, error)
8586
},
8687
// Make sure in UTC time for common time zone
8788
ExpiresAt: params.ExpiresAt.UTC(),
88-
CreatedAt: database.Now(),
89-
UpdatedAt: database.Now(),
89+
CreatedAt: dbtime.Now(),
90+
UpdatedAt: dbtime.Now(),
9091
HashedSecret: hashed[:],
9192
LoginType: params.LoginType,
9293
Scope: scope,

0 commit comments

Comments
 (0)