Phase 7: Add workflow automation module
- Create workflow_manager.py with APScheduler integration - Add WebhookNotifier supporting Feishu/DingTalk/Slack - Update schema.sql with workflows, workflow_logs, webhook_configs tables - Add workflow API endpoints (CRUD, trigger, logs) - Add webhook API endpoints (CRUD, test) - Update requirements.txt with APScheduler dependency - Update STATUS.md with Phase 7 progress
This commit is contained in:
@@ -178,8 +178,145 @@ CREATE INDEX IF NOT EXISTS idx_entity_attributes_entity ON entity_attributes(ent
|
||||
CREATE INDEX IF NOT EXISTS idx_entity_attributes_template ON entity_attributes(template_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_attr_history_entity ON attribute_history(entity_id);
|
||||
|
||||
-- Phase 5: 属性相关索引
|
||||
CREATE INDEX IF NOT EXISTS idx_attr_templates_project ON attribute_templates(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_entity_attributes_entity ON entity_attributes(entity_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_entity_attributes_template ON entity_attributes(template_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_attr_history_entity ON attribute_history(entity_id);
|
||||
-- Phase 7: 工作流相关表
|
||||
|
||||
-- 工作流配置表
|
||||
CREATE TABLE IF NOT EXISTS workflows (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
description TEXT,
|
||||
workflow_type TEXT NOT NULL, -- auto_analyze, auto_align, auto_relation, scheduled_report, custom
|
||||
project_id TEXT NOT NULL,
|
||||
status TEXT DEFAULT 'active', -- active, paused, error, completed
|
||||
schedule TEXT, -- cron expression or interval minutes
|
||||
schedule_type TEXT DEFAULT 'manual', -- manual, cron, interval
|
||||
config TEXT, -- JSON: workflow specific configuration
|
||||
webhook_ids TEXT, -- JSON array of webhook config IDs
|
||||
is_active BOOLEAN DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
last_run_at TIMESTAMP,
|
||||
next_run_at TIMESTAMP,
|
||||
run_count INTEGER DEFAULT 0,
|
||||
success_count INTEGER DEFAULT 0,
|
||||
fail_count INTEGER DEFAULT 0,
|
||||
FOREIGN KEY (project_id) REFERENCES projects(id)
|
||||
);
|
||||
|
||||
-- 工作流任务表
|
||||
CREATE TABLE IF NOT EXISTS workflow_tasks (
|
||||
id TEXT PRIMARY KEY,
|
||||
workflow_id TEXT NOT NULL,
|
||||
name TEXT NOT NULL,
|
||||
task_type TEXT NOT NULL, -- analyze, align, discover_relations, notify, custom
|
||||
config TEXT, -- JSON: task specific configuration
|
||||
task_order INTEGER DEFAULT 0,
|
||||
depends_on TEXT, -- JSON array of task IDs
|
||||
timeout_seconds INTEGER DEFAULT 300,
|
||||
retry_count INTEGER DEFAULT 3,
|
||||
retry_delay INTEGER DEFAULT 5,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE
|
||||
);
|
||||
|
||||
-- Webhook 配置表
|
||||
CREATE TABLE IF NOT EXISTS webhook_configs (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
webhook_type TEXT NOT NULL, -- feishu, dingtalk, slack, custom
|
||||
url TEXT NOT NULL,
|
||||
secret TEXT, -- for signature verification
|
||||
headers TEXT, -- JSON: custom headers
|
||||
template TEXT, -- message template
|
||||
is_active BOOLEAN DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
last_used_at TIMESTAMP,
|
||||
success_count INTEGER DEFAULT 0,
|
||||
fail_count INTEGER DEFAULT 0
|
||||
);
|
||||
|
||||
-- 工作流执行日志表
|
||||
CREATE TABLE IF NOT EXISTS workflow_logs (
|
||||
id TEXT PRIMARY KEY,
|
||||
workflow_id TEXT NOT NULL,
|
||||
task_id TEXT, -- NULL if workflow-level log
|
||||
status TEXT DEFAULT 'pending', -- pending, running, success, failed, cancelled
|
||||
start_time TIMESTAMP,
|
||||
end_time TIMESTAMP,
|
||||
duration_ms INTEGER,
|
||||
input_data TEXT, -- JSON: input parameters
|
||||
output_data TEXT, -- JSON: execution results
|
||||
error_message TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (workflow_id) REFERENCES workflows(id) ON DELETE CASCADE,
|
||||
FOREIGN KEY (task_id) REFERENCES workflow_tasks(id) ON DELETE SET NULL
|
||||
);
|
||||
|
||||
-- Phase 7: 工作流相关索引
|
||||
CREATE INDEX IF NOT EXISTS idx_workflows_project ON workflows(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflows_status ON workflows(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflows_type ON workflows(workflow_type);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_tasks_workflow ON workflow_tasks(workflow_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_logs_workflow ON workflow_logs(workflow_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_logs_task ON workflow_logs(task_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_logs_status ON workflow_logs(status);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_logs_created ON workflow_logs(created_at);
|
||||
|
||||
-- Phase 7: 工作流自动化表
|
||||
-- 工作流配置表
|
||||
CREATE TABLE IF NOT EXISTS workflows (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
task_type TEXT NOT NULL, -- auto_analyze, auto_align, auto_relation, custom
|
||||
config TEXT, -- JSON 配置
|
||||
trigger_type TEXT DEFAULT 'manual', -- schedule, event, manual
|
||||
schedule TEXT, -- Cron 表达式或间隔
|
||||
project_id TEXT,
|
||||
enabled INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
last_run_at TIMESTAMP,
|
||||
next_run_at TIMESTAMP,
|
||||
run_count INTEGER DEFAULT 0,
|
||||
fail_count INTEGER DEFAULT 0,
|
||||
FOREIGN KEY (project_id) REFERENCES projects(id)
|
||||
);
|
||||
|
||||
-- 工作流执行日志表
|
||||
CREATE TABLE IF NOT EXISTS workflow_logs (
|
||||
id TEXT PRIMARY KEY,
|
||||
workflow_id TEXT NOT NULL,
|
||||
task_id TEXT NOT NULL,
|
||||
status TEXT NOT NULL, -- pending, running, success, failed, cancelled
|
||||
started_at TIMESTAMP NOT NULL,
|
||||
completed_at TIMESTAMP,
|
||||
result TEXT, -- JSON 结果
|
||||
error_message TEXT,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (workflow_id) REFERENCES workflows(id)
|
||||
);
|
||||
|
||||
-- Webhook 配置表
|
||||
CREATE TABLE IF NOT EXISTS webhook_configs (
|
||||
id TEXT PRIMARY KEY,
|
||||
name TEXT NOT NULL,
|
||||
webhook_type TEXT NOT NULL, -- feishu, dingtalk, slack, custom
|
||||
url TEXT NOT NULL,
|
||||
secret TEXT,
|
||||
headers TEXT, -- JSON 格式
|
||||
project_id TEXT,
|
||||
events TEXT, -- JSON 数组,如 ["workflow_completed", "workflow_failed"]
|
||||
enabled INTEGER DEFAULT 1,
|
||||
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||
FOREIGN KEY (project_id) REFERENCES projects(id)
|
||||
);
|
||||
|
||||
-- Phase 7: 工作流相关索引
|
||||
CREATE INDEX IF NOT EXISTS idx_workflows_project ON workflows(project_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflows_enabled ON workflows(enabled);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_logs_workflow ON workflow_logs(workflow_id);
|
||||
CREATE INDEX IF NOT EXISTS idx_workflow_logs_created ON workflow_logs(created_at);
|
||||
CREATE INDEX IF NOT EXISTS idx_webhook_configs_project ON webhook_configs(project_id);
|
||||
|
||||
Reference in New Issue
Block a user