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>
This commit is contained in:
224
commands/db-archive.md
Normal file
224
commands/db-archive.md
Normal file
@@ -0,0 +1,224 @@
|
||||
---
|
||||
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
|
||||
Reference in New Issue
Block a user