3.1 KiB
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:
- Driver Base (
drivers/__init__.py): Define a interface comum (OltDriver). - Implementações (
drivers/nokia.py, etc): Classes concretas que herdam deOltDriver. - 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_timingse 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_responseemutils/cache.pyjá trata cache por URL (host distinto = cache distinto).