Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 99d510c

Browse files
committed
Add startup script logs to the database
1 parent 2a8a147 commit 99d510c

11 files changed

+181
-0
lines changed

coderd/database/dbauthz/querier.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1263,6 +1263,27 @@ func (q *querier) UpdateWorkspaceAgentStartupByID(ctx context.Context, arg datab
12631263
return q.db.UpdateWorkspaceAgentStartupByID(ctx, arg)
12641264
}
12651265

1266+
func (q *querier) GetStartupScriptLogsByJobID(ctx context.Context, jobID uuid.UUID) ([]database.StartupScriptLog, error) {
1267+
build, err := q.db.GetWorkspaceBuildByJobID(ctx, jobID)
1268+
if err != nil {
1269+
return nil, err
1270+
}
1271+
// Authorized fetch
1272+
_, err = q.GetWorkspaceByID(ctx, build.WorkspaceID)
1273+
if err != nil {
1274+
return nil, err
1275+
}
1276+
return q.db.GetStartupScriptLogsByJobID(ctx, jobID)
1277+
}
1278+
1279+
func (q *querier) InsertOrUpdateStartupScriptLog(ctx context.Context, arg database.InsertOrUpdateStartupScriptLogParams) error {
1280+
// Authorized fetch
1281+
if _, err := q.GetWorkspaceByAgentID(ctx, arg.AgentID); err != nil {
1282+
return err
1283+
}
1284+
return q.db.InsertOrUpdateStartupScriptLog(ctx, arg)
1285+
}
1286+
12661287
func (q *querier) GetWorkspaceAppByAgentIDAndSlug(ctx context.Context, arg database.GetWorkspaceAppByAgentIDAndSlugParams) (database.WorkspaceApp, error) {
12671288
// If we can fetch the workspace, we can fetch the apps. Use the authorized call.
12681289
if _, err := q.GetWorkspaceByAgentID(ctx, arg.AgentID); err != nil {

coderd/database/dbauthz/querier_test.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -966,6 +966,22 @@ func (s *MethodTestSuite) TestWorkspace() {
966966
ID: agt.ID,
967967
}).Asserts(ws, rbac.ActionUpdate).Returns()
968968
}))
969+
s.Run("GetStartupScriptLogsByJobID", s.Subtest(func(db database.Store, check *expects) {
970+
ws := dbgen.Workspace(s.T(), db, database.Workspace{})
971+
build := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: ws.ID, JobID: uuid.New()})
972+
check.Args(build.JobID).Asserts(ws, rbac.ActionRead).Returns([]database.StartupScriptLog{})
973+
}))
974+
s.Run("InsertOrUpdateStartupScriptLog", s.Subtest(func(db database.Store, check *expects) {
975+
ws := dbgen.Workspace(s.T(), db, database.Workspace{})
976+
build := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: ws.ID, JobID: uuid.New()})
977+
res := dbgen.WorkspaceResource(s.T(), db, database.WorkspaceResource{JobID: build.JobID})
978+
agt := dbgen.WorkspaceAgent(s.T(), db, database.WorkspaceAgent{ResourceID: res.ID})
979+
check.Args(database.InsertOrUpdateStartupScriptLogParams{
980+
AgentID: agt.ID,
981+
JobID: build.JobID,
982+
Output: "test",
983+
}).Asserts(ws, rbac.ActionUpdate).Returns()
984+
}))
969985
s.Run("GetWorkspaceAppByAgentIDAndSlug", s.Subtest(func(db database.Store, check *expects) {
970986
ws := dbgen.Workspace(s.T(), db, database.Workspace{})
971987
build := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: ws.ID, JobID: uuid.New()})

coderd/database/dbfake/databasefake.go

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ func New() database.Store {
5353
parameterSchemas: make([]database.ParameterSchema, 0),
5454
parameterValues: make([]database.ParameterValue, 0),
5555
provisionerDaemons: make([]database.ProvisionerDaemon, 0),
56+
startupScriptLogs: make([]database.StartupScriptLog, 0),
5657
workspaceAgents: make([]database.WorkspaceAgent, 0),
5758
provisionerJobLogs: make([]database.ProvisionerJobLog, 0),
5859
workspaceResources: make([]database.WorkspaceResource, 0),
@@ -112,6 +113,7 @@ type data struct {
112113
provisionerJobLogs []database.ProvisionerJobLog
113114
provisionerJobs []database.ProvisionerJob
114115
replicas []database.Replica
116+
startupScriptLogs []database.StartupScriptLog
115117
templateVersions []database.TemplateVersion
116118
templateVersionParameters []database.TemplateVersionParameter
117119
templateVersionVariables []database.TemplateVersionVariable
@@ -3303,6 +3305,44 @@ func (q *fakeQuerier) UpdateWorkspaceAgentStartupByID(_ context.Context, arg dat
33033305
return sql.ErrNoRows
33043306
}
33053307

3308+
func (q *fakeQuerier) GetStartupScriptLogsByJobID(_ context.Context, jobID uuid.UUID) ([]database.StartupScriptLog, error) {
3309+
q.mutex.Lock()
3310+
defer q.mutex.Unlock()
3311+
3312+
logs := []database.StartupScriptLog{}
3313+
for _, log := range q.startupScriptLogs {
3314+
if log.JobID == jobID {
3315+
logs = append(logs, log)
3316+
}
3317+
}
3318+
return logs, sql.ErrNoRows
3319+
}
3320+
3321+
func (q *fakeQuerier) InsertOrUpdateStartupScriptLog(_ context.Context, arg database.InsertOrUpdateStartupScriptLogParams) error {
3322+
if err := validateDatabaseType(arg); err != nil {
3323+
return err
3324+
}
3325+
3326+
q.mutex.Lock()
3327+
defer q.mutex.Unlock()
3328+
3329+
for index, log := range q.startupScriptLogs {
3330+
if log.JobID != arg.JobID {
3331+
continue
3332+
}
3333+
3334+
log.Output = arg.Output
3335+
q.startupScriptLogs[index] = log
3336+
return nil
3337+
}
3338+
q.startupScriptLogs = append(q.startupScriptLogs, database.StartupScriptLog{
3339+
AgentID: arg.AgentID,
3340+
JobID: arg.JobID,
3341+
Output: arg.Output,
3342+
})
3343+
return nil
3344+
}
3345+
33063346
func (q *fakeQuerier) UpdateProvisionerJobByID(_ context.Context, arg database.UpdateProvisionerJobByIDParams) error {
33073347
if err := validateDatabaseType(arg); err != nil {
33083348
return err

coderd/database/dump.sql

Lines changed: 15 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
DROP TABLE startup_script_logs
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
CREATE TABLE IF NOT EXISTS startup_script_logs (
2+
agent_id uuid NOT NULL REFERENCES workspace_agents (id) ON DELETE CASCADE,
3+
job_id uuid NOT NULL REFERENCES provisioner_jobs (id) ON DELETE CASCADE,
4+
output text NOT NULL,
5+
UNIQUE(agent_id, job_id)
6+
);

coderd/database/models.go

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/querier.go

Lines changed: 2 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

Lines changed: 55 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
-- name: GetStartupScriptLogsByJobID :many
2+
SELECT
3+
*
4+
FROM
5+
startup_script_logs
6+
WHERE
7+
job_id = $1;
8+
9+
-- name: InsertOrUpdateStartupScriptLog :exec
10+
INSERT INTO
11+
startup_script_logs (agent_id, job_id, output)
12+
VALUES ($1, $2, $3)
13+
ON CONFLICT (agent_id, job_id) DO UPDATE
14+
SET
15+
output = $3
16+
WHERE
17+
startup_script_logs.agent_id = $1
18+
AND startup_script_logs.job_id = $2;

coderd/database/unique_constraint.go

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)