Files
olt-api/doc/expansion.md
2026-02-18 10:18:46 -03:00

3.1 KiB

Guia de Expansão e Desenvolvimento

Este documento explica como adicionar novos recursos (métodos) e suportar novos fabricantes (drivers) na API Zabbix OLT.

Arquitetura

A API segue um padrão de Factory simplificado:

  1. Driver Base (drivers/__init__.py): Define a interface comum (OltDriver).
  2. Implementações (drivers/nokia.py, etc): Classes concretas que herdam de OltDriver.
  3. API (app.py): Roteia as requisições para o método correto do driver instanciado.

1. Adicionar Novo Tipo de Monitoramento (Ex: Interfaces)

Para adicionar uma nova coleta de dados (ex: estatísticas de interface, temperatura, CPU):

Passo 1: Atualizar o Contrato

Edite drivers/__init__.py e adicione o método abstrato na classe OltDriver.

@abstractmethod
def get_interface_stats(self):
    """Retorna estatísticas de interfaces Ethernet/Uplink/PON."""
    pass

Passo 2: Implementar nos Drivers

Atualize todas as classes que herdam de OltDriver (ex: drivers/nokia.py).

def get_interface_stats(self):
    connection = self.connect()
    output = connection.send_command_timing("show interface ...")
    
    # Implementar lógica de parsing (regex)
    stats = self._parse_interfaces(output)
    
    connection.disconnect()
    return stats

Passo 3: Criar Rota na API

Edite app.py para expor o novo método.

@app.route('/api/v1/interface_stats', methods=['GET'])
@cache_response
def get_interface_stats():
    # ... (Copiar lógica de instanciação do driver de get_pon_stats) ...
    
    try:
        stats = driver.get_interface_stats()
        return jsonify({"data": stats, "meta": ...})
    except Exception as e:
        return jsonify({'error': str(e)}), 500

2. Adicionar Novo Fabricante (Vendor)

Para suportar uma nova OLT (ex: Huawei, ZTE):

Passo 1: Criar o Driver

Crie um arquivo em drivers/ (ex: drivers/huawei.py).

from drivers import OltDriver
import re

class HuaweiDriver(OltDriver):
    def connect(self):
        # Configurar conexão Netmiko (device_type='huawei')
        return ConnectHandler(...)

    def get_pon_stats(self):
        connection = self.connect()
        output = connection.send_command("display ont info ...")
        connection.disconnect()
        return self._parse_output(output)

Passo 2: Registrar o Driver

Edite app.py e importe a nova classe.

from drivers.huawei import HuaweiDriver

DRIVERS = {
    'nokia': NokiaDriver,
    'fiberhome': FiberhomeDriver,
    'huawei': HuaweiDriver  # <--- Novo registro
}

Passo 3: Configurar Host

No hosts.json, defina o driver para o IP correspondente.

"10.10.10.1": {
    "driver": "huawei",
    ...
}

Dicas de Desenvolvimento

  • Netmiko Timing: Use send_command_timing se o equipamento tiver prompts complexos ou lentidão.
  • Regex: Teste suas expressões regulares com outputs reais variados para garantir robustez.
  • Cache: O decorador @cache_response em utils/cache.py já trata cache por URL (host distinto = cache distinto).