{“sources”: [{“type”: “code”, “ref”: “racks/api/export/backup.py:197-211”}, {“type”: “code”, “ref”: “racks/api/export/backup_selection.py”}, {“type”: “commit”, “ref”: “0e0abc0”}, {“type”: “commit”, “ref”: “1b3de40d4bbe7146ebf0b6d151e9fa6260a19609”}], “related”: [“entity—racks—endpoint—backup-full-download”, “entity—racks—service—run-full-backup”, “entity—core—model—asyncjob”, “feature—racks—backup-restore-async-v156”, “concept—backend—async-jobs”, “feature—backup-restore—creacion-selectiva-v1-74-0”], “content”: ”## Signature\n\npython\n@router.post(\"/backup/full/start\")\ndef backup_full_start(request):\n \"\"\"POST /api/racks/backup/full/start - Encola la generación del backup completo (Admin).\"\"\"\n\n\nMétodo: POST \nPath: /api/racks/backup/full/start \nPermisos: racks.admin \nRespuesta: 202 Accepted + JSON \n\n## Descripción\n\nEncola la generación del ZIP de backup completo de la organización actual en Huey (Redis worker) y responde inmediatamente con job_id para polling.\n\n### Request\n\njson\n{\n \"include_signage_videos\": false,\n \"selection\": null\n}\n\n\nBody opcional, ambos campos con default a “completo”: sin body = backup completo con vídeos fuera. Desde v1.74.0 (task #236, ventana), selection (normalizada por backup_selection.normalize_selection()) poda la maleta a las secciones del dashboard y dominios elegidos en el diálogo backup-create-modal — null/ausente = sin poda, resultado byte-compatible con el histórico. Ver [[feature—backup-restore—creacion-selectiva-v1-74-0]].\n\n### Response (202)\n\njson\n{\n \"job_id\": \"550e8400-e29b-41d4-a716-446655440000\",\n \"status\": \"queued\"\n}\n\n\n- job_id (str): UUID del AsyncJob para polling y descarga.\n- status (str): Siempre \"queued\" al crear.\n\n### Flujo completo\n\n1. Encolado (este endpoint):\n \n POST /backup/full/start → 202 + job_id\n \n\n2. Polling (cliente):\n \n GET /api/jobs/{job_id} → { status: \"processing\", progress: 45 }\n GET /api/jobs/{job_id} → { status: \"processing\", progress: 90 }\n GET /api/jobs/{job_id} → { status: \"done\", result: { download_url: \"...\" } }\n \n\n3. Descarga (cliente, cuando status: \"done\"):\n \n GET /backup/full/download/{job_id} → ZIP file (streaming)\n \n\n## Lógica interna\n\n1. Valida require_perm(request, \"racks\", \"admin\").\n2. Obtiene org = get_current_org(request).\n3. Normaliza selection = normalize_selection(payload.get(\"selection\")) (v1.74.0, racks/api/export/backup_selection.py).\n4. Crea un AsyncJob con:\n - organization = org\n - kind = AsyncJob.Kind.BACKUP_FULL\n - created_by = request.user (si autenticado)\n5. Encola la tarea Huey: run_full_backup(str(job.job_id), org.id, include_videos, selection).\n6. Responde 202 + job_id.\n\n## Consideraciones\n\n- No bloquea el worker ASGI: La generación (serialización + ZIP) corre en Huey (Redis worker pool).\n- Timeout frontend: 6 minutos (polling máx). Si no termina en ese tiempo, el cliente muestra un error.\n- Almacenamiento temporal: El ZIP se guarda en ASYNC_BACKUP_DIR = MEDIA_ROOT/backups/async/ hasta que se descarga.\n- Backup parcial (v1.74.0): si selection poda algo, el ZIP resultante se nombra con sufijo _partial y su manifest lleva partial: true + la selección aplicada — nunca se confunde con un backup completo. El endpoint que alimenta el árbol del diálogo (GET /backup/full/inventory) sustituyó al antiguo GET /backup/full/estimate.\n\n## Véase también\n\n- [[entity—racks—endpoint—backup-full-download]]\n- [[entity—racks—service—run-full-backup]]\n- [[entity—core—model—asyncjob]]\n- [[feature—racks—backup-restore-async-v156]]\n- [[concept—backend—async-jobs]]\n- [[feature—backup-restore—creacion-selectiva-v1-74-0]]\n”}
Referenciado desde
- Copia de seguridad y restauración completa en segundo plano (v1.56.0 · ADR T2 2/2)
- El backup adelgaza: los vídeos de Signage son opcionales (v1.72.0)
- El backup completo se crea eligiendo qué viaja: árbol de secciones y dominios (v1.74.0)
- El backup cubre ahora cables, salas DCIM, ITSM y Signage (v1.70.0)
- Endpoint GET /api/racks/backup/full/download/{job_id} — Descargar ZIP (v1.56.0)
- Manifest y verificación de integridad al crear un backup (v1.69.0 · task #236 PR-1)
- Manifest y verificación de integridad de backups (core/services/backup_verify.py)
- Restauración aditiva con confirmación (v1.66.2 · Fix integridad datos)
- Restore selectivo por rack + informe de verificación del restore (v1.71.0)
- Servicio / Tarea Huey `apply_full_restore_from_zip()` — Restaurar desde ZIP (v1.56.0)
- Servicio / Tarea Huey `run_full_backup()` — Generar ZIP de backup (v1.56.0)