socket reruns

This commit is contained in:
Boki 2025-07-04 17:04:47 -04:00
parent a876f3c35b
commit 11c6c19628
29 changed files with 3921 additions and 233 deletions

View file

@ -0,0 +1,58 @@
-- Create enum for run status
DO $$ BEGIN
CREATE TYPE run_status AS ENUM ('pending', 'running', 'completed', 'failed', 'cancelled', 'paused');
EXCEPTION
WHEN duplicate_object THEN null;
END $$;
-- Update backtests table to remove status and error columns (these belong to runs)
ALTER TABLE backtests DROP COLUMN IF EXISTS status;
ALTER TABLE backtests DROP COLUMN IF EXISTS error;
-- Create runs table
CREATE TABLE IF NOT EXISTS runs (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
backtest_id UUID NOT NULL REFERENCES backtests(id) ON DELETE CASCADE,
run_number INTEGER NOT NULL,
status run_status NOT NULL DEFAULT 'pending',
speed_multiplier NUMERIC(10, 2) DEFAULT 1.0,
error TEXT,
started_at TIMESTAMP WITH TIME ZONE,
completed_at TIMESTAMP WITH TIME ZONE,
paused_at TIMESTAMP WITH TIME ZONE,
progress NUMERIC(5, 2) DEFAULT 0, -- Progress percentage (0-100)
current_simulation_date TIMESTAMP WITH TIME ZONE, -- Current simulation date
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
UNIQUE(backtest_id, run_number)
);
-- Move backtest_results to reference runs instead of backtests
ALTER TABLE backtest_results DROP CONSTRAINT IF EXISTS backtest_results_backtest_id_fkey;
ALTER TABLE backtest_results RENAME COLUMN backtest_id TO run_id;
ALTER TABLE backtest_results ADD CONSTRAINT backtest_results_run_id_fkey
FOREIGN KEY (run_id) REFERENCES runs(id) ON DELETE CASCADE;
-- Create indexes for better query performance
CREATE INDEX idx_runs_backtest_id ON runs(backtest_id);
CREATE INDEX idx_runs_status ON runs(status);
CREATE INDEX idx_runs_created_at ON runs(created_at DESC);
-- Create updated_at trigger for runs
DROP TRIGGER IF EXISTS update_runs_updated_at ON runs;
CREATE TRIGGER update_runs_updated_at BEFORE UPDATE
ON runs FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
-- Create a view for easy querying of latest run per backtest
CREATE OR REPLACE VIEW latest_runs AS
SELECT DISTINCT ON (backtest_id)
r.*,
b.name as backtest_name,
b.strategy,
b.symbols,
b.start_date,
b.end_date,
b.initial_capital
FROM runs r
JOIN backtests b ON b.id = r.backtest_id
ORDER BY backtest_id, created_at DESC;