Август 27

GLPI и счетчик принтеров

GLPI_72

Долго я бился с тем, чтобы GLPI изменял текущий счетчик страниц сетевых принтеров. Вроде бы мелочь, но все равно приятно, когда видишь, сколько страниц отпечатано от смены до смены картриджа.

Штатно, GLPI этот счетчик не меняет, FusionInventory тоже, хотя на странице FusionInv SNMP в карточке притера есть пункт «total_pages».

Покрутив GLPI со всех сторон, стало ясно, что счетчик этот можно писать прямо в базу — ни на что это не влияет.

Получился вот такой вот shell-скрипт:

#!/bin/bash

msql_u='glpi' #Пользователь mysql
msql_p='glpi' #Пароль mysql
msql_db='support' #Имя БД

mysql -u $msql_u -p$msql_p -D $msql_db -B -N -s -e 'select id,last_pages_counter from glpi_printers where (have_ethernet = 1);'| while read -r line
do
printer_glpi_counter=$(echo $line | awk '{print $2}')
printer_ip=$(mysql -u $msql_u -p$msql_p -D $msql_db -B -N -s -e "SELECT name FROM glpi_ipaddresses WHERE mainitems_id = $(echo $line | awk '{print $1}') AND mainitemtype = 'Printer';")
printer_cur_counter=$(snmpwalk -Ovq -c public -v 1 $printer_ip 1.3.6.1.2.1.43.10.2.1.4.1.1 2>/dev/null)
if [ $printer_cur_counter -gt $printer_glpi_counter ] ;
  then
    mysql -u $msql_u -p$msql_p -D $msql_db -B -N -s -e "UPDATE glpi_printers SET last_pages_counter=$printer_cur_counter,date_mod=NOW() WHERE id=$(echo $line | awk '{print $1}')"
fi
done

 

В кратце:

Используется две таблицы:

  • glpi_printers — содержит имя принтера, коммуникации на его борту (отбираем только сетевые — where (have_ethernet = 1)), счетчики, и кучу прочей информации
  • glpi_ipaddresses — содержит ip-адреса сетевых устройств, их тип, и id этого устройства

Текущий счетчик страниц получаем с принтера по SNMP, сравниваем его с текущим в GLPI и если он больше — записываем в базу и меняем дату изменения записи.

Все просто)

Рубрика: Linux | LEAVE A COMMENT