Приветствую коллеги,
появилась задача сделать отчет по доступности сетевого оборудования за определенный период. В самом Zabbix порылся, но не нашел, решил поискать на Хабре. Человек делал подобные вещи
https://habr.com/ru/post/325876/
Решил подредактировать скрипт, но он не работает, где ошибка, не пойму.
появилась задача сделать отчет по доступности сетевого оборудования за определенный период. В самом Zabbix порылся, но не нашел, решил поискать на Хабре. Человек делал подобные вещи
https://habr.com/ru/post/325876/
Решил подредактировать скрипт, но он не работает, где ошибка, не пойму.
Code:
from pyzabbix import ZabbixAPI
import time
import sys
z = ZabbixAPI('http://192.168.1.60/zabbix', user='user1', password='user1@')
groupid = 78 #Switches
hosts = z.host.get(groupids = groupid , output = ['hostid','name'])
#Список имен хостов
host_names = [host['name'] for host in hosts]
#Список идентификаторов
host_ids = [host['hostid'] for host in hosts]
nameindex = 0
#Константа, кол-во секунд в сутках
increment = 60*60*24
for host_id in host_ids:
#параметр search позволяет найти все items, в имени которых есть заданная строка
items = z.do_request(z.item.get(host_ids=(host_id), output = ['itemid','name'], search = {'name': 'ping'}))
#массив найденных пингов
ping_ids = [item['itemid'] for item in items['result']]
#длина массива соответствует кол-ву дисков
num_ping = len(ping_ids)
avg_list=[]
#цикл подсчета среднего для каждого пинга
for ping in ping_ids:
#для определения временных рамок используется функция из time
#первый день, за который нужна статистика - 01 января 2021 года, с 0:00 до 23:59:59
time_from = time.mktime((2021, 1, 1, 0, 0, 0, 0, 0, 0))
time_till = time.mktime((2021, 1, 1, 23, 59, 59, 0, 0, 0))
history_sum = 0
history_len = 0
#цикл для 31 дня
for day in range(0,31):
data = z.history.get(history = 0, itemids=ping, time_from=time_from, time_till=time_till)
#массив содержит список значений из истории
graph = [float(item['value']) for item in data]
#если список не пустой, добавляем его в массив для вычисления среднего
if(len(graph)!=0):
history_sum+=sum(graph)
history_len+=len(graph)
#увеличиваем интервалы на сутки
time_from += increment
time_till += increment
#если очередь не пустая, добавляем среднее значение по диску в список
if(history_len!=0):
avg_list.append(history_sum/history_len)
else:
avg_list.append(0)
#если список не пустой, берем минимальное значение
if(len(avg_list)>0):
sys.stdout.write(host_names[nameindex])
print (',',num_ping,',',min(avg_list))
nameindex += 1