Phase 8: 完成 AI 能力增强、运营与增长工具、开发者生态、运维与监控

- Task 4: AI 能力增强 (ai_manager.py)
  - 自定义模型训练(领域特定实体识别)
  - 多模态大模型集成(GPT-4V、Claude 3、Gemini、Kimi-VL)
  - 知识图谱 RAG 智能问答
  - 智能摘要(提取式/生成式/关键点/时间线)
  - 预测性分析(趋势/异常/增长/演变预测)

- Task 5: 运营与增长工具 (growth_manager.py)
  - 用户行为分析(Mixpanel/Amplitude 集成)
  - A/B 测试框架
  - 邮件营销自动化
  - 推荐系统(邀请返利、团队升级激励)

- Task 6: 开发者生态 (developer_ecosystem_manager.py)
  - SDK 发布管理(Python/JavaScript/Go)
  - 模板市场
  - 插件市场
  - 开发者文档与示例代码

- Task 8: 运维与监控 (ops_manager.py)
  - 实时告警系统(PagerDuty/Opsgenie 集成)
  - 容量规划与自动扩缩容
  - 灾备与故障转移
  - 成本优化

Phase 8 全部 8 个任务已完成!
This commit is contained in:
OpenClaw Bot
2026-02-27 00:01:40 +08:00
parent c38f3eb467
commit 2aded2de48
22 changed files with 14076 additions and 7 deletions

View File

