MCPcopy Index your code
hub / github.com/coder/coder / ScriptCompleted

Method ScriptCompleted

coderd/agentapi/scripts.go:18–81  ·  view source on GitHub ↗
(ctx context.Context, req *agentproto.WorkspaceAgentScriptCompletedRequest)

Source from the content-addressed store, hash-verified

16}
17
18func (s *ScriptsAPI) ScriptCompleted(ctx context.Context, req *agentproto.WorkspaceAgentScriptCompletedRequest) (*agentproto.WorkspaceAgentScriptCompletedResponse, error) {
19 res := &agentproto.WorkspaceAgentScriptCompletedResponse{}
20
21 if req.GetTiming() == nil {
22 return nil, xerrors.New("script timing is required")
23 }
24
25 scriptID, err := uuid.FromBytes(req.GetTiming().GetScriptId())
26 if err != nil {
27 return nil, xerrors.Errorf("script id from bytes: %w", err)
28 }
29
30 scriptStart := req.GetTiming().GetStart()
31 if !scriptStart.IsValid() || scriptStart.AsTime().IsZero() {
32 return nil, xerrors.New("script start time is required and cannot be zero")
33 }
34
35 scriptEnd := req.GetTiming().GetEnd()
36 if !scriptEnd.IsValid() || scriptEnd.AsTime().IsZero() {
37 return nil, xerrors.New("script end time is required and cannot be zero")
38 }
39
40 if scriptStart.AsTime().After(scriptEnd.AsTime()) {
41 return nil, xerrors.New("script start time cannot be after end time")
42 }
43
44 var stage database.WorkspaceAgentScriptTimingStage
45 switch req.Timing.Stage {
46 case agentproto.Timing_START:
47 stage = database.WorkspaceAgentScriptTimingStageStart
48 case agentproto.Timing_STOP:
49 stage = database.WorkspaceAgentScriptTimingStageStop
50 case agentproto.Timing_CRON:
51 stage = database.WorkspaceAgentScriptTimingStageCron
52 }
53
54 var status database.WorkspaceAgentScriptTimingStatus
55 switch req.Timing.Status {
56 case agentproto.Timing_OK:
57 status = database.WorkspaceAgentScriptTimingStatusOk
58 case agentproto.Timing_EXIT_FAILURE:
59 status = database.WorkspaceAgentScriptTimingStatusExitFailure
60 case agentproto.Timing_TIMED_OUT:
61 status = database.WorkspaceAgentScriptTimingStatusTimedOut
62 case agentproto.Timing_PIPES_LEFT_OPEN:
63 status = database.WorkspaceAgentScriptTimingStatusPipesLeftOpen
64 }
65
66 //nolint:gocritic // We need permissions to write to the DB here and we are in the context of the agent.
67 ctx = dbauthz.AsProvisionerd(ctx)
68 _, err = s.Database.InsertWorkspaceAgentScriptTimings(ctx, database.InsertWorkspaceAgentScriptTimingsParams{
69 ScriptID: scriptID,
70 Stage: stage,
71 Status: status,
72 StartedAt: req.Timing.Start.AsTime(),
73 EndedAt: req.Timing.End.AsTime(),
74 ExitCode: req.Timing.ExitCode,
75 })

Callers 1

TestScriptCompletedFunction · 0.95

Calls 9

AsProvisionerdFunction · 0.92
GetTimingMethod · 0.80
GetScriptIdMethod · 0.80
NewMethod · 0.65
ErrorfMethod · 0.45
GetStartMethod · 0.45
IsZeroMethod · 0.45
GetEndMethod · 0.45

Tested by 1

TestScriptCompletedFunction · 0.76