socket reruns
This commit is contained in:
parent
a876f3c35b
commit
11c6c19628
29 changed files with 3921 additions and 233 deletions
58
database/postgres/init/08-create-runs-table.sql
Normal file
58
database/postgres/init/08-create-runs-table.sql
Normal 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;
|
||||
Loading…
Add table
Add a link
Reference in a new issue