chore: update build_reason 'autolock' -> 'dormancy' (#11074)

This commit is contained in:
Jon Ayers
2023-12-07 17:11:57 -06:00
committed by GitHub
parent 8221544514
commit ce49a55f56
8 changed files with 34 additions and 54 deletions
+5 -5
View File
@@ -47,12 +47,12 @@ type Request[T Auditable] struct {
Action database.AuditAction Action database.AuditAction
} }
type BuildAuditParams[T Auditable] struct { type BackgroundAuditParams[T Auditable] struct {
Audit Auditor Audit Auditor
Log slog.Logger Log slog.Logger
UserID uuid.UUID UserID uuid.UUID
JobID uuid.UUID RequestID uuid.UUID
Status int Status int
Action database.AuditAction Action database.AuditAction
OrganizationID uuid.UUID OrganizationID uuid.UUID
@@ -255,9 +255,9 @@ func InitRequest[T Auditable](w http.ResponseWriter, p *RequestParams) (*Request
} }
} }
// WorkspaceBuildAudit creates an audit log for a workspace build. // BackgroundAudit creates an audit log for a background event.
// The audit log is committed upon invocation. // The audit log is committed upon invocation.
func WorkspaceBuildAudit[T Auditable](ctx context.Context, p *BuildAuditParams[T]) { func BackgroundAudit[T Auditable](ctx context.Context, p *BackgroundAuditParams[T]) {
ip := parseIP(p.IP) ip := parseIP(p.IP)
diff := Diff(p.Audit, p.Old, p.New) diff := Diff(p.Audit, p.Old, p.New)
@@ -285,7 +285,7 @@ func WorkspaceBuildAudit[T Auditable](ctx context.Context, p *BuildAuditParams[T
Action: p.Action, Action: p.Action,
Diff: diffRaw, Diff: diffRaw,
StatusCode: int32(p.Status), StatusCode: int32(p.Status),
RequestID: p.JobID, RequestID: p.RequestID,
AdditionalFields: p.AdditionalFields, AdditionalFields: p.AdditionalFields,
} }
err = p.Audit.Export(ctx, auditLog) err = p.Audit.Export(ctx, auditLog)
+18 -40
View File
@@ -3,9 +3,7 @@ package autobuild
import ( import (
"context" "context"
"database/sql" "database/sql"
"encoding/json"
"net/http" "net/http"
"strconv"
"sync" "sync"
"sync/atomic" "sync/atomic"
"time" "time"
@@ -184,7 +182,6 @@ func (e *Executor) runOnce(t time.Time) Stats {
return nil return nil
} }
var build *database.WorkspaceBuild
if nextTransition != "" { if nextTransition != "" {
builder := wsbuilder.New(ws, nextTransition). builder := wsbuilder.New(ws, nextTransition).
SetLastWorkspaceBuildInTx(&latestBuild). SetLastWorkspaceBuildInTx(&latestBuild).
@@ -197,7 +194,7 @@ func (e *Executor) runOnce(t time.Time) Stats {
builder = builder.ActiveVersion() builder = builder.ActiveVersion()
} }
build, job, err = builder.Build(e.ctx, tx, nil, audit.WorkspaceBuildBaggage{IP: "127.0.0.1"}) _, job, err = builder.Build(e.ctx, tx, nil, audit.WorkspaceBuildBaggage{IP: "127.0.0.1"})
if err != nil { if err != nil {
return xerrors.Errorf("build workspace with transition %q: %w", nextTransition, err) return xerrors.Errorf("build workspace with transition %q: %w", nextTransition, err)
} }
@@ -205,7 +202,7 @@ func (e *Executor) runOnce(t time.Time) Stats {
// Transition the workspace to dormant if it has breached the template's // Transition the workspace to dormant if it has breached the template's
// threshold for inactivity. // threshold for inactivity.
if reason == database.BuildReasonAutolock { if reason == database.BuildReasonDormancy {
wsOld := ws wsOld := ws
ws, err = tx.UpdateWorkspaceDormantDeletingAt(e.ctx, database.UpdateWorkspaceDormantDeletingAtParams{ ws, err = tx.UpdateWorkspaceDormantDeletingAt(e.ctx, database.UpdateWorkspaceDormantDeletingAtParams{
ID: ws.ID, ID: ws.ID,
@@ -216,11 +213,8 @@ func (e *Executor) runOnce(t time.Time) Stats {
}) })
auditLog = &auditParams{ auditLog = &auditParams{
Build: build, Old: wsOld,
Job: latestJob, New: ws,
Reason: reason,
Old: wsOld,
New: ws,
} }
if err != nil { if err != nil {
return xerrors.Errorf("update workspace dormant deleting at: %w", err) return xerrors.Errorf("update workspace dormant deleting at: %w", err)
@@ -328,11 +322,11 @@ func getNextTransition(
case isEligibleForDormantStop(ws, templateSchedule, currentTick): case isEligibleForDormantStop(ws, templateSchedule, currentTick):
// Only stop started workspaces. // Only stop started workspaces.
if latestBuild.Transition == database.WorkspaceTransitionStart { if latestBuild.Transition == database.WorkspaceTransitionStart {
return database.WorkspaceTransitionStop, database.BuildReasonAutolock, nil return database.WorkspaceTransitionStop, database.BuildReasonDormancy, nil
} }
// We shouldn't transition the workspace but we should still // We shouldn't transition the workspace but we should still
// make it dormant. // make it dormant.
return "", database.BuildReasonAutolock, nil return "", database.BuildReasonDormancy, nil
case isEligibleForDelete(ws, templateSchedule, latestBuild, latestJob, currentTick): case isEligibleForDelete(ws, templateSchedule, latestBuild, latestJob, currentTick):
return database.WorkspaceTransitionDelete, database.BuildReasonAutodelete, nil return database.WorkspaceTransitionDelete, database.BuildReasonAutodelete, nil
@@ -462,45 +456,29 @@ func isEligibleForFailedStop(build database.WorkspaceBuild, job database.Provisi
} }
type auditParams struct { type auditParams struct {
Build *database.WorkspaceBuild
Job database.ProvisionerJob
Reason database.BuildReason
Old database.Workspace Old database.Workspace
New database.Workspace New database.Workspace
Success bool Success bool
} }
func auditBuild(ctx context.Context, log slog.Logger, auditor audit.Auditor, params auditParams) { func auditBuild(ctx context.Context, log slog.Logger, auditor audit.Auditor, params auditParams) {
fields := audit.AdditionalFields{
WorkspaceName: params.New.Name,
BuildReason: params.Reason,
}
if params.Build != nil {
fields.BuildNumber = strconv.FormatInt(int64(params.Build.BuildNumber), 10)
}
raw, err := json.Marshal(fields)
if err != nil {
log.Error(ctx, "marshal resource info for successful job", slog.Error(err))
}
status := http.StatusInternalServerError status := http.StatusInternalServerError
if params.Success { if params.Success {
status = http.StatusOK status = http.StatusOK
} }
audit.WorkspaceBuildAudit(ctx, &audit.BuildAuditParams[database.Workspace]{ audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.Workspace]{
Audit: auditor, Audit: auditor,
Log: log, Log: log,
UserID: params.Job.InitiatorID, UserID: params.New.OwnerID,
OrganizationID: params.New.OrganizationID, OrganizationID: params.New.OrganizationID,
JobID: params.Job.ID, // Right now there's no request associated with an autobuild
Action: database.AuditActionWrite, // operation.
Old: params.Old, RequestID: uuid.Nil,
New: params.New, Action: database.AuditActionWrite,
Status: status, Old: params.Old,
AdditionalFields: raw, New: params.New,
Status: status,
}) })
} }
+1 -1
View File
@@ -31,7 +31,7 @@ CREATE TYPE build_reason AS ENUM (
'initiator', 'initiator',
'autostart', 'autostart',
'autostop', 'autostop',
'autolock', 'dormancy',
'failedstop', 'failedstop',
'autodelete' 'autodelete'
); );
@@ -0,0 +1 @@
ALTER TYPE build_reason RENAME VALUE 'dormancy' TO 'autolock';
@@ -0,0 +1 @@
ALTER TYPE build_reason RENAME VALUE 'autolock' TO 'dormancy';
+3 -3
View File
@@ -275,7 +275,7 @@ const (
BuildReasonInitiator BuildReason = "initiator" BuildReasonInitiator BuildReason = "initiator"
BuildReasonAutostart BuildReason = "autostart" BuildReasonAutostart BuildReason = "autostart"
BuildReasonAutostop BuildReason = "autostop" BuildReasonAutostop BuildReason = "autostop"
BuildReasonAutolock BuildReason = "autolock" BuildReasonDormancy BuildReason = "dormancy"
BuildReasonFailedstop BuildReason = "failedstop" BuildReasonFailedstop BuildReason = "failedstop"
BuildReasonAutodelete BuildReason = "autodelete" BuildReasonAutodelete BuildReason = "autodelete"
) )
@@ -320,7 +320,7 @@ func (e BuildReason) Valid() bool {
case BuildReasonInitiator, case BuildReasonInitiator,
BuildReasonAutostart, BuildReasonAutostart,
BuildReasonAutostop, BuildReasonAutostop,
BuildReasonAutolock, BuildReasonDormancy,
BuildReasonFailedstop, BuildReasonFailedstop,
BuildReasonAutodelete: BuildReasonAutodelete:
return true return true
@@ -333,7 +333,7 @@ func AllBuildReasonValues() []BuildReason {
BuildReasonInitiator, BuildReasonInitiator,
BuildReasonAutostart, BuildReasonAutostart,
BuildReasonAutostop, BuildReasonAutostop,
BuildReasonAutolock, BuildReasonDormancy,
BuildReasonFailedstop, BuildReasonFailedstop,
BuildReasonAutodelete, BuildReasonAutodelete,
} }
@@ -914,12 +914,12 @@ func (s *server) FailJob(ctx context.Context, failJob *proto.FailedJob) (*proto.
bag := audit.BaggageFromContext(ctx) bag := audit.BaggageFromContext(ctx)
audit.WorkspaceBuildAudit(ctx, &audit.BuildAuditParams[database.WorkspaceBuild]{ audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.WorkspaceBuild]{
Audit: *auditor, Audit: *auditor,
Log: s.Logger, Log: s.Logger,
UserID: job.InitiatorID, UserID: job.InitiatorID,
OrganizationID: workspace.OrganizationID, OrganizationID: workspace.OrganizationID,
JobID: job.ID, RequestID: job.ID,
IP: bag.IP, IP: bag.IP,
Action: auditAction, Action: auditAction,
Old: previousBuild, Old: previousBuild,
@@ -1271,12 +1271,12 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
bag := audit.BaggageFromContext(ctx) bag := audit.BaggageFromContext(ctx)
audit.WorkspaceBuildAudit(ctx, &audit.BuildAuditParams[database.WorkspaceBuild]{ audit.BackgroundAudit(ctx, &audit.BackgroundAuditParams[database.WorkspaceBuild]{
Audit: *auditor, Audit: *auditor,
Log: s.Logger, Log: s.Logger,
UserID: job.InitiatorID, UserID: job.InitiatorID,
OrganizationID: workspace.OrganizationID, OrganizationID: workspace.OrganizationID,
JobID: job.ID, RequestID: job.ID,
IP: bag.IP, IP: bag.IP,
Action: auditAction, Action: auditAction,
Old: previousBuild, Old: previousBuild,
+1 -1
View File
@@ -308,7 +308,7 @@ func TestWorkspaceAutobuild(t *testing.T) {
err := json.Unmarshal(alog.AdditionalFields, &fields) err := json.Unmarshal(alog.AdditionalFields, &fields)
require.NoError(t, err) require.NoError(t, err)
require.Equal(t, ws.Name, fields.WorkspaceName) require.Equal(t, ws.Name, fields.WorkspaceName)
require.Equal(t, database.BuildReasonAutolock, fields.BuildReason) require.Equal(t, database.BuildReasonDormancy, fields.BuildReason)
default: default:
t.Fatalf("unexpected audit log (%+v)", alog) t.Fatalf("unexpected audit log (%+v)", alog)