48 lines
1.4 KiB
Python
48 lines
1.4 KiB
Python
from __future__ import annotations
|
|
|
|
import sqlite3
|
|
|
|
from backend.database.migrations.runner import Migration
|
|
|
|
|
|
def create_job_runs(connection: sqlite3.Connection) -> None:
|
|
connection.execute(
|
|
"""
|
|
CREATE TABLE IF NOT EXISTS job_runs (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
job_id TEXT NOT NULL,
|
|
idempotency_key TEXT NOT NULL,
|
|
status TEXT NOT NULL,
|
|
attempt INTEGER NOT NULL DEFAULT 1,
|
|
started_at TEXT NOT NULL,
|
|
finished_at TEXT,
|
|
elapsed_ms INTEGER NOT NULL DEFAULT 0,
|
|
error_code TEXT NOT NULL DEFAULT '',
|
|
message TEXT NOT NULL DEFAULT '',
|
|
output_version TEXT NOT NULL DEFAULT '',
|
|
metadata TEXT NOT NULL DEFAULT '{}',
|
|
UNIQUE(job_id, idempotency_key, attempt)
|
|
)
|
|
"""
|
|
)
|
|
connection.execute(
|
|
"""
|
|
CREATE INDEX IF NOT EXISTS idx_job_runs_job_started
|
|
ON job_runs(job_id, started_at DESC, id DESC)
|
|
"""
|
|
)
|
|
connection.execute(
|
|
"""
|
|
CREATE INDEX IF NOT EXISTS idx_job_runs_status
|
|
ON job_runs(status, started_at DESC, id DESC)
|
|
"""
|
|
)
|
|
|
|
|
|
MIGRATION = Migration(
|
|
version="0002",
|
|
name="create_job_runs",
|
|
action=create_job_runs,
|
|
signature="job-runs:v1:id,job,key,status,attempt,times,elapsed,error,output,metadata",
|
|
)
|