Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
4d56d49
feat(weather): 注册 china_weather_openquake 数据源
DBJD-CR Jul 30, 2026
e9600e2
feat(weather): get_openquake_source_id 支持 cma source 解析
DBJD-CR Jul 30, 2026
ffc7e07
feat(weather): 新增 CMA 气象预警别名映射与展示名
DBJD-CR Jul 30, 2026
6358647
feat(weather): 气象预警解析器支持 OpenQuakeAPI RealtimeEvent 解包
DBJD-CR Jul 30, 2026
73ec22b
feat(weather): 解析器注册表按 source_id 注入气象预警解析器实例
DBJD-CR Jul 30, 2026
eff0633
feat(weather): 原始消息过滤器放行 OpenQuakeAPI weather 业务类型
DBJD-CR Jul 30, 2026
7f2509e
docs: OpenQuakeAPI 文档补充 CMA 气象预警事件结构与字段说明
DBJD-CR Jul 30, 2026
c062d90
feat: 初始提交 - [New] 新增气象预警聚合推送服务
DBJD-CR Jul 30, 2026
5fb0b61
chore: 导出气象预警聚合服务
DBJD-CR Jul 30, 2026
a56ca5b
feat(weather): 事件流水线集成气象预警聚合推送
DBJD-CR Jul 30, 2026
a4e0422
feat(config): 新增气象预警聚合推送与事件流日志级别配置项
DBJD-CR Jul 30, 2026
7855540
feat(config): 配置校验服务新增气象预警聚合参数校验与 CMA 子源回填
DBJD-CR Jul 30, 2026
4d6a5de
feat(log): 插件日志代理新增事件流细粒度日志级别控制
DBJD-CR Jul 30, 2026
e5e3d53
feat(log): 地震类解析器日志补充 event_stream 标签
DBJD-CR Jul 30, 2026
84cd5a2
feat(log): 海啸/台风/Global Quake 解析器日志补充 event_stream 标签
DBJD-CR Jul 30, 2026
daae8d5
feat(log): 路由/去重/融合/推送/轮询服务日志补充 event_stream 标签
DBJD-CR Jul 30, 2026
0e3c744
feat(weather): 初始提交 - [New] 新增气象预警编码映射表模块
DBJD-CR Jul 30, 2026
2578fda
refactor(weather): 气象预警图标解析统一走编码映射,伪图片降级为 DEBUG
DBJD-CR Jul 30, 2026
d9c2b7a
fix(weather): 修复升级/降级类预警颜色识别错误与机构名提取遗漏
DBJD-CR Jul 30, 2026
a992ecb
fix(silence): 修复启动静默期轮询超时误放行与台风去重缓存未播种
DBJD-CR Jul 30, 2026
b3e8a7f
fix(rules): 修复 PLUM/假定震源占位震级(M1.0)导致震度规则误杀
DBJD-CR Jul 30, 2026
63d3b0f
perf(http): 放宽 EQSC HTTP 客户端超时参数,减少网络抖动导致的超时
DBJD-CR Jul 30, 2026
272fe59
refactor(admin): 重构连接状态展示,区分未启用/异常/正常三种状态
DBJD-CR Jul 30, 2026
4f396f2
feat(query): 气象预警查询结果较多时走合并转发分批发送,避免单条消息过长
DBJD-CR Jul 30, 2026
f4aeea7
feat(admin): 管理面板前端适配 OpenQuakeAPI 气象预警数据源
DBJD-CR Jul 30, 2026
4487592
chore: 调整单批最大聚合条数上限
DBJD-CR Jul 30, 2026
dad2b91
fix: 修复 JMA 地域汇总模式下 detailed_jma_intensity 开关失效问题
DBJD-CR Jul 30, 2026
2082b70
refactor(weather): 重构聚合推送,移除限流降级改为整批回调
DBJD-CR Aug 1, 2026
591cb96
refactor(weather): 聚合推送回调改为并发复核与按上限切分节点
DBJD-CR Aug 1, 2026
819482a
feat(log): 推送链路透传聚合会话计数到会话筛选结果日志
DBJD-CR Aug 1, 2026
687ee06
fix(lifecycle): 修复停机时聚合缓冲区推送在连接销毁后必然失败
DBJD-CR Aug 1, 2026
1889cef
fix(earthquake): 修复 FSSN CMT 缺少 eventId 时丢弃完整反演数据
DBJD-CR Aug 1, 2026
52bc737
style(config): 气象预警聚合单批最大条数从 20 调整为 25
DBJD-CR Aug 1, 2026
d5b84ff
style: JMA 地震情报展示器代码格式调整
DBJD-CR Aug 1, 2026
fc8bd4b
fix(pipeline): 修复气象聚合分支统计误记上次推送会话
DBJD-CR Aug 1, 2026
05f9a31
fix(eqsc): 将静默抓取完成通知推迟到指纹播种完成之后
DBJD-CR Aug 1, 2026
aa76f49
fix(dedup): 修复 debug 日志向底层 logger 透传事件流关键字
DBJD-CR Aug 1, 2026
7eda150
fix(query): 气象预警查询图标 URL 复用统一编码映射
DBJD-CR Aug 1, 2026
916e84e
refactor(weather): 收敛 p 编码颜色解析为统一辅助函数
DBJD-CR Aug 1, 2026
3bc41d3
fix(logging): 字符串形态消息同样执行 OpenQuakeAPI 业务类型过滤
DBJD-CR Aug 1, 2026
b96d967
fix(parser): 区分非 RealtimeEvent 与被丢弃的 RealtimeEvent
DBJD-CR Aug 1, 2026
69da778
fix(aggregation): 修正聚合推送文档、任务持有与失败重试
DBJD-CR Aug 1, 2026
9dd8a05
fix(config): 聚合单批上限校验与配置 schema 对齐到 25
DBJD-CR Aug 1, 2026
90ae2dd
fix(log): 按数据源解析事件流标签,避免日志误标 earthquake
DBJD-CR Aug 1, 2026
c38786a
style(log): 修正聚合缓冲分支日志的悬空逗号语句
DBJD-CR Aug 1, 2026
cc6fc1e
fix(parser): 缺失 eventId 的独立 CMT 解不再标记为已关联事件
DBJD-CR Aug 1, 2026
f236672
fix(query): 全国分支发送失败后提前返回避免重复发送
DBJD-CR Aug 1, 2026
8024e33
fix(parser): 天气源心跳判定放宽为展示字段全部为空
DBJD-CR Aug 1, 2026
e73d2e0
fix(aggregation): 后台刷新任务完成回调记录异常
DBJD-CR Aug 1, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
148 changes: 136 additions & 12 deletions _conf_schema.json
Original file line number Diff line number Diff line change
Expand Up @@ -61,31 +61,31 @@
"description": "中国地震网地震预警",
"type": "bool",
"default": false,
"hint": "通过 FAN Studio WebSocket 接收中国地震网地震预警信息"
"hint": "通过 FAN Studio WebSocket 接收中国地震网地震预警信息"
},
"china_earthquake_warning_provincial": {
"description": "中国地震网地震预警(省级)",
"type": "bool",
"default": true,
"hint": "通过 FAN Studio WebSocket 接收中国地震网省级地震预警信息"
"hint": "通过 FAN Studio WebSocket 接收中国地震网省级地震预警信息"
},
"taiwan_cwa_earthquake": {
"description": "台湾中央气象署:强震即时警报",
"type": "bool",
"default": true,
"hint": "通过 FAN Studio WebSocket 接收台湾中央气象署强震即时警报(EEW)"
"hint": "通过 FAN Studio WebSocket 接收台湾中央气象署强震即时警报"
},
"taiwan_cwa_report": {
"description": "台湾中央气象署:地震报告",
"type": "bool",
"default": true,
"hint": "通过 FAN Studio WebSocket 接收台湾中央气象署地震报告"
"hint": "通过 FAN Studio WebSocket 接收台湾中央气象署地震报告"
},
"china_cenc_earthquake": {
"description": "中国地震台网(CENC):地震测定",
"type": "bool",
"default": true,
"hint": "通过 FAN Studio WebSocket 接收中国地震台网地震测定信息"
"hint": "通过 FAN Studio WebSocket 接收中国地震台网地震测定信息"
},
"china_cenc_intensity_report": {
"description": "中国地震台网(CENC):烈度速报",
Expand All @@ -97,19 +97,19 @@
"description": "日本气象厅(JMA):紧急地震速报",
"type": "bool",
"default": false,
"hint": "通过 FAN Studio WebSocket 接收日本气象厅地震预警信息"
"hint": "通过 FAN Studio WebSocket 接收日本气象厅地震预警信息"
},
"usgs_earthquake": {
"description": "美国地质调查局(USGS):地震测定",
"type": "bool",
"default": true,
"hint": "通过 FAN Studio WebSocket 接收USGS地震测定信息"
"hint": "通过 FAN Studio WebSocket 接收USGS地震测定信息"
},
"usa_shakealert": {
"description": "美国 ShakeAlert:地震预警",
"type": "bool",
"default": false,
"hint": "通过 FAN Studio WebSocket 接收美国 ShakeAlert 地震预警信息"
"hint": "通过 FAN Studio WebSocket 接收美国 ShakeAlert 地震预警信息"
},
"fssn_cmt": {
"description": "FSSN:矩心矩张量解 (CMT)",
Expand All @@ -120,14 +120,14 @@
"china_weather_alarm": {
"description": "中国气象局:气象预警",
"type": "bool",
"default": true,
"hint": "通过 FAN Studio WebSocket 接收中国气象局气象预警信息"
"default": false,
"hint": "通过 FAN Studio WebSocket 接收中国气象局气象预警信息"
},
"china_tsunami": {
"description": "自然资源部海啸预警中心:海啸预警信息",
"type": "bool",
"default": true,
"hint": "通过 FAN Studio WebSocket 接收自然资源部海啸预警中心海啸预警信息"
"hint": "通过 FAN Studio WebSocket 接收自然资源部海啸预警中心海啸预警信息"
},
"china_typhoon": {
"description": "中国气象局:实时活跃台风",
Expand Down Expand Up @@ -225,6 +225,12 @@
"type": "bool",
"default": true,
"hint": "通过 OpenQuakeAPI 获取 Global Quake 全球地震实时数据(由全球测站实时测算,精度有限)。"
},
"china_weather_alarm": {
"description": "中国气象局:气象预警",
"type": "bool",
"default": true,
"hint": "通过 OpenQuakeAPI 接收中国气象局气象预警信息。"
}
}
},
Expand Down Expand Up @@ -715,7 +721,7 @@
"push_frequency_control": {
"description": "⏱️ 推送频率控制",
"type": "object",
"hint": "用于控制地震预警类型消息的推送频率",
"hint": "用于控制预警消息的推送频率",
"items": {
"cea_cwa_report_n": {
"description": "CEA/CWA:每收到N报推送一次",
Expand Down Expand Up @@ -760,6 +766,75 @@
"type": "bool",
"hint": "只推送最终报(以及第1报),适用于支持最终报的数据源(如 JMA、Global Quake)",
"default": false
},
"weather_aggregation": {
"description": "气象预警聚合推送",
"type": "object",
"hint": "在时间窗口内积攒气象预警事件后合并推送,避免高频数据源刷屏。支持合并转发的平台(如 QQ)将打包为合并转发消息;不支持的平台将启用限流,仅推送优先级最高的若干条。",
"items": {
"enabled": {
"description": "启用气象预警聚合",
"type": "bool",
"default": true,
"hint": "启用后将在时间窗口内积攒气象预警事件,到期后合并推送。关闭后每条气象预警独立推送。"
},
"time_window_seconds": {
"description": "聚合时间窗口",
"type": "int",
"default": 900,
"hint": "单位:秒。气象预警事件的积攒时间窗口,默认 15 分钟。窗口到期后统一推送积攒的事件。",
"slider": {
"min": 60,
"max": 3600,
"step": 30
}
},
"max_batch_size": {
"description": "单批最大聚合条数",
"type": "int",
"default": 25,
"hint": "单次合并推送最多包含的气象预警条数。超过此数量时分批发送。仅在启用合并转发时生效。",
"slider": {
"min": 1,
"max": 25,
"step": 1
}
},
"flush_on_red": {
"description": "收到红色预警时立即推送",
"type": "bool",
"default": false,
"hint": "收到红色级别气象预警时立即触发推送,不等时间窗口到期。确保高优先级预警及时送达。"
},
"rate_limit_enabled": {
"description": "启用限流(不支持合并转发的平台)",
"type": "bool",
"default": true,
"hint": "对于不支持合并转发的平台,启用限流机制:在限流时间窗口内最多推送指定数量的消息,优先推送高级别预警。"
},
"rate_limit_max_messages": {
"description": "限流最大消息数",
"type": "int",
"default": 3,
"hint": "限流时间窗口内最多推送的消息数量。仅在启用限流时生效。",
"slider": {
"min": 1,
"max": 20,
"step": 1
}
},
"rate_limit_window_seconds": {
"description": "限流时间窗口",
"type": "int",
"default": 900,
"hint": "单位:秒。限流计数的时间窗口,默认 900 秒(15 分钟)。",
"slider": {
"min": 60,
"max": 3600,
"step": 30
}
}
}
}
}
},
Expand Down Expand Up @@ -1360,6 +1435,55 @@
"default": "降级为DEBUG",
"hint": "仅在日志输出选项为“简洁”时生效。降级为DEBUG:事件流日志均以 DEBUG 级别在 AstrBot 控制台输出;完全屏蔽:彻底过滤除 ERROR 外的事件流日志,不论 AstrBot 控制台为什么级别均不输出。"
},
"event_stream_log_level": {
"description": "事件流日志级别覆盖",
"type": "object",
"hint": "按事件流类型独立控制日志级别,优先级高于「日志输出选项」总开关。可用于将高频事件流(如气象预警、Global Quake)的日志降级为 DEBUG 或屏蔽,而不影响其他事件流。设为 INFO 时回退到总开关行为。",
"items": {
"all": {
"description": "全部事件流日志级别",
"type": "string",
"options": ["INFO", "DEBUG", "屏蔽"],
"default": "INFO",
"hint": "全局覆盖开关。设为 DEBUG 或屏蔽时将覆盖所有事件流的独立设置。设为 INFO 时使用各事件流的独立设置或回退到总开关。"
},
"weather_alarm": {
"description": "气象预警事件流日志级别",
"type": "string",
"options": ["INFO", "DEBUG", "屏蔽"],
"default": "DEBUG",
"hint": "气象预警解析、过滤、推送链路的日志级别。由于 OQ 数据源推送频率高,默认降级为 DEBUG。"
},
"global_quake": {
"description": "Global Quake 事件流日志级别",
"type": "string",
"options": ["INFO", "DEBUG", "屏蔽"],
"default": "DEBUG",
"hint": "Global Quake 解析、过滤、推送链路的日志级别。由于推送频率较高,默认降级为 DEBUG。"
},
"earthquake": {
"description": "地震事件流日志级别",
"type": "string",
"options": ["INFO", "DEBUG", "屏蔽"],
"default": "INFO",
"hint": "地震预警、报告等事件流的日志级别。"
},
"tsunami": {
"description": "海啸事件流日志级别",
"type": "string",
"options": ["INFO", "DEBUG", "屏蔽"],
"default": "INFO",
"hint": "海啸预警事件流的日志级别。"
},
"typhoon": {
"description": "台风事件流日志级别",
"type": "string",
"options": ["INFO", "DEBUG", "屏蔽"],
"default": "INFO",
"hint": "台风事件流的日志级别。"
}
}
},
"enable_raw_message_logging": {
"description": "启用原始消息格式记录",
"type": "bool",
Expand Down
3 changes: 3 additions & 0 deletions admin/js/components/status/ConnectionsGrid.jsx
Original file line number Diff line number Diff line change
Expand Up @@ -353,6 +353,7 @@ function ConnectionsGrid() {
sa_fanstudio: '美国 ShakeAlert 地震预警',
fssn_cmt_fanstudio: 'FSSN 矩心矩张量解 (CMT)',
china_weather_fanstudio: '中国气象局: 气象预警',
china_weather_openquake: '中国气象局: 气象预警',
china_tsunami_fanstudio: '自然资源部海啸预警中心',
jma_fanstudio: '日本气象厅: 紧急地震速报',
},
Expand All @@ -379,6 +380,8 @@ function ConnectionsGrid() {
},
OpenQuakeAPI: {
global_quake: 'Global Quake',
china_weather_alarm: '中国气象局: 气象预警',
china_weather_openquake: '中国气象局: 气象预警',
},
'EQSC API': {
china_typhoon: '中国气象局:实时活跃台风',
Expand Down
6 changes: 5 additions & 1 deletion admin/js/utils/formatters.js
Original file line number Diff line number Diff line change
Expand Up @@ -245,6 +245,9 @@ function normalizeSourceName(source) {
'fssn_cmt': 'fssn_cmt_fanstudio',
'fssn-cmt': 'fssn_cmt_fanstudio',
'china_weather_alarm': 'china_weather_fanstudio',
'openquake_cma': 'china_weather_openquake',
'cma_weather': 'china_weather_openquake',
'cma': 'china_weather_openquake',
'china_tsunami': 'china_tsunami_fanstudio',
'japan_jma_eew': 'jma_p2p',
'japan_jma_earthquake': 'jma_p2p_info',
Expand Down Expand Up @@ -363,7 +366,8 @@ function formatSourceName(source) {
'sa_fanstudio': '美国 ShakeAlert 地震预警',
'fssn_cmt_fanstudio': 'FSSN 矩心矩张量解 (CMT)',
'jma_fanstudio': '日本气象厅: 紧急地震速报 - Fan',
'china_weather_fanstudio': '中国气象局: 气象预警',
'china_weather_fanstudio': '中国气象局: 气象预警 - Fan',
'china_weather_openquake': '中国气象局: 气象预警 - OQ',
'china_tsunami_fanstudio': '自然资源部海啸预警中心',
// 贡献榜中性名:实时通道(fan + enriched)不强制带 - Fan
'typhoon_fanstudio': '中国气象局:实时活跃台风',
Expand Down
9 changes: 9 additions & 0 deletions core/app/disaster_service.py
Original file line number Diff line number Diff line change
Expand Up @@ -201,6 +201,15 @@ def _setup_runtime_services(self) -> None:
"""装配灾害服务运行时子服务。"""
# 以下服务分别承接事件流水线、生命周期、运行时调度、缓存、状态整理、通知、重连与接入旁路编排,主服务本身只保留高层协调职责。
self.event_pipeline = EventPipeline(self) # 事件流处理流水线
# 气象预警聚合推送服务,注入到事件流水线
from ..message.push.weather_aggregation_service import (
WeatherAggregationService,
)

self._weather_aggregation_service = WeatherAggregationService(self.config)
self.event_pipeline.set_weather_aggregation_service(
self._weather_aggregation_service
)
self.lifecycle_service = DisasterServiceLifecycleService(
self
) # 服务启停生命周期服务
Expand Down
Loading