hvac-kia-content/validate_production.sh
Ben Reed 0a795437a7 Optimize Instagram scraper and increase capture targets to 1000
- Increased Instagram rate limit from 100 to 200 posts/hour
- Reduced delays: 10-20s (was 15-30s), extended breaks 30-60s (was 60-120s)
- Extended break interval: every 10 requests (was 5)
- Updated capture targets: 1000 posts for Instagram, 1000 videos for TikTok
- Added production deployment and monitoring scripts
- Created environment configuration template

This provides ~40-50% speed improvement for Instagram scraping and
captures 5x more Instagram content and 3.3x more TikTok content.

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

Co-Authored-By: Claude <noreply@anthropic.com>
2025-08-18 22:59:11 -03:00

197 lines
No EOL
6.5 KiB
Bash
Executable file

#!/bin/bash
#
# Production Validation Script
# Tests all production components and services
#
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
PROD_DIR="/opt/hvac-kia-content"
SERVICE_USER="hvac-content"
# Print colored output
print_status() { echo -e "${BLUE}[INFO]${NC} $1"; }
print_success() { echo -e "${GREEN}[✓]${NC} $1"; }
print_warning() { echo -e "${YELLOW}[!]${NC} $1"; }
print_error() { echo -e "${RED}[✗]${NC} $1"; }
# Test counters
TESTS_PASSED=0
TESTS_FAILED=0
# Test function wrapper
run_test() {
local test_name="$1"
local test_command="$2"
echo -n "Testing $test_name... "
if eval "$test_command" >/dev/null 2>&1; then
print_success "$test_name"
((TESTS_PASSED++))
return 0
else
print_error "$test_name"
((TESTS_FAILED++))
return 1
fi
}
# Test production directory structure
test_directories() {
print_status "Validating directory structure..."
run_test "Production directory exists" "[[ -d '$PROD_DIR' ]]"
run_test "Data directory exists" "[[ -d '$PROD_DIR/data' ]]"
run_test "Logs directory exists" "[[ -d '$PROD_DIR/logs' ]]"
run_test "Source code exists" "[[ -d '$PROD_DIR/src' ]]"
run_test "Config directory exists" "[[ -d '$PROD_DIR/config' ]]"
run_test "Virtual environment exists" "[[ -d '$PROD_DIR/venv' ]]"
}
# Test service user
test_service_user() {
print_status "Validating service user..."
run_test "Service user exists" "id '$SERVICE_USER'"
run_test "Service user home directory" "[[ -d '/home/$SERVICE_USER' || '$PROD_DIR' ]]"
run_test "Production directory ownership" "[[ \$(stat -c '%U' '$PROD_DIR') == '$SERVICE_USER' ]]"
}
# Test Python environment
test_python_environment() {
print_status "Validating Python environment..."
run_test "Python virtual environment" "[[ -f '$PROD_DIR/venv/bin/python' ]]"
run_test "Python packages installed" "sudo -u '$SERVICE_USER' '$PROD_DIR/venv/bin/pip' list | grep -q 'requests'"
run_test "Source modules importable" "sudo -u '$SERVICE_USER' '$PROD_DIR/venv/bin/python' -c 'import src.orchestrator'"
run_test "Playwright browser installed" "sudo -u '$SERVICE_USER' '$PROD_DIR/venv/bin/python' -c 'from playwright.sync_api import sync_playwright; sync_playwright().chromium.executable_path'"
}
# Test systemd services
test_systemd_services() {
print_status "Validating systemd services..."
run_test "Main service file exists" "[[ -f '/etc/systemd/system/hvac-content-aggregator.service' ]]"
run_test "Main timer file exists" "[[ -f '/etc/systemd/system/hvac-content-aggregator.timer' ]]"
run_test "Monitoring service exists" "[[ -f '/etc/systemd/system/hvac-monitoring.service' ]]"
run_test "TikTok service exists" "[[ -f '/etc/systemd/system/hvac-tiktok-captions.service' ]]"
run_test "Main timer enabled" "systemctl is-enabled hvac-content-aggregator.timer"
run_test "Monitoring timer enabled" "systemctl is-enabled hvac-monitoring.timer"
}
# Test configuration files
test_configuration() {
print_status "Validating configuration..."
run_test "Production config exists" "[[ -f '$PROD_DIR/config/production.py' ]]"
run_test "Environment template exists" "[[ -f '$PROD_DIR/.env.template' ]]"
run_test "Main runner script exists" "[[ -f '$PROD_DIR/run_production.py' ]]"
run_test "Backlog capture script exists" "[[ -f '$PROD_DIR/production_backlog_capture.py' ]]"
}
# Test network connectivity
test_connectivity() {
print_status "Validating network connectivity..."
run_test "HVAC Know It All website reachable" "curl -s --max-time 10 https://hvacknowitall.com > /dev/null"
run_test "YouTube accessible" "curl -s --max-time 10 https://www.youtube.com/@HVACKnowItAll > /dev/null"
run_test "MailChimp RSS accessible" "curl -s --max-time 10 'https://us10.campaign-archive.com/feed?u=d1a98c3e62003104038942e21&id=2205dbf985' > /dev/null"
}
# Test dry run execution
test_dry_run() {
print_status "Validating application execution..."
if [[ -f "$PROD_DIR/.env" ]]; then
run_test "Production script dry run" "sudo -u '$SERVICE_USER' bash -c 'cd $PROD_DIR && source venv/bin/activate && timeout 30 python run_production.py --dry-run'"
else
print_warning "Skipping dry run test - .env file not configured"
fi
}
# Test log rotation
test_log_rotation() {
print_status "Validating log rotation..."
run_test "Logrotate configuration exists" "[[ -f '/etc/logrotate.d/hvac-content' ]]"
run_test "Logrotate configuration syntax" "logrotate -d /etc/logrotate.d/hvac-content"
}
# Test monitoring
test_monitoring() {
print_status "Validating monitoring setup..."
run_test "Monitoring directory exists" "[[ -d '$PROD_DIR/monitoring' ]]"
run_test "Dashboard generator exists" "[[ -f '$PROD_DIR/monitoring/dashboard_generator.py' ]]"
}
# Main validation function
main() {
echo "🔍 HVAC Know It All - Production Validation"
echo "=========================================="
echo
test_directories
echo
test_service_user
echo
test_python_environment
echo
test_systemd_services
echo
test_configuration
echo
test_connectivity
echo
test_dry_run
echo
test_log_rotation
echo
test_monitoring
echo
echo "=========================================="
if [[ $TESTS_FAILED -eq 0 ]]; then
print_success "🎉 All tests passed! ($TESTS_PASSED/$((TESTS_PASSED + TESTS_FAILED)))"
print_status "Production environment is ready for deployment"
exit 0
else
print_error "⚠️ Some tests failed: $TESTS_FAILED/$((TESTS_PASSED + TESTS_FAILED))"
print_status "Please address the failed tests before proceeding"
exit 1
fi
}
# Show help
if [[ "$1" == "--help" || "$1" == "-h" ]]; then
echo "HVAC Know It All - Production Validation Script"
echo
echo "Usage: $0 [options]"
echo
echo "This script validates the production deployment by testing:"
echo " • Directory structure and permissions"
echo " • Service user configuration"
echo " • Python environment and dependencies"
echo " • Systemd services and timers"
echo " • Configuration files"
echo " • Network connectivity"
echo " • Application execution (dry run)"
echo " • Log rotation setup"
echo " • Monitoring configuration"
echo
echo "Options:"
echo " -h, --help Show this help message"
echo
exit 0
fi
# Run validation
main "$@"