-
This commit is contained in:
23
faas/migrations/001_initial_schema.down.sql
Normal file
23
faas/migrations/001_initial_schema.down.sql
Normal file
@ -0,0 +1,23 @@
|
||||
-- Drop view
|
||||
DROP VIEW IF EXISTS function_stats;
|
||||
|
||||
-- Drop triggers
|
||||
DROP TRIGGER IF EXISTS update_functions_updated_at ON functions;
|
||||
DROP FUNCTION IF EXISTS update_updated_at_column();
|
||||
|
||||
-- Drop indexes
|
||||
DROP INDEX IF EXISTS idx_executions_created_at;
|
||||
DROP INDEX IF EXISTS idx_executions_executor_id;
|
||||
DROP INDEX IF EXISTS idx_executions_status;
|
||||
DROP INDEX IF EXISTS idx_executions_function_id;
|
||||
|
||||
DROP INDEX IF EXISTS idx_functions_created_at;
|
||||
DROP INDEX IF EXISTS idx_functions_runtime;
|
||||
DROP INDEX IF EXISTS idx_functions_app_id;
|
||||
|
||||
-- Drop tables
|
||||
DROP TABLE IF EXISTS executions;
|
||||
DROP TABLE IF EXISTS functions;
|
||||
|
||||
-- Drop extension (only if no other tables use it)
|
||||
-- DROP EXTENSION IF EXISTS "uuid-ossp";
|
||||
84
faas/migrations/001_initial_schema.up.sql
Normal file
84
faas/migrations/001_initial_schema.up.sql
Normal file
@ -0,0 +1,84 @@
|
||||
-- Create UUID extension
|
||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||
|
||||
-- Create functions table
|
||||
CREATE TABLE functions (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
name VARCHAR(255) NOT NULL,
|
||||
app_id VARCHAR(255) NOT NULL,
|
||||
runtime VARCHAR(50) NOT NULL,
|
||||
image VARCHAR(500) NOT NULL,
|
||||
handler VARCHAR(255) NOT NULL,
|
||||
code TEXT,
|
||||
environment JSONB DEFAULT '{}',
|
||||
timeout INTERVAL NOT NULL DEFAULT '30 seconds',
|
||||
memory INTEGER NOT NULL DEFAULT 128,
|
||||
owner_type VARCHAR(50) NOT NULL,
|
||||
owner_name VARCHAR(255) NOT NULL,
|
||||
owner_owner VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
UNIQUE(app_id, name)
|
||||
);
|
||||
|
||||
-- Create executions table
|
||||
CREATE TABLE executions (
|
||||
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
|
||||
function_id UUID NOT NULL REFERENCES functions(id) ON DELETE CASCADE,
|
||||
status VARCHAR(50) NOT NULL DEFAULT 'pending',
|
||||
input JSONB,
|
||||
output JSONB,
|
||||
error TEXT,
|
||||
duration INTERVAL,
|
||||
memory_used INTEGER,
|
||||
container_id VARCHAR(255),
|
||||
executor_id VARCHAR(255) NOT NULL,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
started_at TIMESTAMP,
|
||||
completed_at TIMESTAMP
|
||||
);
|
||||
|
||||
-- Create indexes for better query performance
|
||||
CREATE INDEX idx_functions_app_id ON functions(app_id);
|
||||
CREATE INDEX idx_functions_runtime ON functions(runtime);
|
||||
CREATE INDEX idx_functions_created_at ON functions(created_at);
|
||||
|
||||
CREATE INDEX idx_executions_function_id ON executions(function_id);
|
||||
CREATE INDEX idx_executions_status ON executions(status);
|
||||
CREATE INDEX idx_executions_executor_id ON executions(executor_id);
|
||||
CREATE INDEX idx_executions_created_at ON executions(created_at);
|
||||
|
||||
-- Create trigger to update updated_at timestamp
|
||||
CREATE OR REPLACE FUNCTION update_updated_at_column()
|
||||
RETURNS TRIGGER AS $$
|
||||
BEGIN
|
||||
NEW.updated_at = CURRENT_TIMESTAMP;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ language 'plpgsql';
|
||||
|
||||
CREATE TRIGGER update_functions_updated_at
|
||||
BEFORE UPDATE ON functions
|
||||
FOR EACH ROW EXECUTE FUNCTION update_updated_at_column();
|
||||
|
||||
-- Insert some default runtime configurations
|
||||
COMMENT ON TABLE functions IS 'Function definitions and configurations';
|
||||
COMMENT ON TABLE executions IS 'Function execution records and results';
|
||||
|
||||
-- Create a view for function statistics
|
||||
CREATE OR REPLACE VIEW function_stats AS
|
||||
SELECT
|
||||
f.id,
|
||||
f.name,
|
||||
f.app_id,
|
||||
f.runtime,
|
||||
COUNT(e.id) as total_executions,
|
||||
COUNT(CASE WHEN e.status = 'completed' THEN 1 END) as successful_executions,
|
||||
COUNT(CASE WHEN e.status = 'failed' THEN 1 END) as failed_executions,
|
||||
COUNT(CASE WHEN e.status = 'running' THEN 1 END) as running_executions,
|
||||
AVG(EXTRACT(epoch FROM e.duration)) as avg_duration_seconds,
|
||||
MAX(e.created_at) as last_execution_at
|
||||
FROM functions f
|
||||
LEFT JOIN executions e ON f.id = e.function_id
|
||||
GROUP BY f.id, f.name, f.app_id, f.runtime;
|
||||
Reference in New Issue
Block a user