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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user