mirror of
https://github.com/coder/coder.git
synced 2026-10-29 17:44:33 +08:00
chore: update build_reason 'autolock' -> 'dormancy' (#11074)
This commit is contained in:
@@ -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)
|
||||||
|
|||||||
@@ -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,
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Generated
+1
-1
@@ -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';
|
||||||
@@ -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,
|
||||||
|
|||||||
@@ -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)
|
||||||
|
|||||||
Reference in New Issue
Block a user