docs updates
This commit is contained in:
1150
docs/automation/AI-FUNCTIONS-COMPLETE-REFERENCE.md
Normal file
1150
docs/automation/AI-FUNCTIONS-COMPLETE-REFERENCE.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,299 +0,0 @@
|
||||
# Automation Implementation - Deployment Checklist
|
||||
|
||||
## ✅ Completed Components
|
||||
|
||||
### Backend
|
||||
- [x] Database models created (`AutomationConfig`, `AutomationRun`)
|
||||
- [x] AutomationLogger service (file-based logging)
|
||||
- [x] AutomationService orchestrator (7-stage pipeline)
|
||||
- [x] API endpoints (`AutomationViewSet`)
|
||||
- [x] Celery tasks (scheduled checks, run execution, resume)
|
||||
- [x] URL routing registered
|
||||
- [x] Celery beat schedule configured
|
||||
- [x] Migration file created
|
||||
|
||||
### Frontend
|
||||
- [x] TypeScript API service (`automationService.ts`)
|
||||
- [x] Main dashboard page (`AutomationPage.tsx`)
|
||||
- [x] StageCard component
|
||||
- [x] ActivityLog component
|
||||
- [x] ConfigModal component
|
||||
- [x] RunHistory component
|
||||
|
||||
### Documentation
|
||||
- [x] Comprehensive README (`AUTOMATION-IMPLEMENTATION-README.md`)
|
||||
- [x] Original plan corrected (`automation-plan.md`)
|
||||
|
||||
## ⏳ Remaining Tasks
|
||||
|
||||
### 1. Run Database Migration
|
||||
|
||||
```bash
|
||||
cd /data/app/igny8/backend
|
||||
python manage.py migrate
|
||||
```
|
||||
|
||||
This will create the `automation_config` and `automation_run` tables.
|
||||
|
||||
### 2. Register Frontend Route
|
||||
|
||||
Add to your React Router configuration:
|
||||
|
||||
```typescript
|
||||
import AutomationPage from './pages/Automation/AutomationPage';
|
||||
|
||||
// In your route definitions:
|
||||
{
|
||||
path: '/automation',
|
||||
element: <AutomationPage />,
|
||||
}
|
||||
```
|
||||
|
||||
### 3. Add Navigation Link
|
||||
|
||||
Add link to main navigation menu:
|
||||
|
||||
```typescript
|
||||
{
|
||||
name: 'Automation',
|
||||
href: '/automation',
|
||||
icon: /* automation icon */
|
||||
}
|
||||
```
|
||||
|
||||
### 4. Verify Infrastructure
|
||||
|
||||
**Celery Worker**
|
||||
```bash
|
||||
# Check if running
|
||||
docker ps | grep celery
|
||||
|
||||
# Start if needed
|
||||
docker-compose up -d celery
|
||||
```
|
||||
|
||||
**Celery Beat**
|
||||
```bash
|
||||
# Check if running
|
||||
docker ps | grep beat
|
||||
|
||||
# Start if needed
|
||||
docker-compose up -d celery-beat
|
||||
```
|
||||
|
||||
**Redis/Cache**
|
||||
```bash
|
||||
# Verify cache backend in settings.py
|
||||
CACHES = {
|
||||
'default': {
|
||||
'BACKEND': 'django.core.cache.backends.redis.RedisCache',
|
||||
'LOCATION': 'redis://redis:6379/1',
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### 5. Create Log Directory
|
||||
|
||||
```bash
|
||||
mkdir -p /data/app/igny8/backend/logs/automation
|
||||
chmod 755 /data/app/igny8/backend/logs/automation
|
||||
```
|
||||
|
||||
### 6. Test API Endpoints
|
||||
|
||||
```bash
|
||||
# Get config (should return default config)
|
||||
curl -X GET "http://localhost:8000/api/v1/automation/config/?site_id=1" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
|
||||
# Estimate credits
|
||||
curl -X GET "http://localhost:8000/api/v1/automation/estimate/?site_id=1" \
|
||||
-H "Authorization: Bearer YOUR_TOKEN"
|
||||
```
|
||||
|
||||
### 7. Test Frontend
|
||||
|
||||
1. Navigate to `/automation` page
|
||||
2. Click [Configure] - modal should open
|
||||
3. Save configuration
|
||||
4. Click [Run Now] - should trigger automation
|
||||
5. Verify real-time updates in stage cards
|
||||
6. Check activity log is streaming
|
||||
|
||||
### 8. Test Scheduled Automation
|
||||
|
||||
1. Enable automation in config
|
||||
2. Set scheduled time to 1 minute from now
|
||||
3. Wait for next hour (beat checks hourly at :00)
|
||||
4. Verify automation starts automatically
|
||||
|
||||
### 9. Monitor First Run
|
||||
|
||||
Watch logs in real-time:
|
||||
|
||||
```bash
|
||||
# Backend logs
|
||||
tail -f /data/app/igny8/backend/logs/automation/{account_id}/{site_id}/{run_id}/automation_run.log
|
||||
|
||||
# Celery worker logs
|
||||
docker logs -f <celery_container>
|
||||
|
||||
# Django logs
|
||||
docker logs -f <backend_container>
|
||||
```
|
||||
|
||||
### 10. Verify Database Records
|
||||
|
||||
```python
|
||||
from igny8_core.business.automation.models import AutomationConfig, AutomationRun
|
||||
|
||||
# Check config created
|
||||
AutomationConfig.objects.all()
|
||||
|
||||
# Check runs recorded
|
||||
AutomationRun.objects.all()
|
||||
|
||||
# View stage results
|
||||
run = AutomationRun.objects.latest('started_at')
|
||||
print(run.stage_1_result)
|
||||
print(run.stage_2_result)
|
||||
# ... etc
|
||||
```
|
||||
|
||||
## Quick Start Commands
|
||||
|
||||
```bash
|
||||
# 1. Run migration
|
||||
cd /data/app/igny8/backend
|
||||
python manage.py migrate
|
||||
|
||||
# 2. Create log directory
|
||||
mkdir -p logs/automation
|
||||
chmod 755 logs/automation
|
||||
|
||||
# 3. Restart services
|
||||
docker-compose restart celery celery-beat
|
||||
|
||||
# 4. Verify Celery beat schedule
|
||||
docker exec <celery_container> celery -A igny8_core inspect scheduled
|
||||
|
||||
# 5. Test automation (Django shell)
|
||||
python manage.py shell
|
||||
>>> from igny8_core.business.automation.services import AutomationService
|
||||
>>> from igny8_core.modules.system.models import Account, Site
|
||||
>>> account = Account.objects.first()
|
||||
>>> site = Site.objects.first()
|
||||
>>> service = AutomationService(account, site)
|
||||
>>> service.estimate_credits() # Should return number
|
||||
>>> # Don't run start_automation() yet - test via UI first
|
||||
```
|
||||
|
||||
## Expected Behavior
|
||||
|
||||
### First Successful Run
|
||||
|
||||
1. **Stage 1**: Process keywords → create clusters (2-5 min)
|
||||
2. **Stage 2**: Generate ideas from clusters (1-2 min per cluster)
|
||||
3. **Stage 3**: Create tasks from ideas (instant)
|
||||
4. **Stage 4**: Generate content from tasks (3-5 min per task)
|
||||
5. **Stage 5**: Extract image prompts (1-2 min per content)
|
||||
6. **Stage 6**: Generate images (2-3 min per image)
|
||||
7. **Stage 7**: Count content ready for review (instant)
|
||||
|
||||
Total time: 15-45 minutes depending on batch sizes
|
||||
|
||||
### Stage Results Example
|
||||
|
||||
```json
|
||||
{
|
||||
"stage_1_result": {
|
||||
"keywords_processed": 20,
|
||||
"clusters_created": 4,
|
||||
"batches_run": 1,
|
||||
"credits_used": 4
|
||||
},
|
||||
"stage_2_result": {
|
||||
"clusters_processed": 4,
|
||||
"ideas_created": 16,
|
||||
"credits_used": 8
|
||||
},
|
||||
"stage_3_result": {
|
||||
"ideas_processed": 16,
|
||||
"tasks_created": 16,
|
||||
"batches_run": 1
|
||||
},
|
||||
"stage_4_result": {
|
||||
"tasks_processed": 16,
|
||||
"content_created": 16,
|
||||
"total_words": 40000,
|
||||
"credits_used": 80
|
||||
},
|
||||
"stage_5_result": {
|
||||
"content_processed": 16,
|
||||
"prompts_created": 64,
|
||||
"credits_used": 32
|
||||
},
|
||||
"stage_6_result": {
|
||||
"images_processed": 64,
|
||||
"images_generated": 64,
|
||||
"content_moved_to_review": 16,
|
||||
"credits_used": 128
|
||||
},
|
||||
"stage_7_result": {
|
||||
"ready_for_review": 16,
|
||||
"content_ids": [1, 2, 3, ...]
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### "Module not found" errors
|
||||
- Restart Django server after adding new models
|
||||
- Run `python manage.py collectstatic` if needed
|
||||
|
||||
### "Table does not exist" errors
|
||||
- Run migration: `python manage.py migrate`
|
||||
|
||||
### "No module named automation"
|
||||
- Check `__init__.py` files exist in all directories
|
||||
- Verify imports in `urls.py`
|
||||
|
||||
### Celery tasks not running
|
||||
- Check worker is running: `docker ps | grep celery`
|
||||
- Check beat is running: `docker ps | grep beat`
|
||||
- Verify tasks registered: `celery -A igny8_core inspect registered`
|
||||
|
||||
### Logs not appearing
|
||||
- Check directory permissions: `ls -la logs/automation`
|
||||
- Check AutomationLogger.start_run() creates directories
|
||||
- Verify log file path in code matches actual filesystem
|
||||
|
||||
### Frontend errors
|
||||
- Check API service imported correctly
|
||||
- Verify route registered in router
|
||||
- Check for TypeScript compilation errors
|
||||
- Verify API endpoints returning expected data
|
||||
|
||||
## Success Criteria
|
||||
|
||||
- [ ] Migration runs without errors
|
||||
- [ ] Frontend `/automation` page loads
|
||||
- [ ] Config modal opens and saves
|
||||
- [ ] Credit estimate shows reasonable number
|
||||
- [ ] "Run Now" starts automation successfully
|
||||
- [ ] Stage cards update in real-time
|
||||
- [ ] Activity log shows progress
|
||||
- [ ] All 7 stages complete successfully
|
||||
- [ ] Content moved to review status
|
||||
- [ ] Run History table shows completed run
|
||||
- [ ] Scheduled automation triggers at configured time
|
||||
|
||||
## Post-Deployment
|
||||
|
||||
1. Monitor first few runs closely
|
||||
2. Adjust batch sizes based on performance
|
||||
3. Set up alerts for failed runs
|
||||
4. Document any issues encountered
|
||||
5. Train users on automation features
|
||||
6. Gather feedback for improvements
|
||||
1053
docs/automation/AUTOMATION-IMPLEMENTATION-ANALYSIS-CORRECTED.md
Normal file
1053
docs/automation/AUTOMATION-IMPLEMENTATION-ANALYSIS-CORRECTED.md
Normal file
File diff suppressed because it is too large
Load Diff
@@ -1,383 +0,0 @@
|
||||
# AI Automation Pipeline - Implementation Complete
|
||||
|
||||
## Overview
|
||||
|
||||
The IGNY8 AI Automation Pipeline is a fully automated content creation system that orchestrates existing AI functions into a 7-stage pipeline, transforming keywords into published content without manual intervention.
|
||||
|
||||
## Architecture
|
||||
|
||||
### Backend Components
|
||||
|
||||
#### 1. Models (`/backend/igny8_core/business/automation/models.py`)
|
||||
|
||||
**AutomationConfig**
|
||||
- Per-site configuration for automation
|
||||
- Fields: `is_enabled`, `frequency` (daily/weekly/monthly), `scheduled_time`, batch sizes for all 7 stages
|
||||
- OneToOne relationship with Site model
|
||||
|
||||
**AutomationRun**
|
||||
- Tracks execution of automation runs
|
||||
- Fields: `run_id`, `status`, `current_stage`, `stage_1_result` through `stage_7_result` (JSON), `total_credits_used`
|
||||
- Status choices: running, paused, completed, failed
|
||||
|
||||
#### 2. Services
|
||||
|
||||
**AutomationLogger** (`services/automation_logger.py`)
|
||||
- File-based logging system
|
||||
- Log structure: `logs/automation/{account_id}/{site_id}/{run_id}/`
|
||||
- Files: `automation_run.log`, `stage_1.log` through `stage_7.log`
|
||||
- Methods: `start_run()`, `log_stage_start()`, `log_stage_progress()`, `log_stage_complete()`, `log_stage_error()`
|
||||
|
||||
**AutomationService** (`services/automation_service.py`)
|
||||
- Core orchestrator for automation pipeline
|
||||
- Methods:
|
||||
- `start_automation()` - Initialize new run with credit check
|
||||
- `run_stage_1()` through `run_stage_7()` - Execute each pipeline stage
|
||||
- `pause_automation()`, `resume_automation()` - Control run execution
|
||||
- `estimate_credits()` - Pre-run credit estimation
|
||||
- `from_run_id()` - Create service from existing run
|
||||
|
||||
#### 3. API Endpoints (`views.py`)
|
||||
|
||||
All endpoints at `/api/v1/automation/`:
|
||||
|
||||
- `GET /config/?site_id=123` - Get automation configuration
|
||||
- `PUT /update_config/?site_id=123` - Update configuration
|
||||
- `POST /run_now/?site_id=123` - Trigger immediate run
|
||||
- `GET /current_run/?site_id=123` - Get active run status
|
||||
- `POST /pause/?run_id=abc` - Pause running automation
|
||||
- `POST /resume/?run_id=abc` - Resume paused automation
|
||||
- `GET /history/?site_id=123` - Get past runs (last 20)
|
||||
- `GET /logs/?run_id=abc&lines=100` - Get run logs
|
||||
- `GET /estimate/?site_id=123` - Estimate credits needed
|
||||
|
||||
#### 4. Celery Tasks (`tasks.py`)
|
||||
|
||||
**check_scheduled_automations**
|
||||
- Runs hourly via Celery Beat
|
||||
- Checks AutomationConfig records for scheduled runs
|
||||
- Triggers automation based on frequency and scheduled_time
|
||||
|
||||
**run_automation_task**
|
||||
- Main background task that executes all 7 stages sequentially
|
||||
- Called by `run_now` API endpoint or scheduled trigger
|
||||
- Handles errors and updates AutomationRun status
|
||||
|
||||
**resume_automation_task**
|
||||
- Resumes paused automation from `current_stage`
|
||||
- Called by `resume` API endpoint
|
||||
|
||||
#### 5. Database Migration
|
||||
|
||||
Located at `/backend/igny8_core/business/automation/migrations/0001_initial.py`
|
||||
|
||||
Run with: `python manage.py migrate`
|
||||
|
||||
### Frontend Components
|
||||
|
||||
#### 1. Service (`/frontend/src/services/automationService.ts`)
|
||||
|
||||
TypeScript API client with methods matching backend endpoints:
|
||||
- `getConfig()`, `updateConfig()`, `runNow()`, `getCurrentRun()`
|
||||
- `pause()`, `resume()`, `getHistory()`, `getLogs()`, `estimate()`
|
||||
|
||||
#### 2. Pages
|
||||
|
||||
**AutomationPage** (`pages/Automation/AutomationPage.tsx`)
|
||||
- Main dashboard at `/automation`
|
||||
- Displays current run status, stage progress, activity log, history
|
||||
- Real-time polling (5s interval when run is active)
|
||||
- Controls: Run Now, Pause, Resume, Configure
|
||||
|
||||
#### 3. Components
|
||||
|
||||
**StageCard** (`components/Automation/StageCard.tsx`)
|
||||
- Visual representation of each stage (1-7)
|
||||
- Shows status: pending (⏳), active (🔄), complete (✅)
|
||||
- Displays stage results (items processed, credits used, etc.)
|
||||
|
||||
**ActivityLog** (`components/Automation/ActivityLog.tsx`)
|
||||
- Real-time log viewer with terminal-style display
|
||||
- Auto-refreshes every 3 seconds
|
||||
- Configurable line count (50, 100, 200, 500)
|
||||
|
||||
**ConfigModal** (`components/Automation/ConfigModal.tsx`)
|
||||
- Modal for editing automation settings
|
||||
- Fields: Enable/disable, frequency, scheduled time, batch sizes
|
||||
- Form validation and save
|
||||
|
||||
**RunHistory** (`components/Automation/RunHistory.tsx`)
|
||||
- Table of past automation runs
|
||||
- Columns: run_id, status, trigger, started, completed, credits, stage
|
||||
- Status badges with color coding
|
||||
|
||||
## 7-Stage Pipeline
|
||||
|
||||
### Stage 1: Keywords → Clusters (AI)
|
||||
- **Query**: `Keywords` with `status='new'`, `cluster__isnull=True`, `disabled=False`
|
||||
- **Batch Size**: Default 20 keywords
|
||||
- **AI Function**: `AutoCluster().execute()`
|
||||
- **Output**: Creates `Clusters` records
|
||||
- **Credits**: ~1 per 5 keywords
|
||||
|
||||
### Stage 2: Clusters → Ideas (AI)
|
||||
- **Query**: `Clusters` with `status='new'`, exclude those with existing ideas
|
||||
- **Batch Size**: Default 1 cluster
|
||||
- **AI Function**: `GenerateIdeas().execute()`
|
||||
- **Output**: Creates `ContentIdeas` records
|
||||
- **Credits**: ~2 per cluster
|
||||
|
||||
### Stage 3: Ideas → Tasks (Local Queue)
|
||||
- **Query**: `ContentIdeas` with `status='new'`
|
||||
- **Batch Size**: Default 20 ideas
|
||||
- **Operation**: Local database creation (no AI)
|
||||
- **Output**: Creates `Tasks` records with status='queued'
|
||||
- **Credits**: 0 (local operation)
|
||||
|
||||
### Stage 4: Tasks → Content (AI)
|
||||
- **Query**: `Tasks` with `status='queued'`, `content__isnull=True`
|
||||
- **Batch Size**: Default 1 task
|
||||
- **AI Function**: `GenerateContent().execute()`
|
||||
- **Output**: Creates `Content` records with status='draft'
|
||||
- **Credits**: ~5 per content (2500 words avg)
|
||||
|
||||
### Stage 5: Content → Image Prompts (AI)
|
||||
- **Query**: `Content` with `status='draft'`, `images_count=0` (annotated)
|
||||
- **Batch Size**: Default 1 content
|
||||
- **AI Function**: `GenerateImagePromptsFunction().execute()`
|
||||
- **Output**: Creates `Images` records with status='pending' (contains prompts)
|
||||
- **Credits**: ~2 per content (4 prompts avg)
|
||||
|
||||
### Stage 6: Image Prompts → Generated Images (AI)
|
||||
- **Query**: `Images` with `status='pending'`
|
||||
- **Batch Size**: Default 1 image
|
||||
- **AI Function**: `GenerateImages().execute()`
|
||||
- **Output**: Updates `Images` to status='generated' with `image_url`
|
||||
- **Side Effect**: Automatically sets `Content.status='review'` when all images complete (via `ai/tasks.py:723`)
|
||||
- **Credits**: ~2 per image
|
||||
|
||||
### Stage 7: Manual Review Gate
|
||||
- **Query**: `Content` with `status='review'`
|
||||
- **Operation**: Count only, no processing
|
||||
- **Output**: Returns list of content IDs ready for review
|
||||
- **Credits**: 0
|
||||
|
||||
## Key Design Principles
|
||||
|
||||
### 1. NO Duplication of AI Function Logic
|
||||
|
||||
The automation system ONLY handles:
|
||||
- Batch selection and sequencing
|
||||
- Stage orchestration
|
||||
- Credit estimation and checking
|
||||
- Progress tracking and logging
|
||||
- Scheduling and triggers
|
||||
|
||||
It does NOT handle:
|
||||
- Credit deduction (done by `AIEngine.execute()` at line 395)
|
||||
- Status updates (done within AI functions)
|
||||
- Progress tracking (StepTracker emits events automatically)
|
||||
|
||||
### 2. Correct Image Model Understanding
|
||||
|
||||
- **NO separate ImagePrompts model** - this was a misunderstanding
|
||||
- `Images` model serves dual purpose:
|
||||
- `status='pending'` = has prompt, needs image URL
|
||||
- `status='generated'` = has image_url
|
||||
- Stage 5 creates Images records with prompts
|
||||
- Stage 6 updates same records with URLs
|
||||
|
||||
### 3. Automatic Content Status Changes
|
||||
|
||||
- `Content.status` changes from 'draft' to 'review' automatically
|
||||
- Happens in `ai/tasks.py:723` when all images complete
|
||||
- Automation does NOT manually update this status
|
||||
|
||||
### 4. Distributed Locking
|
||||
|
||||
- Uses Django cache with `automation_lock_{site.id}` key
|
||||
- 6-hour timeout to prevent deadlocks
|
||||
- Released on completion, pause, or failure
|
||||
|
||||
## Configuration
|
||||
|
||||
### Schedule Configuration UI
|
||||
|
||||
Located at `/automation` page → [Configure] button
|
||||
|
||||
**Options:**
|
||||
- **Enable/Disable**: Toggle automation on/off
|
||||
- **Frequency**: Daily, Weekly (Mondays), Monthly (1st)
|
||||
- **Scheduled Time**: Time of day to run (24-hour format)
|
||||
- **Batch Sizes**: Per-stage item counts
|
||||
|
||||
**Defaults:**
|
||||
- Stage 1: 20 keywords
|
||||
- Stage 2: 1 cluster
|
||||
- Stage 3: 20 ideas
|
||||
- Stage 4: 1 task
|
||||
- Stage 5: 1 content
|
||||
- Stage 6: 1 image
|
||||
|
||||
### Credit Estimation
|
||||
|
||||
Before starting, system estimates:
|
||||
- Stage 1: keywords_count / 5
|
||||
- Stage 2: clusters_count * 2
|
||||
- Stage 4: tasks_count * 5
|
||||
- Stage 5: content_count * 2
|
||||
- Stage 6: content_count * 8 (4 images * 2 credits avg)
|
||||
|
||||
Requires 20% buffer: `account.credits_balance >= estimated * 1.2`
|
||||
|
||||
## Deployment Checklist
|
||||
|
||||
### Backend
|
||||
|
||||
1. ✅ Models created in `business/automation/models.py`
|
||||
2. ✅ Services created (`AutomationLogger`, `AutomationService`)
|
||||
3. ✅ Views created (`AutomationViewSet`)
|
||||
4. ✅ URLs registered in `igny8_core/urls.py`
|
||||
5. ✅ Celery tasks created (`check_scheduled_automations`, `run_automation_task`, `resume_automation_task`)
|
||||
6. ✅ Celery beat schedule updated in `celery.py`
|
||||
7. ⏳ Migration created (needs to run: `python manage.py migrate`)
|
||||
|
||||
### Frontend
|
||||
|
||||
8. ✅ API service created (`services/automationService.ts`)
|
||||
9. ✅ Main page created (`pages/Automation/AutomationPage.tsx`)
|
||||
10. ✅ Components created (`StageCard`, `ActivityLog`, `ConfigModal`, `RunHistory`)
|
||||
11. ⏳ Route registration (add to router: `/automation` → `AutomationPage`)
|
||||
|
||||
### Infrastructure
|
||||
|
||||
12. ⏳ Celery worker running (for background tasks)
|
||||
13. ⏳ Celery beat running (for scheduled checks)
|
||||
14. ⏳ Redis/cache backend configured (for distributed locks)
|
||||
15. ⏳ Log directory writable: `/data/app/igny8/backend/logs/automation/`
|
||||
|
||||
## Usage
|
||||
|
||||
### Manual Trigger
|
||||
|
||||
1. Navigate to `/automation` page
|
||||
2. Verify credit balance is sufficient (shows in header)
|
||||
3. Click [Run Now] button
|
||||
4. Monitor progress in real-time:
|
||||
- Stage cards show current progress
|
||||
- Activity log shows detailed logs
|
||||
- Credits used updates live
|
||||
|
||||
### Scheduled Automation
|
||||
|
||||
1. Navigate to `/automation` page
|
||||
2. Click [Configure] button
|
||||
3. Enable automation
|
||||
4. Set frequency and time
|
||||
5. Configure batch sizes
|
||||
6. Save configuration
|
||||
7. Automation will run automatically at scheduled time
|
||||
|
||||
### Pause/Resume
|
||||
|
||||
- During active run, click [Pause] to halt execution
|
||||
- Click [Resume] to continue from current stage
|
||||
- Useful for credit management or issue investigation
|
||||
|
||||
### Viewing History
|
||||
|
||||
- Run History table shows last 20 runs
|
||||
- Filter by status, date, trigger type
|
||||
- Click run_id to view detailed logs
|
||||
|
||||
## Monitoring
|
||||
|
||||
### Log Files
|
||||
|
||||
Located at: `logs/automation/{account_id}/{site_id}/{run_id}/`
|
||||
|
||||
- `automation_run.log` - Main activity log
|
||||
- `stage_1.log` through `stage_7.log` - Stage-specific logs
|
||||
|
||||
### Database Records
|
||||
|
||||
**AutomationRun** table tracks:
|
||||
- Current status and stage
|
||||
- Stage results (JSON)
|
||||
- Credits used
|
||||
- Error messages
|
||||
- Timestamps
|
||||
|
||||
**AutomationConfig** table tracks:
|
||||
- Last run timestamp
|
||||
- Next scheduled run
|
||||
- Configuration changes
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Run stuck in "running" status
|
||||
|
||||
1. Check Celery worker logs: `docker logs <celery_container>`
|
||||
2. Check for cache lock: `redis-cli GET automation_lock_<site_id>`
|
||||
3. Manually release lock if needed: `redis-cli DEL automation_lock_<site_id>`
|
||||
4. Update run status: `AutomationRun.objects.filter(run_id='...').update(status='failed')`
|
||||
|
||||
### Insufficient credits
|
||||
|
||||
1. Check estimate: GET `/api/v1/automation/estimate/?site_id=123`
|
||||
2. Add credits via billing page
|
||||
3. Retry run
|
||||
|
||||
### Stage failures
|
||||
|
||||
1. View logs: GET `/api/v1/automation/logs/?run_id=...`
|
||||
2. Check `error_message` field in AutomationRun
|
||||
3. Verify AI function is working: test individually via existing UI
|
||||
4. Check credit balance mid-run
|
||||
|
||||
## Future Enhancements
|
||||
|
||||
1. Email notifications on completion/failure
|
||||
2. Slack/webhook integrations
|
||||
3. Per-stage retry logic
|
||||
4. Partial run resumption after failure
|
||||
5. Advanced scheduling (specific days, multiple times)
|
||||
6. Content preview before Stage 7
|
||||
7. Auto-publish to WordPress option
|
||||
8. Credit usage analytics and forecasting
|
||||
|
||||
## File Locations Summary
|
||||
|
||||
```
|
||||
backend/igny8_core/business/automation/
|
||||
├── __init__.py
|
||||
├── models.py # AutomationConfig, AutomationRun
|
||||
├── views.py # AutomationViewSet (API endpoints)
|
||||
├── tasks.py # Celery tasks
|
||||
├── urls.py # URL routing
|
||||
├── migrations/
|
||||
│ ├── __init__.py
|
||||
│ └── 0001_initial.py # Database schema
|
||||
└── services/
|
||||
├── __init__.py
|
||||
├── automation_logger.py # File logging service
|
||||
└── automation_service.py # Core orchestrator
|
||||
|
||||
frontend/src/
|
||||
├── services/
|
||||
│ └── automationService.ts # API client
|
||||
├── pages/Automation/
|
||||
│ └── AutomationPage.tsx # Main dashboard
|
||||
└── components/Automation/
|
||||
├── StageCard.tsx # Stage status display
|
||||
├── ActivityLog.tsx # Log viewer
|
||||
├── ConfigModal.tsx # Settings modal
|
||||
└── RunHistory.tsx # Past runs table
|
||||
```
|
||||
|
||||
## Credits
|
||||
|
||||
Implemented according to `automation-plan.md` with corrections for:
|
||||
- Image model structure (no separate ImagePrompts)
|
||||
- AI function internal logic (no duplication)
|
||||
- Content status changes (automatic in background)
|
||||
Reference in New Issue
Block a user