46 lines
1.7 KiB
Python
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
|