mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
feat: add provisioning timings to understand slow build times (#14274)
This commit is contained in:
@@ -1216,6 +1216,70 @@ func AllProvisionerJobStatusValues() []ProvisionerJobStatus {
|
||||
}
|
||||
}
|
||||
|
||||
type ProvisionerJobTimingStage string
|
||||
|
||||
const (
|
||||
ProvisionerJobTimingStageInit ProvisionerJobTimingStage = "init"
|
||||
ProvisionerJobTimingStagePlan ProvisionerJobTimingStage = "plan"
|
||||
ProvisionerJobTimingStageGraph ProvisionerJobTimingStage = "graph"
|
||||
ProvisionerJobTimingStageApply ProvisionerJobTimingStage = "apply"
|
||||
)
|
||||
|
||||
func (e *ProvisionerJobTimingStage) Scan(src interface{}) error {
|
||||
switch s := src.(type) {
|
||||
case []byte:
|
||||
*e = ProvisionerJobTimingStage(s)
|
||||
case string:
|
||||
*e = ProvisionerJobTimingStage(s)
|
||||
default:
|
||||
return fmt.Errorf("unsupported scan type for ProvisionerJobTimingStage: %T", src)
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
type NullProvisionerJobTimingStage struct {
|
||||
ProvisionerJobTimingStage ProvisionerJobTimingStage `json:"provisioner_job_timing_stage"`
|
||||
Valid bool `json:"valid"` // Valid is true if ProvisionerJobTimingStage is not NULL
|
||||
}
|
||||
|
||||
// Scan implements the Scanner interface.
|
||||
func (ns *NullProvisionerJobTimingStage) Scan(value interface{}) error {
|
||||
if value == nil {
|
||||
ns.ProvisionerJobTimingStage, ns.Valid = "", false
|
||||
return nil
|
||||
}
|
||||
ns.Valid = true
|
||||
return ns.ProvisionerJobTimingStage.Scan(value)
|
||||
}
|
||||
|
||||
// Value implements the driver Valuer interface.
|
||||
func (ns NullProvisionerJobTimingStage) Value() (driver.Value, error) {
|
||||
if !ns.Valid {
|
||||
return nil, nil
|
||||
}
|
||||
return string(ns.ProvisionerJobTimingStage), nil
|
||||
}
|
||||
|
||||
func (e ProvisionerJobTimingStage) Valid() bool {
|
||||
switch e {
|
||||
case ProvisionerJobTimingStageInit,
|
||||
ProvisionerJobTimingStagePlan,
|
||||
ProvisionerJobTimingStageGraph,
|
||||
ProvisionerJobTimingStageApply:
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
func AllProvisionerJobTimingStageValues() []ProvisionerJobTimingStage {
|
||||
return []ProvisionerJobTimingStage{
|
||||
ProvisionerJobTimingStageInit,
|
||||
ProvisionerJobTimingStagePlan,
|
||||
ProvisionerJobTimingStageGraph,
|
||||
ProvisionerJobTimingStageApply,
|
||||
}
|
||||
}
|
||||
|
||||
type ProvisionerJobType string
|
||||
|
||||
const (
|
||||
@@ -2282,6 +2346,33 @@ type ProvisionerJobLog struct {
|
||||
ID int64 `db:"id" json:"id"`
|
||||
}
|
||||
|
||||
type ProvisionerJobStat struct {
|
||||
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
||||
JobStatus ProvisionerJobStatus `db:"job_status" json:"job_status"`
|
||||
WorkspaceID uuid.UUID `db:"workspace_id" json:"workspace_id"`
|
||||
WorkerID uuid.NullUUID `db:"worker_id" json:"worker_id"`
|
||||
Error sql.NullString `db:"error" json:"error"`
|
||||
ErrorCode sql.NullString `db:"error_code" json:"error_code"`
|
||||
UpdatedAt time.Time `db:"updated_at" json:"updated_at"`
|
||||
QueuedSecs float64 `db:"queued_secs" json:"queued_secs"`
|
||||
CompletionSecs float64 `db:"completion_secs" json:"completion_secs"`
|
||||
CanceledSecs float64 `db:"canceled_secs" json:"canceled_secs"`
|
||||
InitSecs float64 `db:"init_secs" json:"init_secs"`
|
||||
PlanSecs float64 `db:"plan_secs" json:"plan_secs"`
|
||||
GraphSecs float64 `db:"graph_secs" json:"graph_secs"`
|
||||
ApplySecs float64 `db:"apply_secs" json:"apply_secs"`
|
||||
}
|
||||
|
||||
type ProvisionerJobTiming struct {
|
||||
JobID uuid.UUID `db:"job_id" json:"job_id"`
|
||||
StartedAt time.Time `db:"started_at" json:"started_at"`
|
||||
EndedAt time.Time `db:"ended_at" json:"ended_at"`
|
||||
Stage ProvisionerJobTimingStage `db:"stage" json:"stage"`
|
||||
Source string `db:"source" json:"source"`
|
||||
Action string `db:"action" json:"action"`
|
||||
Resource string `db:"resource" json:"resource"`
|
||||
}
|
||||
|
||||
type ProvisionerKey struct {
|
||||
ID uuid.UUID `db:"id" json:"id"`
|
||||
CreatedAt time.Time `db:"created_at" json:"created_at"`
|
||||
|
||||
Reference in New Issue
Block a user