AasthaShayla/aegis
GitHub: AasthaShayla/aegis
将航班、卫星、地震、新闻、网络威胁等多源公开数据融合在一张实时地图上的开源全球情报仪表盘。
Stars: 0 | Forks: 0
# AEGIS — 实时全球情报仪表盘
一个实时的“世界监视器”,将**免费、合法、公开的开放数据**融合在一个深色
指挥中心地图上:飞机、船舶、卫星、地震、自然事件、
天气、公共摄像头、全球新闻、市场、网络威胁 —— 外加**跨流警报**
和可选的**本地 AI 态势简报**。仅需一个浏览器标签页。
**无需任何 API 密钥即可运行。** `npm install && npm run dev`。
## 功能
- 🗺️ 深色指挥中心地图(MapLibre GL + deck.gl,交错渲染),内置 **3 种底图**(深色 / 极简 / 浅色)
- ✈️ **实时航班** —— 航向旋转的飞机,采用**航位推测法**实现流畅运动,视口分块覆盖,双数据源**竞速**以实现低延迟;支持“仅显示军用(全球)”过滤器
- 🛰️ **卫星** —— 在浏览器内以 1 Hz 频率传播 SGP4 轨道;点击可查看地面轨迹
- 🌋 **地震**(USGS),配备震级滑块和时间窗口
- 🔥 **自然事件**(NASA EONET)
- ⛅ **天气** —— 点击探测点预报 **+ RainViewer 雷达叠加层**
- 📰 **全球事件** —— GDELT 配备 **新闻 RSS 后备**,确保信息流永不枯竭
- 📷 **公共摄像头** —— 伦敦交通局交通摄像头(免密钥)+ 全球 Windy 网络摄像头(可选密钥)
- 💹 **市场** —— 加密货币行情 + 恐慌与贪婪指数
- 🛡️ **网络威胁** —— ThreatFox IOCs,**IP 已地理定位至地图上**
- 🚨 **跨流警报** —— 一个关联引擎(重大地震、海啸标志、网络威胁聚集、灾害集群、新闻⇄地震趋同)
- 🧠 **AI 态势简报** —— 通过**本地 Ollama** 总结实时画面(私密、免费;未安装时自动优雅关闭)
- 🔎 **搜索**(航班/卫星/地点)、**时间进度条**、**实体跟随镜头**、**可分享的 URL 状态**、各图层实时计数、图例、过期/健康状态指示器
- 🔌 **可选功能**(免费密钥):AIS 船舶、高分辨率火灾、互联网中断、空气质量
## 快速开始
```
npm install
npm run dev # http://localhost:3000
npm test # unit tests (vitest)
npx playwright test # e2e smoke (after: npx playwright install chromium)
```
无需配置 —— 每个核心图层均可在免密钥下运行。将 `.env.example`
复制为 `.env.local` 以启用可选图层(AIS 船舶、FIRMS 火灾、Windy 网络摄像头、
Cloudflare 中断、OpenAQ)或通过 Ollama 启用本地 AI 简报。
## 可靠性与架构
```
Browser (client) Next.js server (route handlers)
MapLibre + deck.gl fetch in-memory TTL cache (+ disk snapshot)
├─ SWR polling / layer ├─ circuit breaker + Retry-After backoff
├─ satellite.js @1Hz ├─ single-flight, stale-on-error
├─ flight dead-reckoning ├─ /api/ → normalize to one schema
├─ correlation → alerts └─ /api/health → per-source status
└─ click → popover / follow │ free public upstreams
```
- 每个路由都会**代理 + 规范化 + 缓存**上游数据。缓存实现了
**单次请求合并**、**错误时返回过期数据**,并**持久化到磁盘**,使得重启后
能瞬间获取数据。
- **熔断器**(位于 `lib/http.ts`)在上游持续失败时
(例如 GDELT 429 错误)开启,遵循 `Retry-After` 规则,并允许缓存提供过期数据 ——
因此单一恶劣的数据源永远不会破坏整个仪表盘。
- 航班会**竞速**请求 adsb.lol 和 airplanes.live,并采纳最先响应的结果。
- `/api/health` 报告各图层的可用性、各数据源的新鲜度以及
熔断器状态。
### 技术栈
Next.js 15 (App Router, TS) · React 19 · MapLibre GL 5 · deck.gl 9 ·
react-map-gl 8 · satellite.js · SWR · Zustand · Vitest · Playwright。
## 已知限制
- **航班**:没有免费的全球整体数据端点 —— 覆盖范围采用视口分块(放大至
特定区域时密集;在大陆级别的缩放比例下较为稀疏)。
- **GDELT** 速率限制极为严格;RSS 后备 + 熔断器可确保事件
图层无论如何都能保持数据充实。
- **网络威胁**的 IP 地理定位使用 ip-api 的免费(非商业)批量端点。
- 卫星轨道传播在主线程上运行(上限 3,000 颗);下一步计划通过 Web Worker
处理完整的约 7k 颗 Starlink 星座。
- 内存/磁盘缓存是单进程的;在多实例生产环境中,可将 `lib/cache.ts` 替换为
Redis。
## 部署
- **Docker**: `docker build -t aegis . && docker run -p 3000:3000 aegis`
- **Vercel**: 导入该代码库(配置见 `vercel.json`)。
## 法律声明
仅基于免费/公开的开放数据构建 —— 详见 [ATTRIBUTION.md](ATTRIBUTION.md)。
由于部分数据源是非商业性的,**AEGIS 仅供非商业、教育和研究用途。** 它仅使用
刻意公开的摄像头和公开广播的信号 —— 绝不涉及私人或不安全的视频流。
标签:AI风险缓解, 特征检测, 自动化攻击, 请求拦截