ferrero-opentext/Python-Version
DJP c720759cc7 Add daily summary report with comprehensive statistics
Automated daily report that analyzes all workflow logs and sends email summary at 7pm.

NEW SCRIPT: daily_report.py
- Analyzes last 24 hours of all workflow logs
- Parses campaign and asset statistics
- Extracts error messages
- Sends comprehensive email report
- Run via cron at 7pm daily

FEATURES:
✓ Overall summary statistics across all workflows
✓ Per-workflow breakdown (A1→A2, A2→A3, A5→A6, B1→B2)
✓ Success rate calculation
✓ Campaign details with status (completed/partial/no_assets)
✓ Error log extraction
✓ Collapsible sections for campaign and error details
✓ Color-coded metrics (green=good, orange=warning, red=error)

STATISTICS TRACKED:
- Campaigns found/processed/completed/partial
- Total assets processed/successful/failed
- NOT APPROVED assets (A5→A6)
- Skipped assets (approved items)
- Success rate percentage
- Error count and messages

EMAIL TEMPLATE: daily_report
- Blue theme (#1976d2)
- Grid layout for statistics
- Collapsible campaign details
- Collapsible error logs (max 10 shown)
- Professional dashboard-style formatting

USAGE:
  python scripts/daily_report.py

CRON SCHEDULE (7pm daily):
  0 19 * * * cd ~/Python-Version && venv/bin/python scripts/daily_report.py >> logs/daily_report.log 2>&1

TESTED:
✓ Successfully parsed all 4 workflow logs
✓ Found 26 campaigns, 58 assets from last 24 hours
✓ Email sent successfully with all statistics
✓ Success rate: 48.3% (from test data)
✓ Error extraction working

Changes:
- NEW: scripts/daily_report.py (241 lines)
- EDIT: shared/notifier.py (add daily_report template)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-04 16:34:44 -05:00
..
config Fix B1→B2 workflow - Use Final Assets folder and MASTERS_ Box folder naming 2025-11-03 13:39:34 -05:00
scripts Add daily summary report with comprehensive statistics 2025-11-04 16:34:44 -05:00
.env Fix B1→B2 workflow - Use Final Assets folder and MASTERS_ Box folder naming 2025-11-03 13:39:34 -05:00
DATABASE_SCHEMA.md Add comprehensive database schema documentation - DATABASE_SCHEMA.md 2025-11-04 10:24:44 -05:00
DEPLOYMENT.md Make email notifications verbose with detailed asset lists 2025-10-31 08:27:05 -04:00
README.md Add comprehensive DEPLOYMENT.md and update README for production server 2025-10-30 18:59:12 -04:00
requirements.txt Fix boxsdk version and add .env file 2025-10-30 17:09:49 -04:00
setup.sh Start Python automation - Foundation components 2025-10-30 16:38:26 -04:00
WORKFLOW_DIAGRAMS.md Add comprehensive Mermaid workflow diagrams for all Python scripts 2025-11-03 16:26:45 -05:00

Ferrero Content Scaling - Python Automation

Automated workflow for Content Scaling (A1→A2→A3)

Compatible with Python 3.6+ (server) and Python 3.10+ (local development)

Status: Production Ready & Tested


📚 Documentation

  • DEPLOYMENT.md - Complete production server deployment guide
  • PYTHON_AUTOMATION_PLAN.md - Architecture and design
  • README.md - This file (quick reference)

Quick Start (Local Testing)

1. Setup

cd Python-Version

# Create virtual environment and install dependencies
./setup.sh

2. Configure

# Edit .env with your credentials
nano .env

# Verify configuration
nano config/config.yaml

Important:

  • Set correct Box folders in .env:
    • BOX_ROOT_FOLDER_A1_A2=348304357505 (master downloads)
    • BOX_ROOT_FOLDER_A2_A3=348526703108 (agency uploads)
  • Update webhook URL: Make.com or your endpoint
  • Configure email recipients

3. Test Connections

source venv/bin/activate
python scripts/test_connection.py

Expected output:

✓ DAM connection OK
✓ Box connection OK
✓ Database connection OK

4. Test A1→A2 Script

python scripts/a1_to_a2_download.py

What happens:

  • Searches for campaigns with status A1
  • Processes FIRST campaign only
  • Downloads all master assets from DAM
  • Uploads to Box (folder: 348304357505)
  • Creates folder: C000000078-Campaign_Name
  • Stores in PostgreSQL with full metadata
  • Updates status A1 → A2 (if all successful)
  • Sends webhook to Make.com
  • Sends email notification
  • Exits

If no A1 campaigns:

No A1 campaigns found - exiting

🚀 Production Deployment

See DEPLOYMENT.md for complete server deployment guide

Quick steps:

  1. Upload files to server
  2. Run ./setup.sh
  3. Edit .env with production credentials
  4. Test: python scripts/test_connection.py
  5. Setup cron:
    */5 * * * * cd ~/ferrero-automation/Python-Version && venv/bin/python scripts/a1_to_a2_download.py >> logs/cron.log 2>&1
    

Features

A1→A2 Master Asset Downloader

  • Polls DAM every 5 minutes for campaigns with status A1
  • Downloads all master assets
  • Uploads to Box with tracking IDs
  • Stores complete metadata in PostgreSQL
  • Only updates status A1→A2 when ALL assets processed successfully
  • Sends webhook notification with campaign ID and number
  • Email notifications on success/failure

A2→A3 Upload Handler

  • Receives webhooks from Box when files uploaded
  • Parses V2 filenames
  • Loads master metadata from database
  • Extracts 27-28 MVP fields
  • Updates fields from filename (Description, State, Language)
  • Uploads to DAM with clean filename
  • Only updates status A2→A3 when ALL campaign assets uploaded
  • Sends webhook notification
  • Email notifications

Configuration

Easy Field Updates

Edit config/field_mappings.yaml:

mvp_fields:
  - FERRERO.FIELD.MKTG.ASSET TYPE
  - NEW.FIELD.ID.HERE  # Just add new field IDs!

Environment Switching

# Staging
export ENV=staging

# Production
export ENV=production

Change Webhook URL

# config/config.yaml
webhooks:
  campaign_status_update:
    url: https://your-new-url.com/api  # Just change URL!

Change Email Recipients

# config/config.yaml
notifications:
  recipients:
    success:
      - newperson@ferrero.com  # Just add to list!

Deployment

Local Testing

source venv/bin/activate
python scripts/a1_to_a2_download.py

Production (Cron)

# Add to crontab
crontab -e

# Run every 5 minutes
*/5 * * * * cd ~/ferrero-automation/Python-Version && venv/bin/python scripts/a1_to_a2_download.py >> logs/cron.log 2>&1

Webhook Server (Background)

cd Python-Version
source venv/bin/activate
nohup python scripts/a2_to_a3_upload.py > logs/webhook.log 2>&1 &
echo $! > webhook.pid

Monitoring

Check Logs

tail -f logs/a1_to_a2.log
tail -f logs/a2_to_a3.log
tail -f logs/errors.log

Check Database

psql -h localhost -p 5433 -U ferrero_user -d ferrero_tracking

# Check recent uploads
SELECT tracking_id, original_filename, created_at
FROM master_assets
ORDER BY created_at DESC LIMIT 10;

Troubleshooting

Connection Issues

python scripts/test_connection.py

Invalid Filename

# Test filename parsing
python -c "from scripts.shared.filename_parser import FilenameParser; p=FilenameParser(); print(p.parse_filename('your_filename.mp4'))"

Email Not Sending

  • Check Mailgun API key in .env
  • Check recipient emails in config
  • Check logs: grep -i mailgun logs/*.log

Webhook Not Receiving

  • Check webhook server running: ps aux | grep a2_to_a3
  • Check port accessible: netstat -an | grep 5000
  • Check Box webhook configuration

File Structure

Python-Version/
├── venv/                   # Virtual environment
├── scripts/
│   ├── a1_to_a2_download.py        # A1→A2 poller
│   ├── a2_to_a3_upload.py          # A2→A3 webhook
│   ├── test_connection.py          # Connection tester
│   └── shared/
│       ├── config_loader.py        # Config management
│       ├── dam_client.py           # DAM API
│       ├── box_client.py           # Box API
│       ├── database.py             # PostgreSQL
│       ├── notifier.py             # Email + webhooks
│       ├── filename_parser.py      # V2 naming parser
│       └── metadata_extractor_mvp.py
├── config/
│   ├── config.yaml                 # Main config
│   ├── field_mappings.yaml         # MVP fields (easy to edit!)
│   └── environments/
│       ├── staging.yaml
│       └── production.yaml
├── logs/
├── temp/downloads/
└── .env                            # Environment variables

Support

For issues:

  1. Check logs in logs/ directory
  2. Run python scripts/test_connection.py
  3. Review configuration in config/config.yaml
  4. Check .env has all required variables

Version: 1.0.0 Compatible: Python 3.6+ (server) and Python 3.10+ (local) Status: Ready for testing