feat(HEL-529): 按定稿100%重做三页数据中枢 + 数据修正1-5
视觉:admin/app.js 按已确认打样 hub-kimi.html 逐行重写三页 DOM 与动效
(sparkline/缓存年龄秒增/延迟变化闪烁/EVENT TAPE 预装滚动/分组接口表/
更新频率列/时钟冒号 blink/雷达 blip),CSS 补真实调用脉冲 node-ping。
数据修正:
1) pipeline._stage 批内按暂存表业务键确定性去重(保留最后一条),
修复人气榜/龙虎榜自 09-07 起每日 UNIQUE constraint 落库失败;
2) overview.anomalies 收敛为「最新批次未成功且当日未发布」的当前异常,
历史已恢复批次留在审计明细;
3) source_catalog 接口补真实批次分组 + 观测 join(接口名或数据集名
双向匹配,标注 observed/observed_basis),消除「全部未配置/0/30」误报;
4) lineage 逐数据集按其服务接口过滤健康行(接口级状态),
provisional 已配置无观测显示「已配置 · 待观测」,仅 iFinD 为未配置;
5) lineage 补 update_freq 真实频率字段。
测试:新增 tests/test_hel529_rework.py(8 项),全套 191 项通过
(1 项环境依赖失败在基线 d9358ab 上同样复现,与本改动无关)。
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -38,6 +38,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "calendar",
|
||||
"tier": "official",
|
||||
"update_freq": "每日 08:45 预检",
|
||||
"v1_endpoint": "/v1/calendar",
|
||||
"primary_source": "tushare:trade_cal",
|
||||
"backup_source": None,
|
||||
@@ -46,6 +47,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "stocks",
|
||||
"tier": "official",
|
||||
"update_freq": "每日 20:00 / 23:10",
|
||||
"v1_endpoint": "/v1/stocks",
|
||||
"primary_source": "tushare:stock_basic",
|
||||
"backup_source": None,
|
||||
@@ -54,6 +56,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "daily",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 15:05 · 重试至 23:30",
|
||||
"v1_endpoint": "/v1/bars/daily",
|
||||
"primary_source": "tushare:daily",
|
||||
"backup_source": None,
|
||||
@@ -62,6 +65,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "valuation",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 15:05 · 复核 20:00",
|
||||
"v1_endpoint": "/v1/valuation",
|
||||
"primary_source": "tushare:daily_basic",
|
||||
"backup_source": None,
|
||||
@@ -70,6 +74,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "moneyflow",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 15:05 · 重试至 23:30",
|
||||
"v1_endpoint": "/v1/moneyflow",
|
||||
"primary_source": "tushare:moneyflow",
|
||||
"backup_source": None,
|
||||
@@ -78,6 +83,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "auction",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 15:05",
|
||||
"v1_endpoint": "/v1/auction",
|
||||
"primary_source": "tushare:stk_auction",
|
||||
"backup_source": None,
|
||||
@@ -86,6 +92,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "index_daily",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 15:10 · 重试至 23:30",
|
||||
"v1_endpoint": "/v1/indexes/bars",
|
||||
"primary_source": "tushare:index_daily",
|
||||
"backup_source": None,
|
||||
@@ -94,6 +101,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "limit_events",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 16:40 · 重试至 23:30",
|
||||
"v1_endpoint": "/v1/limit-events",
|
||||
"primary_source": "tushare:limit_list_d",
|
||||
"backup_source": None,
|
||||
@@ -102,6 +110,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "popularity",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 22:40",
|
||||
"v1_endpoint": "/v1/popularity",
|
||||
"primary_source": "tushare:ths_hot+dc_hot",
|
||||
"backup_source": None,
|
||||
@@ -110,6 +119,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "dragon_tiger",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 16:45 · 重试至 23:30",
|
||||
"v1_endpoint": "/v1/dragon-tiger",
|
||||
"primary_source": "tushare:hm_detail",
|
||||
"backup_source": None,
|
||||
@@ -118,6 +128,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "sector_daily",
|
||||
"tier": "official",
|
||||
"update_freq": "盘后 15:20 · 重试至 23:30",
|
||||
"v1_endpoint": "/v1/sectors",
|
||||
"primary_source": "tushare:ths_daily+dc_index+sw_daily",
|
||||
"backup_source": None,
|
||||
@@ -126,6 +137,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "quotes_latest",
|
||||
"tier": "provisional",
|
||||
"update_freq": "盘中 · 缓存 60s",
|
||||
"v1_endpoint": "/v1/quotes/latest",
|
||||
"primary_source": "eastmoney:ulist/clist",
|
||||
"backup_source": "tencent:qt",
|
||||
@@ -134,6 +146,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "index_quotes",
|
||||
"tier": "provisional",
|
||||
"update_freq": "盘中 · 缓存 60s",
|
||||
"v1_endpoint": "/v1/indexes/quotes",
|
||||
"primary_source": "eastmoney:ulist",
|
||||
"backup_source": "tencent:qt",
|
||||
@@ -142,6 +155,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "sectors_quote",
|
||||
"tier": "provisional",
|
||||
"update_freq": "盘中 · 缓存 60s",
|
||||
"v1_endpoint": "/v1/sectors/quote",
|
||||
"primary_source": "eastmoney:sw",
|
||||
"backup_source": None,
|
||||
@@ -150,6 +164,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "limit_pool",
|
||||
"tier": "provisional",
|
||||
"update_freq": "盘中 · 缓存 60s",
|
||||
"v1_endpoint": "/v1/limit-pool",
|
||||
"primary_source": "eastmoney:zt_pool",
|
||||
"backup_source": None,
|
||||
@@ -158,6 +173,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "intraday_points",
|
||||
"tier": "provisional",
|
||||
"update_freq": "盘中 · 缓存 20s",
|
||||
"v1_endpoint": "/v1/intraday/points",
|
||||
"primary_source": "eastmoney:trends2",
|
||||
"backup_source": None,
|
||||
@@ -166,6 +182,7 @@ DATASETS: list[dict[str, Any]] = [
|
||||
{
|
||||
"dataset": "ifind_wencai",
|
||||
"tier": "licensed",
|
||||
"update_freq": "按需调用",
|
||||
"v1_endpoint": "/v1/query (api_name=ifind_wencai)",
|
||||
"primary_source": "ifind:smart_stock_picking",
|
||||
"backup_source": None,
|
||||
|
||||
Reference in New Issue
Block a user