testes/app/routes/integrazabbix.py

46 lines
1.7 KiB
Python

from flask import Blueprint, jsonify
from .auth import token_required # Importa o decorador de autenticação
from .newzabbix import zapi # Importa a conexão Zabbix
integra = Blueprint('integra', __name__)
def obter_dados_zabbix():
try:
grupos = zapi.hostgroup.get(output="extend")
resultado = []
for grupo in grupos:
hosts = zapi.host.get(groupids=grupo['groupid'], output="extend")
hosts_info = []
for host in hosts:
itens = zapi.item.get(hostids=host['hostid'], output="extend",
filter={"key_": ["system.uptime", "net.if.in", "net.if.out", "vm.memory.size", "vfs.fs.size"]})
metricas = {item['key_']: item.get('lastvalue', 'N/A') for item in itens}
packet_loss = zapi.item.get(hostids=host['hostid'], filter={"key_": "net.ping.loss"}, output="extend")
metricas["net.ping.loss"] = packet_loss[0]['lastvalue'] if packet_loss else 'N/A'
hosts_info.append({
"host_name": host['name'],
"metrics": metricas
})
resultado.append({
"group_id": grupo['groupid'],
"group_name": grupo['name'],
"hosts": hosts_info
})
return resultado, 200
except Exception as e:
return {"error": "Erro ao buscar dados do Zabbix", "details": str(e)}, 500
@integra.route('/zabbix/hosts', methods=['GET'])
@token_required
def hosts_e_metricas(_):
dados, status_code = obter_dados_zabbix()
return jsonify(dados), status_code