8.0 KiB
8.0 KiB
///
DATABASE.md
描述:WXAuto Center 数据库设计文档
作者:AI Generated
创建日期:2026-04-05
更新日期:2026-04-06
///
WXAuto Center 数据库设计文档
概述
本系统使用 PostgreSQL 数据库,通过 SQLAlchemy ORM 进行数据访问。数据库包含以下表:
| 表名 | 说明 |
|---|---|
nodes |
节点配置表 |
webhook_urls |
Webhook URL 表 |
logs |
日志表 |
plugin_configs |
插件配置表 |
ER 图
┌─────────────────┐ ┌─────────────────┐
│ nodes │ │ webhook_urls │
├─────────────────┤ ├─────────────────┤
│ node_id (PK) │ │ id (PK) │
│ name │ │ name │
│ api_url │ │ url │
│ api_key │ │ format │
│ enabled │ │ enabled │
│ description │ │ event_types │
│ group │ │ created_at │
│ status │ │ updated_at │
│ wechat_status │ └─────────────────┘
│ is_healthy │
│ health_message │
│ created_at │
│ updated_at │
└─────────────────┘
┌─────────────────┐ ┌─────────────────┐
│ logs │ │ plugin_configs │
├─────────────────┤ ├─────────────────┤
│ id (PK) │ │ id (PK) │
│ timestamp │ │ plugin_name │
│ level │ │ config_json │
│ source │ │ enabled │
│ message │ │ created_at │
└─────────────────┘ │ updated_at │
└─────────────────┘
表结构详解
1. nodes - 节点配置表
存储所有微信节点的信息。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
node_id |
VARCHAR(50) | PK | 节点唯一标识 |
name |
VARCHAR(100) | NOT NULL | 节点显示名称 |
api_url |
VARCHAR(255) | NOT NULL | 节点 API 地址 |
api_key |
VARCHAR(255) | NOT NULL | 节点 API 密钥 |
enabled |
BOOLEAN | DEFAULT true | 是否启用 |
description |
TEXT | DEFAULT '' | 节点描述 |
group |
VARCHAR(50) | DEFAULT 'default' | 节点分组 |
status |
VARCHAR(20) | DEFAULT 'inactive' | API 状态 |
wechat_status |
VARCHAR(20) | DEFAULT 'online' | 微信状态 |
is_healthy |
BOOLEAN | DEFAULT false | 健康检查状态 |
health_message |
VARCHAR(255) | DEFAULT '' | 健康检查消息 |
created_at |
TIMESTAMP | DEFAULT now | 创建时间 |
updated_at |
TIMESTAMP | DEFAULT now | 更新时间 |
状态值说明:
| status 值 | 说明 |
|---|---|
active |
API 正常响应 |
inactive |
API 未响应 |
error |
API 返回错误 |
| wechat_status 值 | 说明 |
|---|---|
online |
微信已登录 |
offline |
微信未登录 |
SQL:
CREATE TABLE nodes (
node_id VARCHAR(50) PRIMARY KEY,
name VARCHAR(100) NOT NULL,
api_url VARCHAR(255) NOT NULL,
api_key VARCHAR(255) NOT NULL,
enabled BOOLEAN DEFAULT true,
description TEXT DEFAULT '',
group VARCHAR(50) DEFAULT 'default',
status VARCHAR(20) DEFAULT 'inactive',
wechat_status VARCHAR(20) DEFAULT 'online',
is_healthy BOOLEAN DEFAULT false,
health_message VARCHAR(255) DEFAULT '',
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
2. webhook_urls - Webhook URL 表
存储告警 webhook 配置。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
INTEGER | PK, AUTO | 主键 |
name |
VARCHAR(100) | NOT NULL | Webhook 名称 |
url |
VARCHAR(500) | NOT NULL | Webhook URL |
format |
VARCHAR(20) | DEFAULT 'bark' | 消息格式 |
enabled |
BOOLEAN | DEFAULT true | 是否启用 |
event_types |
TEXT | DEFAULT '' | 触发事件类型(逗号分隔) |
created_at |
TIMESTAMP | DEFAULT now | 创建时间 |
updated_at |
TIMESTAMP | DEFAULT now | 更新时间 |
format 支持的格式:
bark- Bark 推送格式wecom- 企业微信dingtalk- 钉钉feishu- 飞书telegram- Telegramserverchan- Server酱
event_types 支持的类型:
node_offline- 节点离线node_error- 节点错误wechat_offline- 微信离线all- 所有事件
3. logs - 日志表
存储系统运行日志。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
INTEGER | PK, AUTO | 主键 |
timestamp |
TIMESTAMP | DEFAULT now | 日志时间 |
level |
VARCHAR(20) | NOT NULL | 日志级别 |
source |
VARCHAR(50) | NOT NULL | 日志来源 |
message |
TEXT | NOT NULL | 日志消息 |
level 值:
INFO- 信息WARNING- 警告ERROR- 错误SUCCESS- 成功DEBUG- 调试
4. plugin_configs - 插件配置表
存储插件的配置和启用状态。
| 字段 | 类型 | 约束 | 说明 |
|---|---|---|---|
id |
INTEGER | PK, AUTO | 主键 |
plugin_name |
VARCHAR(100) | UNIQUE, NOT NULL | 插件名称 |
config_json |
TEXT | DEFAULT '{}' | 插件配置(JSON格式) |
enabled |
BOOLEAN | DEFAULT false | 是否启用 |
created_at |
TIMESTAMP | DEFAULT now | 创建时间 |
updated_at |
TIMESTAMP | DEFAULT now | 更新时间 |
config_json 示例:
{
"node_id": "wx1",
"receiver": "文件传输助手",
"cron": "0 8 * * *",
"http_url": "https://api.example.com/news",
"message_template": "📰 {title}\n{url}"
}
数据库操作
DatabaseService 主要方法
节点操作
# 获取所有节点
db_service.get_all_nodes() -> List[Node]
# 获取指定节点
db_service.get_node(node_id: str) -> Optional[Node]
# 添加节点
db_service.add_node(node_id, name, api_url, api_key, description, group)
# 更新节点
db_service.update_node(node_id, **kwargs) -> bool
# 删除节点
db_service.delete_node(node_id) -> bool
# 获取启用的节点
db_service.get_enabled_nodes() -> List[Node]
Webhook 操作
# 获取所有 Webhook
db_service.get_all_webhooks() -> List[WebhookUrl]
# 获取启用的 Webhook
db_service.get_enabled_webhooks() -> List[WebhookUrl]
# 添加 Webhook
db_service.add_webhook(name, url, format, event_types) -> bool
# 更新 Webhook
db_service.update_webhook(webhook_id, **kwargs) -> bool
# 删除 Webhook
db_service.delete_webhook(webhook_id) -> bool
插件配置操作
# 获取插件配置
db_service.get_plugin_config(plugin_name: str) -> Optional[PluginConfig]
# 获取所有插件配置
db_service.get_all_plugin_configs() -> List[PluginConfig]
# 保存插件配置
db_service.save_plugin_config(plugin_name, config, enabled) -> bool
# 更新插件启用状态
db_service.update_plugin_enabled(plugin_name, enabled) -> bool
索引
-- nodes 表索引
CREATE INDEX idx_nodes_enabled ON nodes(enabled);
CREATE INDEX idx_nodes_group ON nodes(group);
CREATE INDEX idx_nodes_status ON nodes(status);
-- webhook_urls 表索引
CREATE INDEX idx_webhook_enabled ON webhook_urls(enabled);
-- logs 表索引
CREATE INDEX idx_logs_timestamp ON logs(timestamp);
CREATE INDEX idx_logs_level ON logs(level);
迁移注意
如果数据库已存在,新增 plugin_configs 表:
CREATE TABLE IF NOT EXISTS plugin_configs (
id SERIAL PRIMARY KEY,
plugin_name VARCHAR(100) UNIQUE NOT NULL,
config_json TEXT DEFAULT '{}',
enabled BOOLEAN DEFAULT false,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);