feat: initial itpp-docs setup with MkDocs Material
Publish Docs Site / build (push) Failing after 5s

- mkdocs.yml with dark slate theme, nav for 12 ITPP projects
- build-docs.sh aggregates docs from all project repos
- .gitea/workflows/docs-publish.yml for nightly rebuild+deploy
- README and CHANGELOG for the itpp-docs repo itself
- docs-source/ populated from all 12 repos
- site/ ready for deployment to docs.itpropartner.com
This commit is contained in:
Germaine Brown
2026-08-09 23:49:45 -04:00
parent 08ba2e62a8
commit 98073dc636
134 changed files with 55534 additions and 2 deletions
+19
View File
@@ -0,0 +1,19 @@
# scripts — CHANGELOG
## 2026-07-21 — Purpose Descriptions
- Added one-line purpose descriptions for all 78 scripts in README.md
- Backup scope documented in README header
## 2026-07-16 — Audit Remediation
- Recategorized scripts and removed Garrison Code Watch from cron
- `_fetch_body.py` moved to Email (internal utility)
- `mcp-mysql.py` moved to Hermes Internal (MCP server)
- `unsubscribe-scanner.py` and `daily-feed-summary.py` moved to Personal
- `garrison-code-watch.py` cron removed, script archived
## 2026-07-15 — Initial Inventory
- Initial commit: 79 scripts across 16 categories catalogued in README.md
- 31 cron-attached scripts, 48 manual/indirect
+157
View File
@@ -0,0 +1,157 @@
# scripts
**Generated:** 2026-07-21 19:53
**Total scripts:** 78 (44 shell, 34 Python)
**Cron-attached:** 30 of 78
**Location:** `/root/.hermes/scripts/`
**Backup:** Live sync (every 15m) + Full daily backup → Wasabi S3
## Backup & DR
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `unms-backup-sync.sh` | unms-backup-sync.sh -- Daily UISP/UNMS backup sync to Wasabi S3. | shell | 2.6KB | {'kind': 'cron', 'expr': '0 6 * * *', 'display': '0 6 * * *'} | unms-backup-sync ✅ |
| `gitea-backup.sh` | gitea-backup.sh — Daily Gitea backup to Wasabi S3. | shell | 2.5KB | {'kind': 'cron', 'expr': '0 8 * * *', 'display': '0 8 * * *'} | gitea-backup ✅ |
| `snapshot-hetzner.py` | Create a snapshot of ALL running servers in the Hetzner account. | python | 1.8KB | {'kind': 'cron', 'expr': '0 5 * * 1', 'display': '0 5 * * 1'} | hetzner-weekly-snapshots ✅ |
| `hudu-backup.sh` | hudu-backup.sh — Daily Hudu PostgreSQL backup to Wasabi S3. | shell | 1.6KB | {'kind': 'cron', 'expr': '0 7 * * *', 'display': '0 7 * * *'} | hudu-backup ✅ |
| `hermes-live-sync.sh` | hermes-live-sync.sh — Full Hermes sync to S3 every 15 min | shell | 1.1KB | {'kind': 'interval', 'minutes': 15, 'display': 'every 15m'} | hermes-live-sync ✅ |
| `run-wisp-backup.sh` | run-wisp-backup.sh — Wrapper for cron: sets up env and runs CCR backup via VPN | shell | 776B | {'kind': 'cron', 'expr': '0 6 * * *', 'display': '0 6 * * *'} | home-router-daily-backup ✅ |
| `sync_ringlogix.py` | Sync RingLogix subscriber data to local cache | python | 27.0KB | Manual | — |
| `backup_portal.py` | Backup portal data for web hosting services | python | 17.1KB | Manual | — |
| `wisp-backup.py` | Call home-router-vpn.sh up/down/status. | python | 13.1KB | Manual | — |
| `hermes-backup.sh` | hermes-backup.sh — Full Hermes backup to Wasabi S3 | shell | 7.9KB | Manual | — |
| `core-services-backup.sh` | Supplemental Core service backups (services not covered by existing Core backups) | shell | 3.8KB | Manual | — |
| `hermes-standby-restore.sh` | hermes-standby-restore.sh — Warm standby restore from S3 | shell | 2.7KB | Manual | — |
| `app1-backup.sh` | Backup app1 AI stack services to S3 | shell | 2.6KB | Manual | — |
| `hermes-system-config-sync.sh` | hermes-system-config-sync.sh — Sync system-level configs to Wasabi | shell | 2.4KB | Manual | — |
| `backup-uisp.sh` | Backup UISP/UNMS network management system | shell | 2.3KB | Manual | — |
| `app3-backup.sh` | Backup app3 web hosting services to S3 | shell | 2.1KB | Manual | — |
| `root-essentials-backup.sh` | root-essentials-backup.sh — Daily backup of Hermes config/core to S3 | shell | 1.8KB | Manual | — |
| `hermes-docker-sync.sh` | hermes-docker-sync.sh — Sync Docker volumes to Wasabi | shell | 1.7KB | Manual | — |
| `unifi-backup-sync.sh` | unifi-backup-sync.sh Daily UniFi backup sync from app2 Docker volume to Wasabi S3. | shell | 1.7KB | Manual | — |
| `home-router-backup.sh` | Backup home MikroTik router config to S3 | shell | 1.7KB | Manual | — |
| `app2-backup.sh` | Backup app2 services to S3 | shell | 1.7KB | Manual | — |
| `backup-audit-check.sh` | backup-audit-check.sh — Daily check: was yesterday's full backup successful? | shell | 1.3KB | Manual | — |
| `send-backup-email.py` | Send home router backup archive via SMTP. | python | 1.1KB | Manual | — |
| `send-backup-readme.py` | Send home router backup README via SMTP. | python | 1.1KB | Manual | — |
| `run-portal-backup.sh` | Portal backup cron wrapper — runs backup_portal.py, silent on success | shell | 782B | Manual | — |
| `system-config-sync.sh` | Sync system config files to S3 | shell | 669B | Manual | — |
| `docker-volume-sync.sh` | Sync Docker volumes to S3 | shell | 597B | Manual | — |
## Monitoring
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `vps-threshold-check.sh` | VPS Resource Threshold Alert Checker | shell | 6.1KB | {'kind': 'interval', 'minutes': 15, 'display': 'every 15m'} | vps-threshold-check ✅ |
| `bounce-check.py` | Check email bounce rates and flag delivery issues | python | 3.3KB | {'kind': 'interval', 'minutes': 60, 'display': 'every 60m'} | bounce-check ✅ |
| `service-health-check.sh` | service-health-check.sh — Check all critical services and report failures | shell | 2.3KB | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | service-health-check ✅ |
| `imap_triage_watchdog.sh` | Watchdog for the email triage cron job (5929c5f1deff). | shell | 2.1KB | {'kind': 'interval', 'minutes': 10, 'display': 'every 10m'} | IMAP-triage-watchdog ✅ |
| `spend-monitor-collect.sh` | spend-monitor-collect.sh — Collect LLM spend data for daily monitor | shell | 1.9KB | {'kind': 'cron', 'expr': '0 7 * * *', 'display': '0 7 * * *'} | daily-spend-monitor ✅ |
| `apex-mail-watchdog.sh` | apex-mail-watchdog.sh — Check Apex WPForms email delivery every 5 min | shell | 1.9KB | {'kind': 'cron', 'expr': '*/5 * * * *', 'display': '*/5 * * * *'} | apex-mail-watchdog ✅ |
| `home-router-watchdog.sh` | home-router-watchdog.sh — Check home router via WireGuard tunnel | shell | 553B | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | Home-Router-Watchdog ✅ |
| `home-router-watchdog.sh` | home-router-watchdog.sh — Check home router via WireGuard tunnel | shell | 553B | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | Home-Router-Watchdog ✅ |
| `boys-mail-monitor.py` | Monitor Tony's email inbox for important messages | python | 18.5KB | Manual | — |
| `hermes-standby-watchdog.sh` | hermes-standby-watchdog.sh — Periodic health check for warm standby | shell | 4.2KB | Manual | — |
| `apex-mail-watchdog.py` | Try sending a test email to the admin address. | python | 2.9KB | Manual | — |
| `reboot-with-check.sh` | reboot-with-check.sh — Reboot a server and wait for it + key services to come back. | shell | 2.7KB | Manual | — |
## Email
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `shonuff-email-responder.py` | Collect new emails from the Master | python | 9.7KB | {'kind': 'interval', 'minutes': 5, 'display': 'every 5m'} | shonuff-email-reply ✅ |
| `dre-mail-poller.py` | ── Configuration ────────────────────────────────────────────────────────────── | python | 9.6KB | {'kind': 'interval', 'minutes': 1, 'display': 'every 1m'} | dre-mail-poller ✅ |
| `boxpilot-triage.py` | Free/personal email domains — if sender is from these AND claims another company, it's sus | python | 5.8KB | {'kind': 'interval', 'minutes': 10, 'display': 'every 10m'} | boxpilot-triage ✅ |
| `shonuff-inbox-collect.py` | Extract plain text from email, favoring text/plain. | python | 3.3KB | {'kind': 'interval', 'minutes': 15, 'display': 'every 15m'} | shonuff-inbox-agent ✅ |
| `imap_triage_autorun.py` | User-blocked marketing/loan domains are spam/promotional. | python | 2.9KB | {'kind': 'interval', 'minutes': 60, 'display': 'every 60m'} | IMAP-email-triage ✅ |
| `imap_triage.py` | Core IMAP email triage and classification engine | python | 14.6KB | Manual | — |
| `send-dr-audit-email.py` | Send DR Backup Audit email to Germaine. | python | 5.5KB | Manual | — |
| `send-shonuff.py` | Send email from Sho'Nuff Brown with signature + BCC to Germaine + IMAP Sent copy. | python | 2.3KB | Manual | — |
| `watch-shonuff-inbox.py` | Monitor Sho'Nuff inbox for new messages | python | 2.2KB | Manual | — |
| `send-recovery.py` | Email the recovery bundle to g@germainebrown.com. | python | 1.5KB | Manual | — |
| `_fetch_body.py` | Fetch body of email sequence number 2 from shonuff inbox. | python | 1.1KB | Manual | — |
| `send-reset-notifications.sh` | Called BEFORE suggesting the user type /reset | shell | 914B | Manual | — |
| `send-back-online.sh` | Called by the NEW session after /reset to notify Germaine and Anita | shell | 832B | Manual | — |
## Ops Portal
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `ops-data-collector.py` | ─── Configuration ───────────────────── | python | 47.6KB | {'kind': 'cron', 'expr': '*/5 * * * *', 'display': '*/5 * * * *'} | ops-data-collector ✅ |
| `status-page-refresh.sh` | Status page heartbeat JSON generator | shell | 762B | {'kind': 'interval', 'minutes': 1, 'display': 'every 1m'} | status-page-refresh ✅ |
## Network
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `home-router-vpn.sh` | wisp-vpn.sh — Connect/disconnect L2TP/IPsec VPN to MicroTik gateway | shell | 8.1KB | Manual | — |
| `home-router-keepalive.sh` | wisp-vpn-keepalive.sh — Check VPN status and reconnect if down | shell | 877B | Manual | — |
## FleetTracker
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `ft360-export.py` | Cron runs scripts with system Python. The FT360 MCP uses the shared | python | 5.2KB | {'kind': 'interval', 'minutes': 1, 'display': 'every 1m'} | ft360-dashboard-export ✅ |
| `ft360-route-export.py` | Export today's FT360 device positions as GeoJSON for the dashboard map overlay. | python | 3.8KB | Manual | — |
| `ft360-daily-stats.py` | Compute daily stats from the Traccar H2 DB for the FT360 dashboard export. | python | 3.2KB | Manual | — |
## AI & Models
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `track-firecrawl.py` | Track Firecrawl API credit usage for portal dashboard. | python | 2.7KB | {'kind': 'cron', 'expr': '0 9 * * *', 'display': '0 9 * * *'} | firecrawl-usage-check ✅ |
| `model-usage-tracker.sh` | Model health check -- test all 5 fallback chain providers | shell | 2.2KB | {'kind': 'cron', 'expr': '0 8 * * *', 'display': '0 8 * * *'} | model-usage-check ✅ |
## Security
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `lynis-scan.sh` | Nightly security audit via Lynis | shell | 723B | {'kind': 'cron', 'expr': '0 3 * * *', 'display': '0 3 * * *'} | lynis-scan ✅ |
| `audit-server.sh` | Comprehensive server audit script | shell | 3.1KB | Manual | — |
## DRE
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `dre-approval-reminder.sh` | dre-approval-reminder.sh — Check for pending claim approvals | shell | 854B | {'kind': 'cron', 'expr': '0 * * * *', 'display': '0 * * * *'} | dre-pending-approval-reminder ✅ |
## Shark Game
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `shark-scraper.sh` | Shark scraper wrapper — silent on success, only outputs on failure | shell | 307B | {'kind': 'interval', 'minutes': 60, 'display': 'every 60m'} | shark-scraper ✅ |
| `shark-draft-reminder.sh` | shark-draft-reminder.sh — Send 24h and 1h draft reminder emails to league members | shell | 13.1KB | Manual | — |
## Hermes Internal
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `hermes-consolidate.sh` | hermes-consolidate.sh — Auto-consolidate Hermes memory every 10 min. | shell | 2.8KB | {'kind': 'interval', 'minutes': 10, 'display': 'every 10m'} | hermes-memory-consolidate ✅ |
| `hermes-consolidate.py` | Consolidate and archive Hermes backup files | python | 4.6KB | Manual | — |
| `mcp-mysql.py` | Simple MySQL MCP server for Hermes - with async stdin handling. | python | 3.0KB | Manual | — |
## Infrastructure
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `snmp-collect.sh` | Collect SNMP metrics from MikroTik network devices | shell | 926B | Manual | — |
| `snmp-http-server.py` | Serve SNMP textfile metrics via HTTP for Prometheus | python | 620B | Manual | — |
| `list-hetzner-servers.py` | List Hetzner servers via API. | python | 500B | Manual | — |
## Utilities
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `build-recovery.py` | Build the full Hermes recovery bundle markdown file. | python | 6.9KB | Manual | — |
| `generate-script-contents.py` | Find a script file by name in known script directories. | python | 2.4KB | Manual | — |
| `changelog.sh` | changelog.sh — Append an entry to the Hermes changelog | shell | 877B | Manual | — |
## Personal
| Script | Purpose | Type | Size | Schedule | Cron Job |
|---|---|---|---|---|---|
| `daily-feed-summary.py` | Collect RSS feeds and generate daily digest summary | python | 9.3KB | {'kind': 'cron', 'expr': '0 11 * * *', 'display': '0 11 * * *'} | daily-tech-digest ✅ |
| `unsubscribe-scanner.py` | ── Config ── | python | 4.8KB | {'kind': 'cron', 'expr': '0 7 * * *', 'display': '0 7 * * *'} | Unsubscribe Daily Digest ✅ |
| `icloud_bills_calendar.py` | Sync iCloud calendar with billing reminders | python | 12.0KB | Manual | — |