@@ -1723,3 +1723,880 @@ CREATE INDEX IF NOT EXISTS idx_smart_summaries_project ON smart_summaries(projec
CREATE INDEX IF NOT EXISTS idx_prediction_models_tenant ON prediction_models(tenant_id);
CREATE INDEX IF NOT EXISTS idx_prediction_models_project ON prediction_models(project_id);
CREATE INDEX IF NOT EXISTS idx_prediction_results_model ON prediction_results(model_id);
-- ============================================
-- Phase 8 Task 5: 运营与增长工具
-- ============================================
-- 分析事件表
CREATE TABLE IF NOT EXISTS analytics_events (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
user_id TEXT NOT NULL,
event_type TEXT NOT NULL, -- page_view, feature_use, conversion, signup, login, etc.
event_name TEXT NOT NULL,
properties TEXT DEFAULT '{}', -- JSON: 事件属性
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
session_id TEXT,
device_info TEXT DEFAULT '{}', -- JSON: 设备信息
referrer TEXT,
utm_source TEXT,
utm_medium TEXT,
utm_campaign TEXT,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 用户画像表
CREATE TABLE IF NOT EXISTS user_profiles (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
user_id TEXT NOT NULL UNIQUE,
first_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
last_seen TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
total_sessions INTEGER DEFAULT 0,
total_events INTEGER DEFAULT 0,
feature_usage TEXT DEFAULT '{}', -- JSON: 功能使用统计
subscription_history TEXT DEFAULT '[]', -- JSON: 订阅历史
ltv REAL DEFAULT 0, -- 生命周期价值
churn_risk_score REAL DEFAULT 0, -- 流失风险分数
engagement_score REAL DEFAULT 0.5, -- 参与度分数
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 转化漏斗表
CREATE TABLE IF NOT EXISTS funnels (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
steps TEXT NOT NULL, -- JSON: 漏斗步骤 [{"name": "", "event_name": ""}]
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- A/B 测试实验表
CREATE TABLE IF NOT EXISTS experiments (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
hypothesis TEXT,
status TEXT DEFAULT 'draft', -- draft, running, paused, completed, archived
variants TEXT NOT NULL, -- JSON: 实验变体
traffic_allocation TEXT DEFAULT 'random', -- random, stratified, targeted
traffic_split TEXT DEFAULT '{}', -- JSON: 流量分配比例
target_audience TEXT DEFAULT '{}', -- JSON: 目标受众条件
primary_metric TEXT NOT NULL,
secondary_metrics TEXT DEFAULT '[]', -- JSON: 次要指标列表
start_date TIMESTAMP,
end_date TIMESTAMP,
min_sample_size INTEGER DEFAULT 100,
confidence_level REAL DEFAULT 0.95,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by TEXT,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 实验分配记录表
CREATE TABLE IF NOT EXISTS experiment_assignments (
id TEXT PRIMARY KEY,
experiment_id TEXT NOT NULL,
user_id TEXT NOT NULL,
variant_id TEXT NOT NULL,
user_attributes TEXT DEFAULT '{}', -- JSON: 用户属性
assigned_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (experiment_id) REFERENCES experiments(id) ON DELETE CASCADE,
UNIQUE(experiment_id, user_id)
);
-- 实验指标记录表
CREATE TABLE IF NOT EXISTS experiment_metrics (
id TEXT PRIMARY KEY,
experiment_id TEXT NOT NULL,
variant_id TEXT NOT NULL,
user_id TEXT NOT NULL,
metric_name TEXT NOT NULL,
metric_value REAL DEFAULT 0,
recorded_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (experiment_id) REFERENCES experiments(id) ON DELETE CASCADE
);
-- 邮件模板表
CREATE TABLE IF NOT EXISTS email_templates (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
template_type TEXT NOT NULL, -- welcome, onboarding, feature_announcement, churn_recovery, etc.
subject TEXT NOT NULL,
html_content TEXT NOT NULL,
text_content TEXT,
variables TEXT DEFAULT '[]', -- JSON: 模板变量列表
preview_text TEXT,
from_name TEXT DEFAULT 'InsightFlow',
from_email TEXT DEFAULT 'noreply@insightflow.io',
reply_to TEXT,
is_active INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 邮件营销活动表
CREATE TABLE IF NOT EXISTS email_campaigns (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
template_id TEXT NOT NULL,
status TEXT DEFAULT 'draft', -- draft, scheduled, sending, completed
recipient_count INTEGER DEFAULT 0,
sent_count INTEGER DEFAULT 0,
delivered_count INTEGER DEFAULT 0,
opened_count INTEGER DEFAULT 0,
clicked_count INTEGER DEFAULT 0,
bounced_count INTEGER DEFAULT 0,
failed_count INTEGER DEFAULT 0,
scheduled_at TIMESTAMP,
started_at TIMESTAMP,
completed_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
FOREIGN KEY (template_id) REFERENCES email_templates(id) ON DELETE CASCADE
);
-- 邮件发送记录表
CREATE TABLE IF NOT EXISTS email_logs (
id TEXT PRIMARY KEY,
campaign_id TEXT,
tenant_id TEXT NOT NULL,
user_id TEXT NOT NULL,
email TEXT NOT NULL,
template_id TEXT NOT NULL,
status TEXT DEFAULT 'draft', -- draft, scheduled, sending, sent, delivered, opened, clicked, bounced, failed
subject TEXT,
sent_at TIMESTAMP,
delivered_at TIMESTAMP,
opened_at TIMESTAMP,
clicked_at TIMESTAMP,
ip_address TEXT,
user_agent TEXT,
error_message TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (campaign_id) REFERENCES email_campaigns(id) ON DELETE SET NULL,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
FOREIGN KEY (template_id) REFERENCES email_templates(id) ON DELETE CASCADE
);
-- 自动化工作流表
CREATE TABLE IF NOT EXISTS automation_workflows (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
trigger_type TEXT NOT NULL, -- user_signup, user_login, subscription_created, inactivity, etc.
trigger_conditions TEXT DEFAULT '{}', -- JSON: 触发条件
actions TEXT NOT NULL, -- JSON: 执行动作列表
is_active INTEGER DEFAULT 1,
execution_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 推荐计划表
CREATE TABLE IF NOT EXISTS referral_programs (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
referrer_reward_type TEXT NOT NULL, -- credit, discount, feature
referrer_reward_value REAL DEFAULT 0,
referee_reward_type TEXT NOT NULL,
referee_reward_value REAL DEFAULT 0,
max_referrals_per_user INTEGER DEFAULT 10,
referral_code_length INTEGER DEFAULT 8,
expiry_days INTEGER DEFAULT 30,
is_active INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 推荐记录表
CREATE TABLE IF NOT EXISTS referrals (
id TEXT PRIMARY KEY,
program_id TEXT NOT NULL,
tenant_id TEXT NOT NULL,
referrer_id TEXT NOT NULL, -- 推荐人
referee_id TEXT, -- 被推荐人
referral_code TEXT NOT NULL UNIQUE,
status TEXT DEFAULT 'pending', -- pending, converted, rewarded, expired
referrer_rewarded INTEGER DEFAULT 0,
referee_rewarded INTEGER DEFAULT 0,
referrer_reward_value REAL DEFAULT 0,
referee_reward_value REAL DEFAULT 0,
converted_at TIMESTAMP,
rewarded_at TIMESTAMP,
expires_at TIMESTAMP NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (program_id) REFERENCES referral_programs(id) ON DELETE CASCADE,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 团队升级激励表
CREATE TABLE IF NOT EXISTS team_incentives (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
target_tier TEXT NOT NULL, -- 目标层级
min_team_size INTEGER DEFAULT 1,
incentive_type TEXT NOT NULL, -- credit, discount, feature
incentive_value REAL DEFAULT 0,
valid_from TIMESTAMP NOT NULL,
valid_until TIMESTAMP NOT NULL,
is_active INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 运营与增长相关索引
CREATE INDEX IF NOT EXISTS idx_analytics_tenant ON analytics_events(tenant_id);
CREATE INDEX IF NOT EXISTS idx_analytics_user ON analytics_events(user_id);
CREATE INDEX IF NOT EXISTS idx_analytics_type ON analytics_events(event_type);
CREATE INDEX IF NOT EXISTS idx_analytics_timestamp ON analytics_events(timestamp);
CREATE INDEX IF NOT EXISTS idx_analytics_session ON analytics_events(session_id);
CREATE INDEX IF NOT EXISTS idx_user_profiles_tenant ON user_profiles(tenant_id);
CREATE INDEX IF NOT EXISTS idx_user_profiles_user ON user_profiles(user_id);
CREATE INDEX IF NOT EXISTS idx_funnels_tenant ON funnels(tenant_id);
CREATE INDEX IF NOT EXISTS idx_experiments_tenant ON experiments(tenant_id);
CREATE INDEX IF NOT EXISTS idx_experiments_status ON experiments(status);
CREATE INDEX IF NOT EXISTS idx_exp_assignments_exp ON experiment_assignments(experiment_id);
CREATE INDEX IF NOT EXISTS idx_exp_assignments_user ON experiment_assignments(user_id);
CREATE INDEX IF NOT EXISTS idx_exp_metrics_exp ON experiment_metrics(experiment_id);
CREATE INDEX IF NOT EXISTS idx_email_templates_tenant ON email_templates(tenant_id);
CREATE INDEX IF NOT EXISTS idx_email_templates_type ON email_templates(template_type);
CREATE INDEX IF NOT EXISTS idx_email_campaigns_tenant ON email_campaigns(tenant_id);
CREATE INDEX IF NOT EXISTS idx_email_logs_campaign ON email_logs(campaign_id);
CREATE INDEX IF NOT EXISTS idx_email_logs_user ON email_logs(user_id);
CREATE INDEX IF NOT EXISTS idx_email_logs_status ON email_logs(status);
CREATE INDEX IF NOT EXISTS idx_automation_workflows_tenant ON automation_workflows(tenant_id);
CREATE INDEX IF NOT EXISTS idx_referral_programs_tenant ON referral_programs(tenant_id);
CREATE INDEX IF NOT EXISTS idx_referrals_program ON referrals(program_id);
CREATE INDEX IF NOT EXISTS idx_referrals_code ON referrals(referral_code);
CREATE INDEX IF NOT EXISTS idx_referrals_referrer ON referrals(referrer_id);
CREATE INDEX IF NOT EXISTS idx_team_incentives_tenant ON team_incentives(tenant_id);
-- ============================================
-- Phase 8 Task 6: 开发者生态系统
-- ============================================
-- SDK 发布表
CREATE TABLE IF NOT EXISTS sdk_releases (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
language TEXT NOT NULL, -- python, javascript, typescript, go, java, rust
version TEXT NOT NULL,
description TEXT NOT NULL,
changelog TEXT,
download_url TEXT NOT NULL,
documentation_url TEXT,
repository_url TEXT,
package_name TEXT NOT NULL, -- pip/npm/go module name
status TEXT DEFAULT 'draft', -- draft, beta, stable, deprecated, archived
min_platform_version TEXT DEFAULT '1.0.0',
dependencies TEXT DEFAULT '[]', -- JSON: [{"name": "requests", "version": ">=2.0"}]
file_size INTEGER DEFAULT 0,
checksum TEXT,
download_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
published_at TIMESTAMP,
created_by TEXT NOT NULL
);
-- SDK 版本历史表
CREATE TABLE IF NOT EXISTS sdk_versions (
id TEXT PRIMARY KEY,
sdk_id TEXT NOT NULL,
version TEXT NOT NULL,
is_latest INTEGER DEFAULT 0,
is_lts INTEGER DEFAULT 0, -- 长期支持版本
release_notes TEXT,
download_url TEXT NOT NULL,
checksum TEXT,
file_size INTEGER DEFAULT 0,
download_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (sdk_id) REFERENCES sdk_releases(id) ON DELETE CASCADE
);
-- 模板市场表
CREATE TABLE IF NOT EXISTS template_market (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT NOT NULL,
category TEXT NOT NULL, -- medical, legal, finance, education, tech, general
subcategory TEXT,
tags TEXT DEFAULT '[]', -- JSON array
author_id TEXT NOT NULL,
author_name TEXT NOT NULL,
status TEXT DEFAULT 'pending', -- pending, approved, rejected, published, unlisted
price REAL DEFAULT 0, -- 0 = 免费
currency TEXT DEFAULT 'CNY',
preview_image_url TEXT,
demo_url TEXT,
documentation_url TEXT,
download_url TEXT,
install_count INTEGER DEFAULT 0,
rating REAL DEFAULT 0,
rating_count INTEGER DEFAULT 0,
review_count INTEGER DEFAULT 0,
version TEXT DEFAULT '1.0.0',
min_platform_version TEXT DEFAULT '1.0.0',
file_size INTEGER DEFAULT 0,
checksum TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
published_at TIMESTAMP
);
-- 模板评价表
CREATE TABLE IF NOT EXISTS template_reviews (
id TEXT PRIMARY KEY,
template_id TEXT NOT NULL,
user_id TEXT NOT NULL,
user_name TEXT NOT NULL,
rating INTEGER NOT NULL, -- 1-5
comment TEXT,
is_verified_purchase INTEGER DEFAULT 0,
helpful_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (template_id) REFERENCES template_market(id) ON DELETE CASCADE
);
-- 插件市场表
CREATE TABLE IF NOT EXISTS plugin_market (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT NOT NULL,
category TEXT NOT NULL, -- integration, analysis, visualization, automation, security, custom
tags TEXT DEFAULT '[]', -- JSON array
author_id TEXT NOT NULL,
author_name TEXT NOT NULL,
status TEXT DEFAULT 'pending', -- pending, reviewing, approved, rejected, published, suspended
price REAL DEFAULT 0,
currency TEXT DEFAULT 'CNY',
pricing_model TEXT DEFAULT 'free', -- free, paid, freemium, subscription
preview_image_url TEXT,
demo_url TEXT,
documentation_url TEXT,
repository_url TEXT,
download_url TEXT,
webhook_url TEXT, -- 用于插件回调
permissions TEXT DEFAULT '[]', -- JSON: 需要的权限列表
install_count INTEGER DEFAULT 0,
active_install_count INTEGER DEFAULT 0,
rating REAL DEFAULT 0,
rating_count INTEGER DEFAULT 0,
review_count INTEGER DEFAULT 0,
version TEXT DEFAULT '1.0.0',
min_platform_version TEXT DEFAULT '1.0.0',
file_size INTEGER DEFAULT 0,
checksum TEXT,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
published_at TIMESTAMP,
reviewed_by TEXT,
reviewed_at TIMESTAMP,
review_notes TEXT
);
-- 插件评价表
CREATE TABLE IF NOT EXISTS plugin_reviews (
id TEXT PRIMARY KEY,
plugin_id TEXT NOT NULL,
user_id TEXT NOT NULL,
user_name TEXT NOT NULL,
rating INTEGER NOT NULL, -- 1-5
comment TEXT,
is_verified_purchase INTEGER DEFAULT 0,
helpful_count INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (plugin_id) REFERENCES plugin_market(id) ON DELETE CASCADE
);
-- 开发者档案表
CREATE TABLE IF NOT EXISTS developer_profiles (
id TEXT PRIMARY KEY,
user_id TEXT NOT NULL UNIQUE,
display_name TEXT NOT NULL,
email TEXT NOT NULL,
bio TEXT,
website TEXT,
github_url TEXT,
avatar_url TEXT,
status TEXT DEFAULT 'unverified', -- unverified, pending, verified, certified, suspended
verification_documents TEXT DEFAULT '{}', -- JSON: 认证文档
total_sales REAL DEFAULT 0,
total_downloads INTEGER DEFAULT 0,
plugin_count INTEGER DEFAULT 0,
template_count INTEGER DEFAULT 0,
rating_average REAL DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
verified_at TIMESTAMP
);
-- 开发者收益表
CREATE TABLE IF NOT EXISTS developer_revenues (
id TEXT PRIMARY KEY,
developer_id TEXT NOT NULL,
item_type TEXT NOT NULL, -- plugin, template
item_id TEXT NOT NULL,
item_name TEXT NOT NULL,
sale_amount REAL NOT NULL,
platform_fee REAL NOT NULL,
developer_earnings REAL NOT NULL,
currency TEXT DEFAULT 'CNY',
buyer_id TEXT NOT NULL,
transaction_id TEXT NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (developer_id) REFERENCES developer_profiles(id) ON DELETE CASCADE
);
-- 代码示例表
CREATE TABLE IF NOT EXISTS code_examples (
id TEXT PRIMARY KEY,
title TEXT NOT NULL,
description TEXT,
language TEXT NOT NULL,
category TEXT NOT NULL,
code TEXT NOT NULL,
explanation TEXT,
tags TEXT DEFAULT '[]', -- JSON array
author_id TEXT NOT NULL,
author_name TEXT NOT NULL,
sdk_id TEXT, -- 关联的 SDK
api_endpoints TEXT DEFAULT '[]', -- JSON: 涉及的 API 端点
view_count INTEGER DEFAULT 0,
copy_count INTEGER DEFAULT 0,
rating REAL DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (sdk_id) REFERENCES sdk_releases(id) ON DELETE SET NULL
);
-- API 文档表
CREATE TABLE IF NOT EXISTS api_documentation (
id TEXT PRIMARY KEY,
version TEXT NOT NULL,
openapi_spec TEXT NOT NULL, -- OpenAPI JSON
markdown_content TEXT NOT NULL,
html_content TEXT NOT NULL,
changelog TEXT,
generated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
generated_by TEXT NOT NULL
);
-- 开发者门户配置表
CREATE TABLE IF NOT EXISTS developer_portal_configs (
id TEXT PRIMARY KEY,
name TEXT NOT NULL,
description TEXT,
theme TEXT DEFAULT 'default',
custom_css TEXT,
custom_js TEXT,
logo_url TEXT,
favicon_url TEXT,
primary_color TEXT DEFAULT '#1890ff',
secondary_color TEXT DEFAULT '#52c41a',
support_email TEXT DEFAULT 'support@insightflow.io',
support_url TEXT,
github_url TEXT,
discord_url TEXT,
api_base_url TEXT DEFAULT 'https://api.insightflow.io',
is_active INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
-- 开发者生态系统相关索引
CREATE INDEX IF NOT EXISTS idx_sdk_language ON sdk_releases(language);
CREATE INDEX IF NOT EXISTS idx_sdk_status ON sdk_releases(status);
CREATE INDEX IF NOT EXISTS idx_sdk_package ON sdk_releases(package_name);
CREATE INDEX IF NOT EXISTS idx_sdk_versions_sdk ON sdk_versions(sdk_id);
CREATE INDEX IF NOT EXISTS idx_template_category ON template_market(category);
CREATE INDEX IF NOT EXISTS idx_template_status ON template_market(status);
CREATE INDEX IF NOT EXISTS idx_template_author ON template_market(author_id);
CREATE INDEX IF NOT EXISTS idx_template_price ON template_market(price);
CREATE INDEX IF NOT EXISTS idx_template_reviews_template ON template_reviews(template_id);
CREATE INDEX IF NOT EXISTS idx_plugin_category ON plugin_market(category);
CREATE INDEX IF NOT EXISTS idx_plugin_status ON plugin_market(status);
CREATE INDEX IF NOT EXISTS idx_plugin_author ON plugin_market(author_id);
CREATE INDEX IF NOT EXISTS idx_plugin_reviews_plugin ON plugin_reviews(plugin_id);
CREATE INDEX IF NOT EXISTS idx_developer_user ON developer_profiles(user_id);
CREATE INDEX IF NOT EXISTS idx_developer_status ON developer_profiles(status);
CREATE INDEX IF NOT EXISTS idx_developer_revenues_dev ON developer_revenues(developer_id);
CREATE INDEX IF NOT EXISTS idx_code_examples_language ON code_examples(language);
CREATE INDEX IF NOT EXISTS idx_code_examples_category ON code_examples(category);
CREATE INDEX IF NOT EXISTS idx_code_examples_sdk ON code_examples(sdk_id);
-- ============================================
-- Phase 8 Task 8: 运维与监控
-- ============================================
-- 告警规则表
CREATE TABLE IF NOT EXISTS alert_rules (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
description TEXT,
rule_type TEXT NOT NULL, -- threshold, anomaly, predictive, composite
severity TEXT NOT NULL, -- p0, p1, p2, p3
metric TEXT NOT NULL,
condition TEXT NOT NULL, -- >, <, >=, <=, ==, !=
threshold REAL NOT NULL,
duration INTEGER DEFAULT 60, -- 持续时间(秒)
evaluation_interval INTEGER DEFAULT 60, -- 评估间隔(秒)
channels TEXT DEFAULT '[]', -- JSON: 告警渠道ID列表
labels TEXT DEFAULT '{}', -- JSON: 标签
annotations TEXT DEFAULT '{}', -- JSON: 注释
is_enabled INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
created_by TEXT NOT NULL,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 告警渠道表
CREATE TABLE IF NOT EXISTS alert_channels (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
channel_type TEXT NOT NULL, -- pagerduty, opsgenie, feishu, dingtalk, slack, email, sms, webhook
config TEXT DEFAULT '{}', -- JSON: 渠道特定配置
severity_filter TEXT DEFAULT '["p0", "p1", "p2", "p3"]', -- JSON: 过滤的告警级别
is_enabled INTEGER DEFAULT 1,
success_count INTEGER DEFAULT 0,
fail_count INTEGER DEFAULT 0,
last_used_at TIMESTAMP,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 告警实例表
CREATE TABLE IF NOT EXISTS alerts (
id TEXT PRIMARY KEY,
rule_id TEXT NOT NULL,
tenant_id TEXT NOT NULL,
severity TEXT NOT NULL, -- p0, p1, p2, p3
status TEXT DEFAULT 'firing', -- firing, resolved, acknowledged, suppressed
title TEXT NOT NULL,
description TEXT,
metric TEXT NOT NULL,
value REAL NOT NULL,
threshold REAL NOT NULL,
labels TEXT DEFAULT '{}', -- JSON: 标签
annotations TEXT DEFAULT '{}', -- JSON: 注释
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
resolved_at TIMESTAMP,
acknowledged_by TEXT,
acknowledged_at TIMESTAMP,
notification_sent TEXT DEFAULT '{}', -- JSON: 渠道发送状态
suppression_count INTEGER DEFAULT 0,
FOREIGN KEY (rule_id) REFERENCES alert_rules(id) ON DELETE CASCADE,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 告警抑制规则表
CREATE TABLE IF NOT EXISTS alert_suppression_rules (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
matchers TEXT DEFAULT '{}', -- JSON: 匹配条件
duration INTEGER DEFAULT 3600, -- 抑制持续时间(秒)
is_regex INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
expires_at TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 告警聚合组表
CREATE TABLE IF NOT EXISTS alert_groups (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
group_key TEXT NOT NULL,
alerts TEXT DEFAULT '[]', -- JSON: 告警ID列表
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 资源指标表
CREATE TABLE IF NOT EXISTS resource_metrics (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
resource_type TEXT NOT NULL, -- cpu, memory, disk, network, gpu, database, cache, queue
resource_id TEXT NOT NULL,
metric_name TEXT NOT NULL,
metric_value REAL NOT NULL,
unit TEXT NOT NULL,
timestamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
metadata TEXT DEFAULT '{}', -- JSON: 额外元数据
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 容量规划表
CREATE TABLE IF NOT EXISTS capacity_plans (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
resource_type TEXT NOT NULL,
current_capacity REAL NOT NULL,
predicted_capacity REAL NOT NULL,
prediction_date TEXT NOT NULL,
confidence REAL DEFAULT 0.8,
recommended_action TEXT NOT NULL, -- scale_up, scale_down, maintain
estimated_cost REAL DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 自动扩缩容策略表
CREATE TABLE IF NOT EXISTS auto_scaling_policies (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
resource_type TEXT NOT NULL,
min_instances INTEGER DEFAULT 1,
max_instances INTEGER DEFAULT 10,
target_utilization REAL DEFAULT 0.7,
scale_up_threshold REAL DEFAULT 0.8,
scale_down_threshold REAL DEFAULT 0.3,
scale_up_step INTEGER DEFAULT 1,
scale_down_step INTEGER DEFAULT 1,
cooldown_period INTEGER DEFAULT 300, -- 冷却时间(秒)
is_enabled INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 扩缩容事件表
CREATE TABLE IF NOT EXISTS scaling_events (
id TEXT PRIMARY KEY,
policy_id TEXT NOT NULL,
tenant_id TEXT NOT NULL,
action TEXT NOT NULL, -- scale_up, scale_down, maintain
from_count INTEGER NOT NULL,
to_count INTEGER NOT NULL,
reason TEXT,
triggered_by TEXT DEFAULT 'auto', -- manual, auto, scheduled
status TEXT DEFAULT 'pending', -- pending, in_progress, completed, failed
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP,
error_message TEXT,
FOREIGN KEY (policy_id) REFERENCES auto_scaling_policies(id) ON DELETE CASCADE,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 健康检查配置表
CREATE TABLE IF NOT EXISTS health_checks (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
target_type TEXT NOT NULL, -- service, database, api, etc.
target_id TEXT NOT NULL,
check_type TEXT NOT NULL, -- http, tcp, ping, custom
check_config TEXT DEFAULT '{}', -- JSON: 检查配置
interval INTEGER DEFAULT 60, -- 检查间隔(秒)
timeout INTEGER DEFAULT 10, -- 超时时间(秒)
retry_count INTEGER DEFAULT 3,
healthy_threshold INTEGER DEFAULT 2,
unhealthy_threshold INTEGER DEFAULT 3,
is_enabled INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 健康检查结果表
CREATE TABLE IF NOT EXISTS health_check_results (
id TEXT PRIMARY KEY,
check_id TEXT NOT NULL,
tenant_id TEXT NOT NULL,
status TEXT NOT NULL, -- healthy, degraded, unhealthy, unknown
response_time REAL DEFAULT 0, -- 响应时间(毫秒)
message TEXT,
details TEXT DEFAULT '{}', -- JSON: 详细信息
checked_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (check_id) REFERENCES health_checks(id) ON DELETE CASCADE,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 故障转移配置表
CREATE TABLE IF NOT EXISTS failover_configs (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
primary_region TEXT NOT NULL,
secondary_regions TEXT DEFAULT '[]', -- JSON: 备用区域列表
failover_trigger TEXT NOT NULL,
auto_failover INTEGER DEFAULT 0,
failover_timeout INTEGER DEFAULT 300, -- 故障转移超时(秒)
health_check_id TEXT,
is_enabled INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE,
FOREIGN KEY (health_check_id) REFERENCES health_checks(id) ON DELETE SET NULL
);
-- 故障转移事件表
CREATE TABLE IF NOT EXISTS failover_events (
id TEXT PRIMARY KEY,
config_id TEXT NOT NULL,
tenant_id TEXT NOT NULL,
from_region TEXT NOT NULL,
to_region TEXT NOT NULL,
reason TEXT,
status TEXT DEFAULT 'initiated', -- initiated, in_progress, completed, failed, rolled_back
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP,
rolled_back_at TIMESTAMP,
FOREIGN KEY (config_id) REFERENCES failover_configs(id) ON DELETE CASCADE,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 备份任务表
CREATE TABLE IF NOT EXISTS backup_jobs (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
name TEXT NOT NULL,
backup_type TEXT NOT NULL, -- full, incremental, differential
target_type TEXT NOT NULL, -- database, files, configuration
target_id TEXT NOT NULL,
schedule TEXT NOT NULL, -- cron 表达式
retention_days INTEGER DEFAULT 30,
encryption_enabled INTEGER DEFAULT 1,
compression_enabled INTEGER DEFAULT 1,
storage_location TEXT,
is_enabled INTEGER DEFAULT 1,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 备份记录表
CREATE TABLE IF NOT EXISTS backup_records (
id TEXT PRIMARY KEY,
job_id TEXT NOT NULL,
tenant_id TEXT NOT NULL,
status TEXT DEFAULT 'pending', -- pending, in_progress, completed, failed, verified
size_bytes INTEGER DEFAULT 0,
checksum TEXT,
started_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
completed_at TIMESTAMP,
verified_at TIMESTAMP,
error_message TEXT,
storage_path TEXT,
FOREIGN KEY (job_id) REFERENCES backup_jobs(id) ON DELETE CASCADE,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 成本报告表
CREATE TABLE IF NOT EXISTS cost_reports (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
report_period TEXT NOT NULL, -- YYYY-MM
total_cost REAL DEFAULT 0,
currency TEXT DEFAULT 'CNY',
breakdown TEXT DEFAULT '{}', -- JSON: 按资源类型分解
trends TEXT DEFAULT '{}', -- JSON: 趋势数据
anomalies TEXT DEFAULT '[]', -- JSON: 异常检测
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 资源利用率表
CREATE TABLE IF NOT EXISTS resource_utilizations (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
resource_type TEXT NOT NULL,
resource_id TEXT NOT NULL,
utilization_rate REAL DEFAULT 0, -- 0-1
peak_utilization REAL DEFAULT 0,
avg_utilization REAL DEFAULT 0,
idle_time_percent REAL DEFAULT 0,
report_date TEXT NOT NULL, -- YYYY-MM-DD
recommendations TEXT DEFAULT '[]', -- JSON: 建议列表
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 闲置资源表
CREATE TABLE IF NOT EXISTS idle_resources (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
resource_type TEXT NOT NULL,
resource_id TEXT NOT NULL,
resource_name TEXT NOT NULL,
idle_since TIMESTAMP NOT NULL,
estimated_monthly_cost REAL DEFAULT 0,
currency TEXT DEFAULT 'CNY',
reason TEXT,
recommendation TEXT,
detected_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 成本优化建议表
CREATE TABLE IF NOT EXISTS cost_optimization_suggestions (
id TEXT PRIMARY KEY,
tenant_id TEXT NOT NULL,
category TEXT NOT NULL, -- resource_rightsize, reserved_instances, spot_instances, etc.
title TEXT NOT NULL,
description TEXT,
potential_savings REAL DEFAULT 0,
currency TEXT DEFAULT 'CNY',
confidence REAL DEFAULT 0.5,
difficulty TEXT DEFAULT 'medium', -- easy, medium, hard
implementation_steps TEXT DEFAULT '[]', -- JSON: 实施步骤
risk_level TEXT DEFAULT 'low', -- low, medium, high
is_applied INTEGER DEFAULT 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
applied_at TIMESTAMP,
FOREIGN KEY (tenant_id) REFERENCES tenants(id) ON DELETE CASCADE
);
-- 运维与监控相关索引
CREATE INDEX IF NOT EXISTS idx_alert_rules_tenant ON alert_rules(tenant_id);
CREATE INDEX IF NOT EXISTS idx_alert_rules_enabled ON alert_rules(is_enabled);
CREATE INDEX IF NOT EXISTS idx_alert_channels_tenant ON alert_channels(tenant_id);
CREATE INDEX IF NOT EXISTS idx_alerts_tenant ON alerts(tenant_id);
CREATE INDEX IF NOT EXISTS idx_alerts_status ON alerts(status);
CREATE INDEX IF NOT EXISTS idx_alerts_severity ON alerts(severity);
CREATE INDEX IF NOT EXISTS idx_alerts_rule ON alerts(rule_id);
CREATE INDEX IF NOT EXISTS idx_resource_metrics_tenant ON resource_metrics(tenant_id);
CREATE INDEX IF NOT EXISTS idx_resource_metrics_type ON resource_metrics(resource_type);
CREATE INDEX IF NOT EXISTS idx_resource_metrics_name ON resource_metrics(metric_name);
CREATE INDEX IF NOT EXISTS idx_resource_metrics_timestamp ON resource_metrics(timestamp);
CREATE INDEX IF NOT EXISTS idx_capacity_plans_tenant ON capacity_plans(tenant_id);
CREATE INDEX IF NOT EXISTS idx_auto_scaling_policies_tenant ON auto_scaling_policies(tenant_id);
CREATE INDEX IF NOT EXISTS idx_scaling_events_policy ON scaling_events(policy_id);
CREATE INDEX IF NOT EXISTS idx_scaling_events_tenant ON scaling_events(tenant_id);
CREATE INDEX IF NOT EXISTS idx_health_checks_tenant ON health_checks(tenant_id);
CREATE INDEX IF NOT EXISTS idx_health_check_results_check ON health_check_results(check_id);
CREATE INDEX IF NOT EXISTS idx_failover_configs_tenant ON failover_configs(tenant_id);
CREATE INDEX IF NOT EXISTS idx_failover_events_config ON failover_events(config_id);
CREATE INDEX IF NOT EXISTS idx_backup_jobs_tenant ON backup_jobs(tenant_id);
CREATE INDEX IF NOT EXISTS idx_backup_records_job ON backup_records(job_id);
CREATE INDEX IF NOT EXISTS idx_cost_reports_tenant ON cost_reports(tenant_id);
CREATE INDEX IF NOT EXISTS idx_resource_utilizations_tenant ON resource_utilizations(tenant_id);
CREATE INDEX IF NOT EXISTS idx_idle_resources_tenant ON idle_resources(tenant_id);
CREATE INDEX IF NOT EXISTS idx_cost_suggestions_tenant ON cost_optimization_suggestions(tenant_id);