data_provider: 新增链上指标模块 (btc_netflow/stablecoin_supply/etf_flow/mvrv_zscore)
- onchain_metrics.py: 独立模块,CoinMetrics/CoinGecko/Farside 免费数据源 - main.py: 集成后台线程 + REST API (/api/onchain/metrics, /latest, /available) - requirements.txt: 添加 requests 依赖 - 5分钟自动刷新,CSV 落盘到 data/onchain/
This commit is contained in:
@@ -24,6 +24,12 @@ from fastapi.responses import HTMLResponse
|
||||
import uvicorn
|
||||
from technical.util import resample_to_interval
|
||||
|
||||
from onchain_metrics import (
|
||||
OnchainMetricsManager,
|
||||
api_keys_from_env,
|
||||
create_onchain_router,
|
||||
)
|
||||
|
||||
# docker compose logs --tail=200
|
||||
# docker compose down && docker compose build --no-cache && docker compose up -d
|
||||
|
||||
@@ -1132,6 +1138,13 @@ def create_app(provider: DataProvider) -> FastAPI:
|
||||
"""构造 FastAPI 应用:lifespan 内同步 initialize 并启动后台拉数;WebSocket 实时推送。"""
|
||||
ws_manager = WebSocketManager()
|
||||
|
||||
# 初始化链上指标模块
|
||||
onchain_manager = OnchainMetricsManager(
|
||||
data_dir=provider.data_dir,
|
||||
api_keys=api_keys_from_env(),
|
||||
)
|
||||
onchain_router = create_onchain_router(onchain_manager)
|
||||
|
||||
def _on_data_update(symbol: str, base_tf: str) -> None:
|
||||
"""后台刷新线程回调:广播基础及衍生周期更新给 WebSocket 订阅者。"""
|
||||
with provider._lock:
|
||||
@@ -1165,9 +1178,12 @@ def create_app(provider: DataProvider) -> FastAPI:
|
||||
provider.start_background_workers()
|
||||
# 启动 WebSocket 实时监听(asyncio 后台任务)
|
||||
provider.start_watch_tasks()
|
||||
# 启动链上指标后台刷新
|
||||
onchain_manager.start()
|
||||
try:
|
||||
yield
|
||||
finally:
|
||||
onchain_manager.stop()
|
||||
provider.stop()
|
||||
|
||||
app = FastAPI(title="Chan 数据提供商", version="1.0.0", lifespan=lifespan)
|
||||
@@ -1180,6 +1196,9 @@ def create_app(provider: DataProvider) -> FastAPI:
|
||||
allow_headers=["*"],
|
||||
)
|
||||
|
||||
# 注册链上指标 API
|
||||
app.include_router(onchain_router)
|
||||
|
||||
@app.get("/health")
|
||||
async def health() -> Dict[str, object]:
|
||||
"""存活检查:交易所、交易对、基础/衍生周期、是否已完成冷启动。"""
|
||||
|
||||
Reference in New Issue
Block a user