Skip to content

Arquitetura

Manoel (Ryu) edited this page Jun 7, 2026 · 1 revision

Arquitetura

Visão Geral

CPU-reader-proc segue uma arquitetura em camadas simples:

Fonte de Dados ↓ Aquisição ↓ Parsing ↓ Modelo Interno ↓ Apresentação

Cada camada possui responsabilidade única para reduzir acoplamento e facilitar manutenção.


Fluxo Geral

┌─────────────────┐
│ Linux Kernel    │
└──────┬──────────┘
       │
       ▼
┌─────────────────┐
│ /proc           │
│ (procfs)        │
└──────┬──────────┘
       │ leitura
       ▼
┌─────────────────┐
│ Reader          │
│ Entrada bruta   │
└──────┬──────────┘
       │ parsing
       ▼
┌─────────────────┐
│ Parser          │
│ Interpretação   │
└──────┬──────────┘
       │ estrutura
       ▼
┌─────────────────┐
│ Internal Model  │
│ Dados tratados  │
└──────┬──────────┘
       │ saída
       ▼
┌─────────────────┐
│ CLI / Output    │
└─────────────────┘

Camadas

1. Data Source

Responsável pela origem das informações.

Entrada típica:

/proc/stat
/proc/cpuinfo
/proc/loadavg

Responsabilidades:

  • Expor dados do sistema;
  • Fornecer snapshots;
  • Não armazenar estado.

2. Reader

Responsável por leitura bruta.

Operações comuns:

open()
read()
close()

Saída esperada:

cpu  11320 120 5310 ...

Responsabilidades:

  • Abrir arquivos;
  • Capturar conteúdo;
  • Isolar I/O.

Não deve:

  • Interpretar valores;
  • Aplicar regras.

3. Parser

Transforma texto em estruturas.

Entrada:

cpu 11320 120 5310

Saída:

CPUData {
 user = 11320,
 system = 5310
}

Responsabilidades:

  • Tokenização;
  • Conversão numérica;
  • Validação básica.

4. Internal Model

Representação do estado.

Exemplo:

struct cpu_snapshot {
    long user;
    long nice;
    long system;
    long idle;
};

Objetivos:

  • Centralizar dados;
  • Facilitar cálculos;
  • Separar coleta da exibição.

5. Output Layer

Transformação final.

Exemplo:

CPU Usage: 37%
Idle: 63%

Pode evoluir futuramente para:

  • JSON
  • CSV
  • API
  • TUI

Estrutura Esperada do Projeto

CPU-reader-proc/
│
├── src/
│   ├── reader/
│   ├── parser/
│   ├── model/
│   ├── output/
│   └── main.c
│
├── include/
│
├── docs/
│
├── tests/
│
└── Makefile

Dependências Arquiteturais

Regra:

output
↓

model
↓

parser
↓

reader
↓

procfs

Camadas superiores conhecem inferiores.

Camadas inferiores não conhecem superiores.


Decisões Arquiteturais

Separação de leitura e parsing

Motivo: facilita testes e reduz acoplamento.


Estruturas internas explícitas

Motivo: evitar propagação de strings.


Dependência direta do procfs

Motivo: aproximação do comportamento real do sistema.


Limitações Atuais

  • Dependente de Linux
  • Snapshot local
  • Sem histórico persistente
  • Sem coleta contínua

Próxima Página

→ Instalação