Files
junhong_cmp_fiber/migrations/000048_create_tb_polling_alert_rule.up.sql
huang 931e140e8e
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 6m35s
feat: 实现 IoT 卡轮询系统(支持千万级卡规模)
实现功能:
- 实名状态检查轮询(可配置间隔)
- 卡流量检查轮询(支持跨月流量追踪)
- 套餐检查与超额自动停机
- 分布式并发控制(Redis 信号量)
- 手动触发轮询(单卡/批量/条件筛选)
- 数据清理配置与执行
- 告警规则与历史记录
- 实时监控统计(队列/性能/并发)

性能优化:
- Redis 缓存卡信息,减少 DB 查询
- Pipeline 批量写入 Redis
- 异步流量记录写入
- 渐进式初始化(10万卡/批)

压测工具(scripts/benchmark/):
- Mock Gateway 模拟上游服务
- 测试卡生成器
- 配置初始化脚本
- 实时监控脚本

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-05 17:32:44 +08:00

46 lines
2.4 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 告警规则表
CREATE TABLE IF NOT EXISTS tb_polling_alert_rule (
id BIGSERIAL PRIMARY KEY,
rule_name VARCHAR(100) NOT NULL,
task_type VARCHAR(50) NOT NULL,
metric_type VARCHAR(50) NOT NULL,
operator VARCHAR(20) NOT NULL,
threshold DECIMAL(10, 2) NOT NULL,
duration_minutes INT NOT NULL DEFAULT 5,
alert_level VARCHAR(20) NOT NULL DEFAULT 'warning',
notification_channels TEXT,
notification_config TEXT,
status SMALLINT NOT NULL DEFAULT 1,
cooldown_minutes INT NOT NULL DEFAULT 5,
description TEXT,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
created_by BIGINT,
updated_by BIGINT
);
-- 索引
CREATE INDEX idx_polling_alert_rule_status ON tb_polling_alert_rule(status);
CREATE INDEX idx_polling_alert_rule_task_type ON tb_polling_alert_rule(task_type);
-- 表注释
COMMENT ON TABLE tb_polling_alert_rule IS '告警规则表 - 定义轮询系统的告警条件和通知方式';
-- 列注释
COMMENT ON COLUMN tb_polling_alert_rule.rule_name IS '规则名称';
COMMENT ON COLUMN tb_polling_alert_rule.task_type IS '任务类型realname/carddata/package';
COMMENT ON COLUMN tb_polling_alert_rule.metric_type IS '指标类型queue_size/success_rate/avg_duration/concurrency';
COMMENT ON COLUMN tb_polling_alert_rule.operator IS '比较运算符gt/lt/gte/lte/eq';
COMMENT ON COLUMN tb_polling_alert_rule.threshold IS '阈值';
COMMENT ON COLUMN tb_polling_alert_rule.duration_minutes IS '持续时长(分钟),避免短暂波动';
COMMENT ON COLUMN tb_polling_alert_rule.alert_level IS '告警级别info/warning/error/critical';
COMMENT ON COLUMN tb_polling_alert_rule.notification_channels IS '通知渠道JSON数组["email","sms","webhook"]';
COMMENT ON COLUMN tb_polling_alert_rule.notification_config IS '通知配置JSON';
COMMENT ON COLUMN tb_polling_alert_rule.status IS '状态0-禁用1-启用';
COMMENT ON COLUMN tb_polling_alert_rule.cooldown_minutes IS '冷却期(分钟),避免重复告警';
COMMENT ON COLUMN tb_polling_alert_rule.description IS '规则说明';
COMMENT ON COLUMN tb_polling_alert_rule.created_at IS '创建时间';
COMMENT ON COLUMN tb_polling_alert_rule.updated_at IS '更新时间';
COMMENT ON COLUMN tb_polling_alert_rule.created_by IS '创建人ID';
COMMENT ON COLUMN tb_polling_alert_rule.updated_by IS '更新人ID';