Files
hatchet/internal/repository/prisma/dbsqlc/tickers.sql.go
Luca Steeb d1a4d35830 chore(pre-commit): lint whitespace (#494)
Adds a whitespace linter to the pre-commit hook to ensure consistent formatting.
It also enables linting of other SQL files such as for SQLc queries.
2024-05-16 09:17:01 -04:00

666 lines
19 KiB
Go

// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.24.0
// source: tickers.sql
package dbsqlc
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
)
const createTicker = `-- name: CreateTicker :one
INSERT INTO
"Ticker" ("id", "lastHeartbeatAt", "isActive")
VALUES
($1::uuid, CURRENT_TIMESTAMP, 't')
RETURNING id, "createdAt", "updatedAt", "lastHeartbeatAt", "isActive"
`
func (q *Queries) CreateTicker(ctx context.Context, db DBTX, id pgtype.UUID) (*Ticker, error) {
row := db.QueryRow(ctx, createTicker, id)
var i Ticker
err := row.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.LastHeartbeatAt,
&i.IsActive,
)
return &i, err
}
const deleteTicker = `-- name: DeleteTicker :one
DELETE FROM
"Ticker" as tickers
WHERE
"id" = $1::uuid
RETURNING id, "createdAt", "updatedAt", "lastHeartbeatAt", "isActive"
`
func (q *Queries) DeleteTicker(ctx context.Context, db DBTX, id pgtype.UUID) (*Ticker, error) {
row := db.QueryRow(ctx, deleteTicker, id)
var i Ticker
err := row.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.LastHeartbeatAt,
&i.IsActive,
)
return &i, err
}
const listActiveTickers = `-- name: ListActiveTickers :many
SELECT
tickers.id, tickers."createdAt", tickers."updatedAt", tickers."lastHeartbeatAt", tickers."isActive"
FROM "Ticker" as tickers
WHERE
-- last heartbeat greater than 15 seconds
"lastHeartbeatAt" > NOW () - INTERVAL '15 seconds'
-- active
AND "isActive" = true
`
type ListActiveTickersRow struct {
Ticker Ticker `json:"ticker"`
}
func (q *Queries) ListActiveTickers(ctx context.Context, db DBTX) ([]*ListActiveTickersRow, error) {
rows, err := db.Query(ctx, listActiveTickers)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*ListActiveTickersRow
for rows.Next() {
var i ListActiveTickersRow
if err := rows.Scan(
&i.Ticker.ID,
&i.Ticker.CreatedAt,
&i.Ticker.UpdatedAt,
&i.Ticker.LastHeartbeatAt,
&i.Ticker.IsActive,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listNewlyStaleTickers = `-- name: ListNewlyStaleTickers :many
SELECT
tickers.id, tickers."createdAt", tickers."updatedAt", tickers."lastHeartbeatAt", tickers."isActive"
FROM "Ticker" as tickers
WHERE
-- last heartbeat older than 15 seconds
"lastHeartbeatAt" < NOW () - INTERVAL '15 seconds'
-- active
AND "isActive" = true
`
type ListNewlyStaleTickersRow struct {
Ticker Ticker `json:"ticker"`
}
func (q *Queries) ListNewlyStaleTickers(ctx context.Context, db DBTX) ([]*ListNewlyStaleTickersRow, error) {
rows, err := db.Query(ctx, listNewlyStaleTickers)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*ListNewlyStaleTickersRow
for rows.Next() {
var i ListNewlyStaleTickersRow
if err := rows.Scan(
&i.Ticker.ID,
&i.Ticker.CreatedAt,
&i.Ticker.UpdatedAt,
&i.Ticker.LastHeartbeatAt,
&i.Ticker.IsActive,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const listTickers = `-- name: ListTickers :many
SELECT
id, "createdAt", "updatedAt", "lastHeartbeatAt", "isActive"
FROM
"Ticker" as tickers
WHERE
(
$1::boolean IS NULL OR
"isActive" = $1::boolean
)
AND
(
$2::timestamp IS NULL OR
tickers."lastHeartbeatAt" > $2::timestamp
)
`
type ListTickersParams struct {
IsActive bool `json:"isActive"`
LastHeartbeatAfter pgtype.Timestamp `json:"lastHeartbeatAfter"`
}
func (q *Queries) ListTickers(ctx context.Context, db DBTX, arg ListTickersParams) ([]*Ticker, error) {
rows, err := db.Query(ctx, listTickers, arg.IsActive, arg.LastHeartbeatAfter)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*Ticker
for rows.Next() {
var i Ticker
if err := rows.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.LastHeartbeatAt,
&i.IsActive,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const pollCronSchedules = `-- name: PollCronSchedules :many
WITH latest_workflow_versions AS (
SELECT
"workflowId",
MAX("order") as max_order
FROM
"WorkflowVersion"
GROUP BY "workflowId"
),
active_cron_schedules AS (
SELECT
cronSchedule."parentId",
versions."id" AS "workflowVersionId",
triggers."tenantId" AS "tenantId"
FROM
"WorkflowTriggerCronRef" as cronSchedule
JOIN
"WorkflowTriggers" as triggers ON triggers."id" = cronSchedule."parentId"
JOIN
"WorkflowVersion" as versions ON versions."id" = triggers."workflowVersionId"
JOIN
latest_workflow_versions l ON versions."workflowId" = l."workflowId" AND versions."order" = l.max_order
WHERE
"enabled" = TRUE AND
("tickerId" IS NULL
OR NOT EXISTS (
SELECT 1 FROM "Ticker" WHERE "id" = cronSchedule."tickerId" AND "isActive" = true AND "lastHeartbeatAt" >= NOW() - INTERVAL '10 seconds'
)
OR "tickerId" = $1::uuid)
FOR UPDATE SKIP LOCKED
)
UPDATE
"WorkflowTriggerCronRef" as cronSchedules
SET
"tickerId" = $1::uuid
FROM
active_cron_schedules
WHERE
cronSchedules."parentId" = active_cron_schedules."parentId"
RETURNING cronschedules."parentId", cronschedules.cron, cronschedules."tickerId", cronschedules.input, cronschedules.enabled, active_cron_schedules."workflowVersionId", active_cron_schedules."tenantId"
`
type PollCronSchedulesRow struct {
ParentId pgtype.UUID `json:"parentId"`
Cron string `json:"cron"`
TickerId pgtype.UUID `json:"tickerId"`
Input []byte `json:"input"`
Enabled bool `json:"enabled"`
WorkflowVersionId pgtype.UUID `json:"workflowVersionId"`
TenantId pgtype.UUID `json:"tenantId"`
}
func (q *Queries) PollCronSchedules(ctx context.Context, db DBTX, tickerid pgtype.UUID) ([]*PollCronSchedulesRow, error) {
rows, err := db.Query(ctx, pollCronSchedules, tickerid)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*PollCronSchedulesRow
for rows.Next() {
var i PollCronSchedulesRow
if err := rows.Scan(
&i.ParentId,
&i.Cron,
&i.TickerId,
&i.Input,
&i.Enabled,
&i.WorkflowVersionId,
&i.TenantId,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const pollGetGroupKeyRuns = `-- name: PollGetGroupKeyRuns :many
WITH getGroupKeyRunsToTimeout AS (
SELECT
getGroupKeyRun."id"
FROM
"GetGroupKeyRun" as getGroupKeyRun
WHERE
("status" = 'RUNNING' OR "status" = 'ASSIGNED')
AND "timeoutAt" < NOW()
AND (
NOT EXISTS (
SELECT 1 FROM "Ticker" WHERE "id" = getGroupKeyRun."tickerId" AND "isActive" = true AND "lastHeartbeatAt" >= NOW() - INTERVAL '10 seconds'
)
OR "tickerId" IS NULL
)
FOR UPDATE SKIP LOCKED
)
UPDATE
"GetGroupKeyRun" as getGroupKeyRuns
SET
"tickerId" = $1::uuid
FROM
getGroupKeyRunsToTimeout
WHERE
getGroupKeyRuns."id" = getGroupKeyRunsToTimeout."id"
RETURNING getgroupkeyruns.id, getgroupkeyruns."createdAt", getgroupkeyruns."updatedAt", getgroupkeyruns."deletedAt", getgroupkeyruns."tenantId", getgroupkeyruns."workerId", getgroupkeyruns."tickerId", getgroupkeyruns.status, getgroupkeyruns.input, getgroupkeyruns.output, getgroupkeyruns."requeueAfter", getgroupkeyruns.error, getgroupkeyruns."startedAt", getgroupkeyruns."finishedAt", getgroupkeyruns."timeoutAt", getgroupkeyruns."cancelledAt", getgroupkeyruns."cancelledReason", getgroupkeyruns."cancelledError", getgroupkeyruns."workflowRunId", getgroupkeyruns."scheduleTimeoutAt"
`
func (q *Queries) PollGetGroupKeyRuns(ctx context.Context, db DBTX, tickerid pgtype.UUID) ([]*GetGroupKeyRun, error) {
rows, err := db.Query(ctx, pollGetGroupKeyRuns, tickerid)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*GetGroupKeyRun
for rows.Next() {
var i GetGroupKeyRun
if err := rows.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.DeletedAt,
&i.TenantId,
&i.WorkerId,
&i.TickerId,
&i.Status,
&i.Input,
&i.Output,
&i.RequeueAfter,
&i.Error,
&i.StartedAt,
&i.FinishedAt,
&i.TimeoutAt,
&i.CancelledAt,
&i.CancelledReason,
&i.CancelledError,
&i.WorkflowRunId,
&i.ScheduleTimeoutAt,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const pollScheduledWorkflows = `-- name: PollScheduledWorkflows :many
WITH latest_workflow_versions AS (
SELECT
"workflowId",
MAX("order") as max_order
FROM
"WorkflowVersion"
GROUP BY "workflowId"
),
not_run_scheduled_workflows AS (
SELECT
scheduledWorkflow."id",
versions."id" AS "workflowVersionId",
workflow."tenantId" AS "tenantId"
FROM
"WorkflowTriggerScheduledRef" as scheduledWorkflow
JOIN
"WorkflowVersion" as versions ON versions."id" = scheduledWorkflow."parentId"
JOIN
latest_workflow_versions l ON versions."workflowId" = l."workflowId" AND versions."order" = l.max_order
JOIN
"Workflow" as workflow ON workflow."id" = versions."workflowId"
LEFT JOIN
"WorkflowRunTriggeredBy" as runTriggeredBy ON runTriggeredBy."scheduledId" = scheduledWorkflow."id"
WHERE
"triggerAt" <= NOW() + INTERVAL '5 seconds'
AND runTriggeredBy IS NULL
AND (
"tickerId" IS NULL
OR NOT EXISTS (
SELECT 1 FROM "Ticker" WHERE "id" = scheduledWorkflow."tickerId" AND "isActive" = true AND "lastHeartbeatAt" >= NOW() - INTERVAL '10 seconds'
)
OR "tickerId" = $1::uuid
)
),
active_scheduled_workflows AS (
SELECT
id, "workflowVersionId", "tenantId"
FROM
not_run_scheduled_workflows
FOR UPDATE SKIP LOCKED
)
UPDATE
"WorkflowTriggerScheduledRef" as scheduledWorkflows
SET
"tickerId" = $1::uuid
FROM
active_scheduled_workflows
WHERE
scheduledWorkflows."id" = active_scheduled_workflows."id"
RETURNING scheduledworkflows.id, scheduledworkflows."parentId", scheduledworkflows."triggerAt", scheduledworkflows."tickerId", scheduledworkflows.input, scheduledworkflows."childIndex", scheduledworkflows."childKey", scheduledworkflows."parentStepRunId", scheduledworkflows."parentWorkflowRunId", active_scheduled_workflows."workflowVersionId", active_scheduled_workflows."tenantId"
`
type PollScheduledWorkflowsRow struct {
ID pgtype.UUID `json:"id"`
ParentId pgtype.UUID `json:"parentId"`
TriggerAt pgtype.Timestamp `json:"triggerAt"`
TickerId pgtype.UUID `json:"tickerId"`
Input []byte `json:"input"`
ChildIndex pgtype.Int4 `json:"childIndex"`
ChildKey pgtype.Text `json:"childKey"`
ParentStepRunId pgtype.UUID `json:"parentStepRunId"`
ParentWorkflowRunId pgtype.UUID `json:"parentWorkflowRunId"`
WorkflowVersionId pgtype.UUID `json:"workflowVersionId"`
TenantId pgtype.UUID `json:"tenantId"`
}
// Finds workflows that are either past their execution time or will be in the next 5 seconds and assigns them
// to a ticker, or finds workflows that were assigned to a ticker that is no longer active
func (q *Queries) PollScheduledWorkflows(ctx context.Context, db DBTX, tickerid pgtype.UUID) ([]*PollScheduledWorkflowsRow, error) {
rows, err := db.Query(ctx, pollScheduledWorkflows, tickerid)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*PollScheduledWorkflowsRow
for rows.Next() {
var i PollScheduledWorkflowsRow
if err := rows.Scan(
&i.ID,
&i.ParentId,
&i.TriggerAt,
&i.TickerId,
&i.Input,
&i.ChildIndex,
&i.ChildKey,
&i.ParentStepRunId,
&i.ParentWorkflowRunId,
&i.WorkflowVersionId,
&i.TenantId,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const pollStepRuns = `-- name: PollStepRuns :many
WITH stepRunsToTimeout AS (
SELECT
stepRun."id"
FROM
"StepRun" as stepRun
WHERE
("status" = 'RUNNING' OR "status" = 'ASSIGNED')
AND "timeoutAt" < NOW()
AND (
NOT EXISTS (
SELECT 1 FROM "Ticker" WHERE "id" = stepRun."tickerId" AND "isActive" = true AND "lastHeartbeatAt" >= NOW() - INTERVAL '10 seconds'
)
OR "tickerId" IS NULL
)
FOR UPDATE SKIP LOCKED
)
UPDATE
"StepRun" as stepRuns
SET
"tickerId" = $1::uuid
FROM
stepRunsToTimeout
WHERE
stepRuns."id" = stepRunsToTimeout."id"
RETURNING stepruns.id, stepruns."createdAt", stepruns."updatedAt", stepruns."deletedAt", stepruns."tenantId", stepruns."jobRunId", stepruns."stepId", stepruns."order", stepruns."workerId", stepruns."tickerId", stepruns.status, stepruns.input, stepruns.output, stepruns."requeueAfter", stepruns."scheduleTimeoutAt", stepruns.error, stepruns."startedAt", stepruns."finishedAt", stepruns."timeoutAt", stepruns."cancelledAt", stepruns."cancelledReason", stepruns."cancelledError", stepruns."inputSchema", stepruns."callerFiles", stepruns."gitRepoBranch", stepruns."retryCount", stepruns."semaphoreReleased"
`
func (q *Queries) PollStepRuns(ctx context.Context, db DBTX, tickerid pgtype.UUID) ([]*StepRun, error) {
rows, err := db.Query(ctx, pollStepRuns, tickerid)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*StepRun
for rows.Next() {
var i StepRun
if err := rows.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.DeletedAt,
&i.TenantId,
&i.JobRunId,
&i.StepId,
&i.Order,
&i.WorkerId,
&i.TickerId,
&i.Status,
&i.Input,
&i.Output,
&i.RequeueAfter,
&i.ScheduleTimeoutAt,
&i.Error,
&i.StartedAt,
&i.FinishedAt,
&i.TimeoutAt,
&i.CancelledAt,
&i.CancelledReason,
&i.CancelledError,
&i.InputSchema,
&i.CallerFiles,
&i.GitRepoBranch,
&i.RetryCount,
&i.SemaphoreReleased,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const pollTenantAlerts = `-- name: PollTenantAlerts :many
WITH active_tenant_alerts AS (
SELECT
alerts.id, alerts."createdAt", alerts."updatedAt", alerts."deletedAt", alerts."tenantId", alerts."maxFrequency", alerts."lastAlertedAt", alerts."tickerId"
FROM
"TenantAlertingSettings" as alerts
WHERE
"lastAlertedAt" IS NULL OR
"lastAlertedAt" <= NOW() - convert_duration_to_interval(alerts."maxFrequency")
FOR UPDATE SKIP LOCKED
),
failed_run_count_by_tenant AS (
SELECT
workflowRun."tenantId",
COUNT(*) as "failedWorkflowRunCount"
FROM
"WorkflowRun" as workflowRun
JOIN
active_tenant_alerts ON active_tenant_alerts."tenantId" = workflowRun."tenantId"
WHERE
"status" = 'FAILED'
AND (
(
"lastAlertedAt" IS NULL AND
workflowRun."finishedAt" >= NOW() - convert_duration_to_interval(active_tenant_alerts."maxFrequency")
) OR
workflowRun."finishedAt" >= "lastAlertedAt"
)
GROUP BY workflowRun."tenantId"
)
UPDATE
"TenantAlertingSettings" as alerts
SET
"tickerId" = $1::uuid,
"lastAlertedAt" = NOW()
FROM
active_tenant_alerts
WHERE
alerts."id" = active_tenant_alerts."id" AND
alerts."tenantId" IN (SELECT "tenantId" FROM failed_run_count_by_tenant WHERE "failedWorkflowRunCount" > 0)
RETURNING alerts.id, alerts."createdAt", alerts."updatedAt", alerts."deletedAt", alerts."tenantId", alerts."maxFrequency", alerts."lastAlertedAt", alerts."tickerId", active_tenant_alerts."lastAlertedAt" AS "prevLastAlertedAt"
`
type PollTenantAlertsRow struct {
ID pgtype.UUID `json:"id"`
CreatedAt pgtype.Timestamp `json:"createdAt"`
UpdatedAt pgtype.Timestamp `json:"updatedAt"`
DeletedAt pgtype.Timestamp `json:"deletedAt"`
TenantId pgtype.UUID `json:"tenantId"`
MaxFrequency string `json:"maxFrequency"`
LastAlertedAt pgtype.Timestamp `json:"lastAlertedAt"`
TickerId pgtype.UUID `json:"tickerId"`
PrevLastAlertedAt pgtype.Timestamp `json:"prevLastAlertedAt"`
}
// Finds tenant alerts which haven't alerted since their frequency and assigns them to a ticker
func (q *Queries) PollTenantAlerts(ctx context.Context, db DBTX, tickerid pgtype.UUID) ([]*PollTenantAlertsRow, error) {
rows, err := db.Query(ctx, pollTenantAlerts, tickerid)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*PollTenantAlertsRow
for rows.Next() {
var i PollTenantAlertsRow
if err := rows.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.DeletedAt,
&i.TenantId,
&i.MaxFrequency,
&i.LastAlertedAt,
&i.TickerId,
&i.PrevLastAlertedAt,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const setTickersInactive = `-- name: SetTickersInactive :many
UPDATE
"Ticker" as tickers
SET
"isActive" = false
WHERE
"id" = ANY ($1::uuid[])
RETURNING
tickers.id, tickers."createdAt", tickers."updatedAt", tickers."lastHeartbeatAt", tickers."isActive"
`
type SetTickersInactiveRow struct {
Ticker Ticker `json:"ticker"`
}
func (q *Queries) SetTickersInactive(ctx context.Context, db DBTX, ids []pgtype.UUID) ([]*SetTickersInactiveRow, error) {
rows, err := db.Query(ctx, setTickersInactive, ids)
if err != nil {
return nil, err
}
defer rows.Close()
var items []*SetTickersInactiveRow
for rows.Next() {
var i SetTickersInactiveRow
if err := rows.Scan(
&i.Ticker.ID,
&i.Ticker.CreatedAt,
&i.Ticker.UpdatedAt,
&i.Ticker.LastHeartbeatAt,
&i.Ticker.IsActive,
); err != nil {
return nil, err
}
items = append(items, &i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const updateTicker = `-- name: UpdateTicker :one
UPDATE
"Ticker" as tickers
SET
"lastHeartbeatAt" = $1::timestamp
WHERE
"id" = $2::uuid
RETURNING id, "createdAt", "updatedAt", "lastHeartbeatAt", "isActive"
`
type UpdateTickerParams struct {
LastHeartbeatAt pgtype.Timestamp `json:"lastHeartbeatAt"`
ID pgtype.UUID `json:"id"`
}
func (q *Queries) UpdateTicker(ctx context.Context, db DBTX, arg UpdateTickerParams) (*Ticker, error) {
row := db.QueryRow(ctx, updateTicker, arg.LastHeartbeatAt, arg.ID)
var i Ticker
err := row.Scan(
&i.ID,
&i.CreatedAt,
&i.UpdatedAt,
&i.LastHeartbeatAt,
&i.IsActive,
)
return &i, err
}