Ad Widget

Collapse

Отчет о доступночти с помощью Python

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • Eagle2000
    Junior Member
    • Jul 2020
    • 1

    #1

    Отчет о доступночти с помощью Python

    Приветствую коллеги,
    появилась задача сделать отчет по доступности сетевого оборудования за определенный период. В самом 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
Working...