Get full credentials for a target (including password - use carefully)
(target_host)
| 18487 | ragnar_status = safe_str(shared_data.ragnarstatustext) |
| 18488 | if ragnar_status and ragnar_status not in ["Idle", ""]: |
| 18489 | activity_update.append({ |
| 18490 | 'timestamp': current_time, |
| 18491 | 'type': 'status', |
| 18492 | 'icon': '🤖', |
| 18493 | 'message': f"Status: {ragnar_status}", |
| 18494 | 'severity': 'info' |
| 18495 | }) |
| 18496 | |
| 18497 | if activity_update: |
| 18498 | socketio.emit('activity_update', activity_update) |
| 18499 | |
| 18500 | socketio.sleep(2) # Update every 2 seconds |
| 18501 | except Exception as e: |
| 18502 | logger.error(f"Error broadcasting status: {e}") |
| 18503 | socketio.sleep(5) |
| 18504 | |
| 18505 | |
| 18506 | def background_sync_loop(interval=SYNC_BACKGROUND_INTERVAL): |
| 18507 | """Continuously synchronize counts so displays remain fresh even without web clients""" |
| 18508 | global background_thread_health |
| 18509 | consecutive_errors = 0 |
| 18510 | max_consecutive_errors = 10 |
| 18511 | |
| 18512 | while not shared_data.webapp_should_exit: |
nothing calls this directly
no test coverage detected