# Metrics - Templates de Dashboards ## Dashboard KB Performance ``` DIFY KB PERFORMANCE DASHBOARD CACHE PERFORMANCE Hit Rate: [barra progresso] X% (target: 40%+) Cache Breakdown: | Skill | Queries | Hits | Hit % | |----------------|---------|------|-------| | /orcamento | 5 | 1 | 20% | | /lead-approach | 3 | 0 | 0% | | /wp-dev | 4 | 0 | 0% | QUERY RELEVANCE (avg score) SEO: 0.85 Perfex: 0.79 Elementor: 0.70 Marketing: 0.66 Vendas: 0.46 (alerta) IMPACT ON PERFORMANCE Com Dify KB: 18 min avg Sem Dify KB: 30 min avg (baseline) Improvement: -40% ``` ## Dashboard ROI por Cliente/Projecto ``` ROI POR CLIENTE/PROJECTO (ultimos 30 dias) TOP CLIENTES POR VALOR GERADO | Cliente | Horas | Skills | Valor (EUR) | |--------------|-------|--------|-------------| | SFV-360 | 24h | 45 | 1.200,00 | | Descomplicar | 18h | 32 | 900,00 | | INTERNAL | 12h | 28 | 600,00 | TOTAL PERIODO: 54 horas poupadas = 2.700,00 EUR Custo hora interno: 50,00 EUR BREAKDOWN POR SKILL /orcamento: 12h poupadas (baseline 30min->18min) /wp-dev: 8h poupadas (baseline 4h->2h) /lead-approach: 6h poupadas (baseline 25min->12min) ``` ## Dashboard Alertas ``` ALERTAS ACTIVOS DEGRADACAO (>15% vs baseline) /lead-approach: +22% (baseline 12min -> actual 15min) Ultima ocorrencia: 2026-02-02 Afecta: 3 projectos Accao: Executar /reflect para investigar LOW CACHE HIT (<30%) Cache hit rate: 6.3% Target: 40% Causa: Sistema recente, acumular com uso MELHORIAS DETECTADAS /orcamento: -40% (era 30min, agora 18min) /wp-dev: -50% (era 4h, agora 2h) Configurar alertas: - Degradacao threshold: 15% (padrao) - Cache hit minimum: 30% (padrao) - Error rate maximum: 10% (padrao) ``` ## Dashboard Export ``` Formatos disponiveis: 1. JSON - ~/.claude/skills/_metrics-export-YYYYMMDD.json 2. CSV - ~/.claude/skills/_metrics-export-YYYYMMDD.csv 3. Markdown - Para colar em documentos Campos exportados: - name, type, executions, avg_ms, baseline_ms - improvement_pct, error_rate, kb_consulted - cache_hit_rate, project_id, client_name ``` ## ASCII Charts Library ### Progress Bar ```javascript function progressBar(value, max, width=20) { const filled = Math.round((value / max) * width); const empty = width - filled; return '#'.repeat(filled) + '-'.repeat(empty); } ``` ### Trending Arrow ```javascript function trendIcon(pct) { if (pct < -10) return 'melhoria significativa'; if (pct < 0) return 'melhoria'; if (pct === 0) return 'estavel'; if (pct < 10) return 'degradacao ligeira'; return 'degradacao significativa'; } ``` ### Mini Sparkline ```javascript function sparkline(values) { const chars = '________'; const min = Math.min(...values); const max = Math.max(...values); const range = max - min || 1; return values.map(v => chars[Math.floor((v - min) / range * 7)]).join(''); } ```