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