Uptime monitoring for PT sites, driven by GitHub Actions and Astro.
| Workflow | Schedule | Action |
|---|---|---|
monitor.yml |
Every 30 min | HTTP probes all sites, writes results to data/uptime/ |
build.yml |
Every 2 hours | Builds Astro static site, deploys to GitHub Pages |
update-source.yml |
Every day | Fetches site definitions from PT-depiler, runs data cleanup |
Site definitions are pulled from pt-plugins/PT-depiler (src/packages/site/definitions/**/*.ts). The siteMetadata variable in each file provides:
id— unique site identifiername— display nameurls— array of URLs to probe (ROT13-encoded URLs withuggcf:///uggc://prefix are auto-decoded)type— site categorydescriptions— optional descriptionisDead— optional flag to skip monitoring (default:false)
- Skip sites with
isDead: true - For each site, test each URL with a 15s timeout; stop early if any URL succeeds
- If a URL fails, retry up to 3 times (2s delay between attempts)
- Site is UP if any URL responds; DOWN only if all URLs fail
- Concurrency limited to 5 sites at a time via
p-queue - Results saved to
data/uptime/YYYY/MM/DD/HH_MM.json
- Daily: merges all per-run files in
data/uptime/YYYY/MM/DD/intodata/uptime/YYYY/MM/DD.json(JSONLines), removes raw files - Monthly: merges daily files into
data/uptime/YYYY/MM.json - Skips today's data and current month's data (monitoring in progress)
- Generates
data/uptime.jsonindex of all merged files
- Node.js 20+
- pnpm 10+
- Git
pnpm install
# Fetch site definitions
pnpm update-source
# Run a monitoring check
pnpm monitor
# Start Astro dev server
pnpm dev| Command | Description |
|---|---|
pnpm dev |
Start Astro dev server |
pnpm build |
Build static site to dist/ |
pnpm monitor |
Run uptime checks |
pnpm update-source |
Fetch site definitions from PT-depiler |
pnpm cleanup |
Merge data files + regenerate index |
/
├── .github/workflows/
│ ├── monitor.yml
│ ├── build.yml
│ └── update-source.yml
├── scripts/
│ ├── update-source.mjs
│ ├── monitor.mjs
│ └── cleanup.mjs
├── src/ # Astro pages & components
│ ├── pages/
│ │ ├── index.astro
│ │ └── site/[id].astro
│ ├── components/
│ │ ├── Layout.astro
│ │ ├── SiteCard.astro
│ │ ├── StatusBadge.astro
│ │ └── LatencyChart.astro
│ └── lib/
│ ├── data-loader.ts
│ └── types.ts
├── public/ # Static assets (favicon)
├── data/
│ ├── site.json # Site definitions
│ ├── uptime.json # Monitoring data index
│ └── uptime/ # Monitoring results
├── astro.config.mjs
├── package.json
└── tsconfig.json
- Enable GitHub Pages in repo settings → Source: GitHub Actions
- The
build.ymlworkflow handles build + deploy automatically - Set
siteandbaseinastro.config.mjsto match your domain / repo name
MIT