Files
descomplicar-meta-plugin/commands/db-archive.md
Emanuel Almeida 692475a315 feat(v1.5.2): Execute database migrations and complete setup
- Execute all 6 migrations on Desk CRM production database
- Create missing tables: cr_lsps, cr_agent_lsps, cr_lsp_usage
- Create archive tables: cr_*_usage_archive (4 tables)
- Create system tables: cr_migrations, cr_maintenance_log
- Make all scripts executable (chmod +x)
- Total cr_* tables: 38

Migration files:
- 001_initial_schema.sql
- 002_add_lsps.sql
- 003_add_relationships.sql
- 004_add_telemetry.sql
- 005_add_archive_tables.sql
- 006_add_maintenance_log.sql

Scripts:
- session-init.sh, session-end.sh
- inject-context.sh, inject-agent-context.sh
- record-usage.sh, db-backup.sh, sync-to-mysql.sh

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2026-02-04 16:18:02 +00:00

225 lines
9.7 KiB
Markdown

---
name: db-archive
description: >
Archiving de dados de telemetria antigos.
Move registos >90 dias para tabelas _archive.
argument-hint: "[--days=N] [--table=X] [--dry-run] [--delete-archived]"
---
# /descomplicar:db-archive
Move dados de telemetria antigos para tabelas de arquivo, mantendo as tabelas principais optimizadas.
## Objectivo
Mover registos de telemetria antigos (>90 dias) para tabelas _archive, mantendo as tabelas activas optimizadas.
## Sintaxe
```
/descomplicar:db-archive [options]
```
| Opção | Descrição | Default |
|-------|-----------|---------|
| `--days=N` | Arquivar registos com mais de N dias | 90 |
| `--table=X` | Arquivar apenas tabela específica | todas |
| `--dry-run` | Mostrar o que seria arquivado sem executar | false |
| `--delete-archived` | Apagar dados arquivados (após backup) | false |
| `--force` | Não pedir confirmação | false |
## Output Esperado
```
╔════════════════════════════════════════════════════════════╗
║ DB ARCHIVE ║
╠════════════════════════════════════════════════════════════╣
║ Threshold: 90 dias ║
║ cr_agent_usage: 15.234 → archive ✓ ║
║ cr_skill_usage: 22.456 → archive ✓ ║
║ cr_mcp_tool_usage: 8.901 → archive ✓ ║
╠════════════════════════════════════════════════════════════╣
║ TOTAL ARCHIVED: 46.591 registos | ~6.9 MB libertados ║
╚════════════════════════════════════════════════════════════╝
```
## Tabelas de Telemetria
| Tabela Activa | Tabela Archive | Critério |
|---------------|----------------|----------|
| `cr_agent_usage` | `cr_agent_usage_archive` | created_at < N dias |
| `cr_skill_usage` | `cr_skill_usage_archive` | created_at < N dias |
| `cr_mcp_tool_usage` | `cr_mcp_tool_usage_archive` | created_at < N dias |
| `cr_lsp_usage` | `cr_lsp_usage_archive` | created_at < N dias |
## Workflow
```
1. VERIFICAR tabelas archive existem (criar se necessário)
2. CONTAR registos a arquivar
3. MOSTRAR resumo ao utilizador
4. COPIAR para tabelas _archive
5. VERIFICAR integridade (count match)
6. ELIMINAR da tabela principal
7. REGISTAR em cr_maintenance_log
```
## Exemplos
### Dry-run (ver sem executar)
```bash
/descomplicar:db-archive --dry-run
```
Output:
```
╔════════════════════════════════════════════════════════════════╗
║ DB ARCHIVE - DRY RUN ║
╠════════════════════════════════════════════════════════════════╣
║ Threshold: 90 dias (antes de 2025-11-06) ║
╠════════════════════════════════════════════════════════════════╣
║ Tabela Registos Oldest Size ║
║ ─────────────────────────────────────────────────────────────║
║ cr_agent_usage 15.234 2025-08-15 2.1 MB ║
║ cr_skill_usage 22.456 2025-08-20 3.4 MB ║
║ cr_mcp_tool_usage 8.901 2025-09-01 1.2 MB ║
║ cr_lsp_usage 1.234 2025-10-15 0.2 MB ║
╠════════════════════════════════════════════════════════════════╣
║ TOTAL: 47.825 registos | ~6.9 MB a arquivar ║
║ Executar sem --dry-run para arquivar ║
╚════════════════════════════════════════════════════════════════╝
```
### Archiving completo
```bash
/descomplicar:db-archive
```
Output:
```
╔════════════════════════════════════════════════════════════════╗
║ DB ARCHIVE ║
╠════════════════════════════════════════════════════════════════╣
║ Threshold: 90 dias ║
╠════════════════════════════════════════════════════════════════╣
║ cr_agent_usage ║
║ Copying to archive... 15.234 rows ✓ ║
║ Verifying integrity... match ✓ ║
║ Removing from active... 15.234 rows ✓ ║
║ ║
║ cr_skill_usage ║
║ Copying to archive... 22.456 rows ✓ ║
║ Verifying integrity... match ✓ ║
║ Removing from active... 22.456 rows ✓ ║
║ ║
║ cr_mcp_tool_usage ║
║ Copying to archive... 8.901 rows ✓ ║
║ Verifying integrity... match ✓ ║
║ Removing from active... 8.901 rows ✓ ║
║ ║
║ cr_lsp_usage ║
║ Copying to archive... 1.234 rows ✓ ║
║ Verifying integrity... match ✓ ║
║ Removing from active... 1.234 rows ✓ ║
╠════════════════════════════════════════════════════════════════╣
║ TOTAL ARCHIVED: 47.825 registos ║
║ Space freed: ~6.9 MB ║
║ Status: ✓ SUCCESS ║
╚════════════════════════════════════════════════════════════════╝
```
### Arquivar com threshold diferente
```bash
/descomplicar:db-archive --days=30
```
### Apenas uma tabela
```bash
/descomplicar:db-archive --table=cr_agent_usage
```
### Apagar dados muito antigos do archive
```bash
/descomplicar:db-archive --delete-archived --days=365
```
**Atenção**: `--delete-archived` apaga permanentemente dados com mais de N dias das tabelas _archive. Backup recomendado antes.
## SQL Executado
```sql
-- 1. Criar tabela archive se não existir
CREATE TABLE IF NOT EXISTS cr_agent_usage_archive LIKE cr_agent_usage;
-- 2. Contar registos a arquivar
SELECT COUNT(*) FROM cr_agent_usage
WHERE created_at < DATE_SUB(NOW(), INTERVAL 90 DAY);
-- 3. Copiar para archive
INSERT INTO cr_agent_usage_archive
SELECT * FROM cr_agent_usage
WHERE created_at < DATE_SUB(NOW(), INTERVAL 90 DAY);
-- 4. Verificar integridade
SELECT
(SELECT COUNT(*) FROM cr_agent_usage_archive
WHERE created_at < DATE_SUB(NOW(), INTERVAL 90 DAY)) as archived,
@expected_count as expected;
-- 5. Remover da tabela activa
DELETE FROM cr_agent_usage
WHERE created_at < DATE_SUB(NOW(), INTERVAL 90 DAY);
-- 6. Registar operação
INSERT INTO cr_maintenance_log (operation, table_name, rows_affected, details)
VALUES ('archive', 'cr_agent_usage', @row_count, JSON_OBJECT(
'threshold_days', 90,
'archived_to', 'cr_agent_usage_archive',
'oldest_record', @oldest_date
));
```
## Políticas de Retenção
| Dados | Activo | Archive | Total |
|-------|--------|---------|-------|
| Telemetria diária | 90 dias | 1 ano | 15 meses |
| Métricas agregadas | Sempre | - | Ilimitado |
| Logs manutenção | 1 ano | 2 anos | 3 anos |
## Automação Sugerida
### Hook Stop (diário)
```json
{
"hooks": {
"Stop": [{
"type": "command",
"command": "/descomplicar:db-archive --days=90 --force",
"condition": "daily"
}]
}
}
```
### Cron Semanal
```bash
# Arquivar telemetria > 90 dias todos os domingos
0 3 * * 0 claude /descomplicar:db-archive --force
```
## Integração
- **Skill**: db-maintenance-manager
- **MCP**: desk-crm-v3
- **Relacionado**:
- /descomplicar:db-backup (antes de delete-archived)
- /descomplicar:telemetry (fonte dos dados)
## Segurança
- Dados são MOVIDOS, não apagados (excepto --delete-archived)
- Verificação de integridade antes de DELETE
- Rollback automático se count mismatch
- Log completo em cr_maintenance_log