POTE/scripts/daily_update.sh
ilia 0d8d85adc1 Add complete automation, reporting, and CI/CD system
Features Added:
==============

📧 EMAIL REPORTING SYSTEM:
- EmailReporter: Send reports via SMTP (Gmail, SendGrid, custom)
- ReportGenerator: Generate daily/weekly summaries with HTML/text formatting
- Configurable via .env (SMTP_HOST, SMTP_PORT, etc.)
- Scripts: send_daily_report.py, send_weekly_report.py

🤖 AUTOMATED RUNS:
- automated_daily_run.sh: Full daily ETL pipeline + reporting
- automated_weekly_run.sh: Weekly pattern analysis + reports
- setup_cron.sh: Interactive cron job setup (5-minute setup)
- Logs saved to ~/logs/ with automatic cleanup

🔍 HEALTH CHECKS:
- health_check.py: System health monitoring
- Checks: DB connection, data freshness, counts, recent alerts
- JSON output for programmatic use
- Exit codes for monitoring integration

🚀 CI/CD PIPELINE:
- .github/workflows/ci.yml: Full CI/CD pipeline
- GitHub Actions / Gitea Actions compatible
- Jobs: lint & test, security scan, dependency scan, Docker build
- PostgreSQL service for integration tests
- 93 tests passing in CI

📚 COMPREHENSIVE DOCUMENTATION:
- AUTOMATION_QUICKSTART.md: 5-minute email setup guide
- docs/12_automation_and_reporting.md: Full automation guide
- Updated README.md with automation links
- Deployment → Production workflow guide

🛠️ IMPROVEMENTS:
- All shell scripts made executable
- Environment variable examples in .env.example
- Report logs saved with timestamps
- 30-day log retention with auto-cleanup
- Health checks can be scheduled via cron

WHAT THIS ENABLES:
==================
After deployment, users can:
1. Set up automated daily/weekly email reports (5 min)
2. Receive HTML+text emails with:
   - New trades, market alerts, suspicious timing
   - Weekly patterns, rankings, repeat offenders
3. Monitor system health automatically
4. Run full CI/CD pipeline on every commit
5. Deploy with confidence (tests + security scans)

USAGE:
======
# One-time setup (on deployed server)
./scripts/setup_cron.sh

# Or manually send reports
python scripts/send_daily_report.py --to user@example.com
python scripts/send_weekly_report.py --to user@example.com

# Check system health
python scripts/health_check.py

See AUTOMATION_QUICKSTART.md for full instructions.

93 tests passing | Full CI/CD | Email reports ready
2025-12-15 15:34:31 -05:00

78 lines
2.4 KiB
Bash
Executable File

#!/bin/bash
# Daily update script for POTE
# Run this via cron to automatically fetch new data
set -e
# Configuration
POTE_DIR="/home/poteapp/pote"
LOG_DIR="/home/poteapp/logs"
LOG_FILE="$LOG_DIR/daily_update_$(date +%Y%m%d).log"
# Ensure log directory exists
mkdir -p "$LOG_DIR"
echo "=== POTE Daily Update: $(date) ===" | tee -a "$LOG_FILE"
cd "$POTE_DIR"
source venv/bin/activate
# 1. Fetch new congressional trades (if House Stock Watcher is back up)
echo "[1/4] Fetching congressional trades..." | tee -a "$LOG_FILE"
if python scripts/fetch_congressional_trades.py --days 7 >> "$LOG_FILE" 2>&1; then
echo "✓ Trades fetched successfully" | tee -a "$LOG_FILE"
else
echo "✗ Trade fetch failed (API might be down)" | tee -a "$LOG_FILE"
fi
# 2. Enrich any new securities
echo "[2/4] Enriching securities..." | tee -a "$LOG_FILE"
if python scripts/enrich_securities.py >> "$LOG_FILE" 2>&1; then
echo "✓ Securities enriched" | tee -a "$LOG_FILE"
else
echo "✗ Security enrichment failed" | tee -a "$LOG_FILE"
fi
# 3. Update prices for all securities
echo "[3/4] Fetching price data..." | tee -a "$LOG_FILE"
if python scripts/fetch_sample_prices.py >> "$LOG_FILE" 2>&1; then
echo "✓ Prices updated" | tee -a "$LOG_FILE"
else
echo "✗ Price fetch failed" | tee -a "$LOG_FILE"
fi
# 4. Generate summary
echo "[4/4] Generating summary..." | tee -a "$LOG_FILE"
python << 'EOF' | tee -a "$LOG_FILE"
from sqlalchemy import text
from pote.db import engine
from datetime import datetime, timedelta
with engine.connect() as conn:
# Get counts
officials = conn.execute(text("SELECT COUNT(*) FROM officials")).scalar()
trades = conn.execute(text("SELECT COUNT(*) FROM trades")).scalar()
securities = conn.execute(text("SELECT COUNT(*) FROM securities")).scalar()
# Get new trades in last 7 days
week_ago = (datetime.now() - timedelta(days=7)).strftime('%Y-%m-%d')
new_trades = conn.execute(
text(f"SELECT COUNT(*) FROM trades WHERE created_at >= '{week_ago}'")
).scalar()
print(f"\n📊 Database Summary:")
print(f" Officials: {officials:,}")
print(f" Securities: {securities:,}")
print(f" Trades: {trades:,}")
print(f" New (7d): {new_trades:,}")
EOF
echo "" | tee -a "$LOG_FILE"
echo "=== Update Complete: $(date) ===" | tee -a "$LOG_FILE"
echo "" | tee -a "$LOG_FILE"
# Keep only last 30 days of logs
find "$LOG_DIR" -name "daily_update_*.log" -mtime +30 -delete