fivetran-jasonchletsos/LayoffOutage-ODI-Demo
GitHub: fivetran-jasonchletsos/LayoffOutage-ODI-Demo
一个将科技公司裁员事件与公开状态页事故历史进行交叉引用的数据可视化项目,用于探索裁员与宕机之间的相关性。
Stars: 0 | Forks: 0
# LayoffOutage-ODI-Demo
这是一个关于企业裁员事件与公开状态页事故历史之间可复现的交叉引用项目。针对受追踪科技公司发生的每一次裁员,该 pipeline 会统计裁员前后各 90 天窗口期内的事故数量,随后将结果渲染为散点图、可排序表格以及针对各公司的时间线叠加图。
## 背景
本项目是为了回应 Connor Dickson(分析工程师)在 LinkedIn 上发布的一条提示而构建的:
Jason Chletsos(Fivetran 销售工程)回复道:“我来试着做一下。”这就是最终的构建成果。
## 数据来源
- **layoffs.fyi** — 由 Roger Lee 维护的、社区众包的企业裁员事件数据集。
- **公开状态页事故历史** — 来自约 40 家知名科技公司、兼容 Atlassian Statuspage 的 `/history.atom` 订阅源。受追踪的订阅源包括 Atlassian、Slack、Stripe、Shopify、Twilio、Cloudflare、Heroku、Notion、Discord、DigitalOcean、Datadog、Snowflake 及其他约 30 家公司。每个订阅源均由公司自行发布;`meta.json` 输出文件中记录了每家公司所使用的确切 URL。
## 仓库结构
```
LayoffOutage-ODI-Demo/
├── etl/
│ └── build.py # one-shot Python ETL: fetches sources, writes JSON
├── app/ # Vite + React + TypeScript viewer
│ ├── src/
│ │ ├── App.tsx
│ │ ├── pages/
│ │ │ ├── HomePage.tsx
│ │ │ ├── CompanyPage.tsx
│ │ │ ├── MethodologyPage.tsx
│ │ │ ├── ArchitecturePage.tsx
│ │ │ └── SourcesPage.tsx
│ │ └── types.ts
│ └── public/data/ # generated JSON files (committed)
├── docs/ # reserved for future
└── README.md
```
## ETL 输出
`etl/build.py` 会将五个 JSON 文件写入 `app/public/data/` 目录:
- `layoffs.json` — 受追踪公司的每一次裁员事件
- `incidents.json` — 按公司划分的事故日期列表
- `companies.json` — 按公司汇总的数据,包含月度事故计数和裁员事件
- `correlations.json` — 按事件划分的“前/后”计数及差值(delta)
- `meta.json` — 来源、源 URL 及注意事项
这些 JSON 文件会被提交到仓库,以便静态查看器无需重新运行 ETL 即可正常工作。
## 运行方式
```
git clone https://github.com/fivetran-jasonchletsos/LayoffOutage-ODI-Demo
cd LayoffOutage-ODI-Demo
# 刷新 dataset
python3 etl/build.py
# 运行 viewer
cd app && npm install && npm run dev
```
## 架构
这是 Fivetran ODI(开放数据基础设施)作品集中的 38 个 demo 之一。作品集中的每个 demo 都遵循相同的 medallion 架构:
依次为数据源,接着是 Fivetran connectors,然后是 Bronze 层(S3 上的 Iceberg),再到 dbt,接着是 Silver/Gold 层,最后是 Snowflake / Athena / DuckDB。
此处发布的版本采用了一种静态导出的快捷方式:ETL 在本地写入 JSON,由前端读取。线上网站的架构页面展示了生产版本的样子——在该版本中,Fivetran connectors 将数据写入 Iceberg,dbt 模型生成供查看器消费的 gold 表。
作品集中的关联仓库:
- Hub 目录:`Fivetran-Demo-Repository`
- 概念与简介:`00-Intro-ODI-Demo`
- 可观测性:`ODI-Mission-Control`
## 方法论与注意事项
在根据图表得出结论之前,请务必阅读以下内容。
- **这只是相关性,而非因果关系。** 裁员前后的事故计数仅为描述性数据。任意方向上的数量变化都不意味着裁员导致了(或避免了)宕机。
- **状态页的事故严重程度未作标准化处理。** Stripe 的一次“轻微”事故与 Discord 的一次“严重”事故在计数上同等对待。事故计数只是衡量可靠性的一个粗略代理指标。
- **Atom feeds 的上限约为最近 25 起事故。** 对于事故频发的公司而言,这大致相当于六个月的历史数据。许多 2022 年和 2023 年的裁员事件不在此数据窗口内,因此其“之前”的数据桶是不完整的或为空。
- **layoffs.fyi 是社区众包数据**,存在倾向于获得新闻报道的裁员事件的选择性偏差。规模较小或未被报道的事件会缺失。
- **受追踪公司的覆盖范围有限**,仅包含发布兼容 Atlassian Statuspage 的 Atom feed 的公司。使用其他状态页平台或没有公开状态页的公司未被包含在内。
线上网站的方法论页面提供了完整的讨论。
## 许可证
本仓库中的代码采用 MIT 许可证。layoffs.fyi 的数据保留其自身的(社区众包,欢迎注明出处)条款——详见 。状态页的事故日期属于公开信息,派生自各公司自行发布的 feed;源公司的归属信息已记录在 `meta.json` 中。
## 鸣谢
- **数据:** Roger Lee (layoffs.fyi),以及由 Atlassian、Slack、Stripe、Shopify、Twilio、Cloudflare、Heroku、Notion、Discord、DigitalOcean、Datadog、Snowflake 及其他 30 多家公司发布的公开状态页订阅源,正是这些公司的公开历史 feed 让本数据集成为可能。
- **提示:** LinkedIn 上的 Connor Dickson(即最初那条“我希望有人能做一个……”的帖子)。
- **构建:** Fivetran 销售工程团队的 Jason Chletsos。使用 Claude Code 构建。
标签:ETL, Homebrew安装, JavaCC, Python, React, Syscalls, 代码示例, 数据分析, 无后门, 时间序列, 漏洞探索, 自动化攻击, 运营状态监控, 逆向工具