mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore: compute job status as column (#10024)
* chore: provisioner job status as column * use provisioner job status for workspace searching
This commit is contained in:
@@ -71,31 +71,6 @@ func TemplateVersionParameter(param database.TemplateVersionParameter) (codersdk
|
||||
}, nil
|
||||
}
|
||||
|
||||
func ProvisionerJobStatus(provisionerJob database.ProvisionerJob) codersdk.ProvisionerJobStatus {
|
||||
// The case where jobs are hung is handled by the unhang package. We can't
|
||||
// just return Failed here when it's hung because that doesn't reflect in
|
||||
// the database.
|
||||
switch {
|
||||
case provisionerJob.CanceledAt.Valid:
|
||||
if !provisionerJob.CompletedAt.Valid {
|
||||
return codersdk.ProvisionerJobCanceling
|
||||
}
|
||||
if provisionerJob.Error.String == "" {
|
||||
return codersdk.ProvisionerJobCanceled
|
||||
}
|
||||
return codersdk.ProvisionerJobFailed
|
||||
case !provisionerJob.StartedAt.Valid:
|
||||
return codersdk.ProvisionerJobPending
|
||||
case provisionerJob.CompletedAt.Valid:
|
||||
if provisionerJob.Error.String == "" {
|
||||
return codersdk.ProvisionerJobSucceeded
|
||||
}
|
||||
return codersdk.ProvisionerJobFailed
|
||||
default:
|
||||
return codersdk.ProvisionerJobRunning
|
||||
}
|
||||
}
|
||||
|
||||
func User(user database.User, organizationIDs []uuid.UUID) codersdk.User {
|
||||
convertedUser := codersdk.User{
|
||||
ID: user.ID,
|
||||
|
||||
@@ -4,13 +4,17 @@ import (
|
||||
"crypto/rand"
|
||||
"database/sql"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/google/uuid"
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/coder/coder/v2/coderd/database"
|
||||
"github.com/coder/coder/v2/coderd/database/db2sdk"
|
||||
"github.com/coder/coder/v2/coderd/database/dbgen"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtestutil"
|
||||
"github.com/coder/coder/v2/coderd/database/dbtime"
|
||||
"github.com/coder/coder/v2/codersdk"
|
||||
"github.com/coder/coder/v2/provisionersdk/proto"
|
||||
@@ -110,11 +114,36 @@ func TestProvisionerJobStatus(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
for _, tc := range cases {
|
||||
// Share db for all job inserts.
|
||||
db, _ := dbtestutil.NewDB(t)
|
||||
org := dbgen.Organization(t, db, database.Organization{})
|
||||
|
||||
for i, tc := range cases {
|
||||
tc := tc
|
||||
i := i
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
actual := db2sdk.ProvisionerJobStatus(tc.job)
|
||||
// Populate standard fields
|
||||
now := dbtime.Now().Round(time.Minute)
|
||||
tc.job.ID = uuid.New()
|
||||
tc.job.CreatedAt = now
|
||||
tc.job.UpdatedAt = now
|
||||
tc.job.InitiatorID = org.ID
|
||||
tc.job.OrganizationID = org.ID
|
||||
tc.job.Input = []byte("{}")
|
||||
tc.job.Provisioner = database.ProvisionerTypeEcho
|
||||
// Unique tags for each job.
|
||||
tc.job.Tags = map[string]string{fmt.Sprintf("%d", i): "true"}
|
||||
|
||||
inserted := dbgen.ProvisionerJob(t, db, nil, tc.job)
|
||||
// Make sure the inserted job has the right values.
|
||||
require.Equal(t, tc.job.StartedAt.Time.UTC(), inserted.StartedAt.Time.UTC(), "started at")
|
||||
require.Equal(t, tc.job.CompletedAt.Time.UTC(), inserted.CompletedAt.Time.UTC(), "completed at")
|
||||
require.Equal(t, tc.job.CanceledAt.Time.UTC(), inserted.CanceledAt.Time.UTC(), "cancelled at")
|
||||
require.Equal(t, tc.job.Error, inserted.Error, "error")
|
||||
require.Equal(t, tc.job.ErrorCode, inserted.ErrorCode, "error code")
|
||||
|
||||
actual := codersdk.ProvisionerJobStatus(inserted.JobStatus)
|
||||
require.Equal(t, tc.status, actual)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user