@@ -3758,50 +3758,6 @@ func (q *FakeQuerier) GetProvisionerDaemonsWithStatusByOrganization(ctx context.
3758
3758
q .mutex .RLock ()
3759
3759
defer q .mutex .RUnlock ()
3760
3760
3761
- /*
3762
- -- name: GetProvisionerDaemonsWithStatusByOrganization :many
3763
- SELECT
3764
- sqlc.embed(pd),
3765
- CASE
3766
- WHEN pd.last_seen_at IS NULL OR pd.last_seen_at < (NOW() - (@stale_interval_ms::bigint || ' ms')::interval)
3767
- THEN 'offline'
3768
- ELSE CASE
3769
- WHEN current_job.id IS NOT NULL THEN 'busy'
3770
- ELSE 'idle'
3771
- END
3772
- END::provisioner_daemon_status AS status,
3773
- -- NOTE(mafredri): sqlc.embed doesn't support nullable tables nor renaming them.
3774
- current_job.id AS current_job_id,
3775
- current_job.job_status AS current_job_status,
3776
- previous_job.id AS previous_job_id,
3777
- previous_job.job_status AS previous_job_status
3778
- FROM
3779
- provisioner_daemons pd
3780
- LEFT JOIN
3781
- provisioner_jobs current_job ON (
3782
- current_job.worker_id = pd.id
3783
- AND current_job.completed_at IS NULL
3784
- )
3785
- LEFT JOIN
3786
- provisioner_jobs previous_job ON (
3787
- previous_job.id = (
3788
- SELECT
3789
- id
3790
- FROM
3791
- provisioner_jobs
3792
- WHERE
3793
- worker_id = pd.id
3794
- AND completed_at IS NOT NULL
3795
- ORDER BY
3796
- completed_at DESC
3797
- LIMIT 1
3798
- )
3799
- )
3800
- WHERE
3801
- pd.organization_id = @organization_id::uuid
3802
- AND (COALESCE(array_length(@ids::uuid[], 1), 1) > 0 OR pd.id = ANY(@ids::uuid[]))
3803
- AND (@tags::tagset = 'null'::tagset OR provisioner_tagset_contains(pd.tags::tagset, @tags::tagset));
3804
- */
3805
3761
var rows []database.GetProvisionerDaemonsWithStatusByOrganizationRow
3806
3762
for _ , daemon := range q .provisionerDaemons {
3807
3763
if daemon .OrganizationID != arg .OrganizationID {
@@ -4072,6 +4028,64 @@ func (q *FakeQuerier) GetProvisionerJobsByOrganizationAndStatusWithQueuePosition
4072
4028
pj.created_at DESC
4073
4029
LIMIT
4074
4030
sqlc.narg('limit')::int;
4031
+
4032
+ AMENDED QUERY:
4033
+
4034
+ -- name: GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisioner :many
4035
+ WITH pending_jobs AS (
4036
+ SELECT
4037
+ id, created_at
4038
+ FROM
4039
+ provisioner_jobs
4040
+ WHERE
4041
+ started_at IS NULL
4042
+ AND
4043
+ canceled_at IS NULL
4044
+ AND
4045
+ completed_at IS NULL
4046
+ AND
4047
+ error IS NULL
4048
+ ),
4049
+ queue_position AS (
4050
+ SELECT
4051
+ id,
4052
+ ROW_NUMBER() OVER (ORDER BY created_at ASC) AS queue_position
4053
+ FROM
4054
+ pending_jobs
4055
+ ),
4056
+ queue_size AS (
4057
+ SELECT COUNT(*) AS count FROM pending_jobs
4058
+ )
4059
+ SELECT
4060
+ sqlc.embed(pj),
4061
+ COALESCE(qp.queue_position, 0) AS queue_position,
4062
+ COALESCE(qs.count, 0) AS queue_size,
4063
+ array_agg(DISTINCT pd.id) FILTER (WHERE pd.id IS NOT NULL)::uuid[] AS available_workers
4064
+ FROM
4065
+ provisioner_jobs pj
4066
+ LEFT JOIN
4067
+ queue_position qp ON qp.id = pj.id
4068
+ LEFT JOIN
4069
+ queue_size qs ON TRUE
4070
+ LEFT JOIN
4071
+ provisioner_daemons pd ON (
4072
+ -- See AcquireProvisionerJob.
4073
+ pj.started_at IS NULL
4074
+ AND pj.organization_id = pd.organization_id
4075
+ AND pj.provisioner = ANY(pd.provisioners)
4076
+ AND provisioner_tagset_contains(pd.tags, pj.tags)
4077
+ )
4078
+ WHERE
4079
+ (sqlc.narg('organization_id')::uuid IS NULL OR pj.organization_id = @organization_id)
4080
+ AND (COALESCE(array_length(@status::provisioner_job_status[], 1), 1) > 0 OR pj.job_status = ANY(@status::provisioner_job_status[]))
4081
+ GROUP BY
4082
+ pj.id,
4083
+ qp.queue_position,
4084
+ qs.count
4085
+ ORDER BY
4086
+ pj.created_at DESC
4087
+ LIMIT
4088
+ sqlc.narg('limit')::int;
4075
4089
*/
4076
4090
var rows []database.GetProvisionerJobsByOrganizationAndStatusWithQueuePositionAndProvisionerRow
4077
4091
var queuedJobs []database.ProvisionerJob
0 commit comments