--- type: step category: event name: Calendar Sync All version: 1.0.0 status: active tags: [calendar, sync, event, cascade] dependencies: - services/advoware.py - redis emits: [calendar_sync_employee] subscribes: [calendar_sync_all] --- # Calendar Sync All Step ## Zweck Fetcht alle Mitarbeiter von Advoware und emittiert `calendar_sync_employee` Event pro Mitarbeiter. Ermöglicht parallele Verarbeitung. ## Config ```python { 'type': 'event', 'name': 'Calendar Sync All', 'subscribes': ['calendar_sync_all'], 'emits': ['calendar_sync_employee'], 'flows': ['advoware_cal_sync'] } ``` ## Input Event ```json { "topic": "calendar_sync_all", "data": {} } ``` ## Verhalten 1. **Fetch Employees** von Advoware API: ```python employees = await advoware.api_call('/employees') ``` 2. **Filter Debug-Liste** (wenn konfiguriert): ```python if Config.CALENDAR_SYNC_DEBUG_KUERZEL: employees = [e for e in employees if e['kuerzel'] in debug_list] ``` 3. **Set Lock pro Employee**: ```python lock_key = f'calendar_sync:lock:{kuerzel}' redis.set(lock_key, '1', nx=True, ex=300) ``` 4. **Emit Event pro Employee**: ```python await context.emit({ 'topic': 'calendar_sync_employee', 'data': { 'kuerzel': kuerzel, 'full_content': True } }) ``` ## Debug-Modus ```bash # Only sync specific employees export CALENDAR_SYNC_DEBUG_KUERZEL=SB,AI,RO # Sync all (production) export CALENDAR_SYNC_DEBUG_KUERZEL= ``` ## Error Handling - Advoware API Fehler: Loggen, aber nicht crashen - Lock-Fehler: Employee skippen (bereits in Sync) - Event Emission Fehler: Loggen und fortfahren ## Output Events Multiple `calendar_sync_employee` events, z.B.: ```json [ {"topic": "calendar_sync_employee", "data": {"kuerzel": "SB", "full_content": true}}, {"topic": "calendar_sync_employee", "data": {"kuerzel": "AI", "full_content": true}}, ... ] ``` ## Performance - ~10 employees: <1s für Fetch + Event Emission - Lock-Setting: <10ms pro Employee - Keine Blockierung (async events) ## Monitoring ``` [INFO] Fetching employees from Advoware [INFO] Found 10 employees [INFO] Emitting calendar_sync_employee for SB [INFO] Emitting calendar_sync_employee for AI ... ``` ## Related - [calendar_sync_event_step.md](calendar_sync_event_step.md) - Consumes emitted events - [calendar_sync_cron_step.md](calendar_sync_cron_step.md) - Triggers this step