Создание отчетов в GLPI

С некоторого времени в нашей компании в качестве Helpdesk системы используется GLPI. Про саму систему можно почитать здесь.
Конечно, бесспорными плюсами GLPI является ее бесплатность и открытость кодов, а также достаточно большое количество различных плагинов – об одном из них и пойдет речь.
При работе мы с вами естественно используем рекомендации ITIL, а они предполагают, что все надо измерять и оценивать. Так вот в GLPI не хватает хорошей системы отчетности.
Изначально в GLPI (v.0.80.2) встроено 4 отчета по тикетам:
  • Global
  • By ticket
  • By item
  • By hardware

Этой статистики не совсем достаточно.

Нашел плагин Reports для GLPI, установил и добавилось еще несколько отчетов для GLPI — один из наиболее интересных: Tickets opened at night, sorted by priority. Данный отчет позволяет определять, сколько заявок у Вас было в определенный промежуток времени на протяжении заданного периода (правда, пришлось опять же внести для удобства небольшое изменение в код). Например, мне очень интересно, сколько заявок у меня создавалось в сентябре 2011 г. ночью — соответственно вводим диапазон дат и времени и получаем отчет.
Внесенные изменения:

В отчет Tickets opened at night, sorted by priority:

Строка 82: WHERE `glpi_tickets`.`status` NOT IN ('new') ".

Вместо строки:

WHERE `glpi_tickets`.`status` NOT IN ('solved', 'closed') ".


Плагин Reports также интересен со стороны создания новых собственных отчетов.
Не буду рассматривать простые отчеты (вывод в одну таблицу) — они легко генерируется с использованием функции SimpleReport.

Рассмотрим создание сводного отчета — вывод в несколько отдельных таблиц на одной странице (это удобно с точки зрения наглядности).

Отчет будет называться KPI – в нем мы будем подсчитывать кол-во обращений пользователей в период времени, кол-во тикетов решенных удаленно, на месте и эскалированных.

1. Сначала установите плагин Reports.
2. Далее в папке \glpi\plugins\reports\report\ создаем папку statkpi (приставка stat необходима, чтобы отчет отображался в разделе Assistance-Statistics, а не Reports – просто нам так удобнее).
3. В этой папке создаем файлик statkpi.php (если вас интересует перевод на другие языки лучше дополнительно создавать файлы локализации и все названия читать из них).
4. Копируем шапку из другого отчета:

<?php
$USEDBREPLICATE=1;
$DBCONNECTION_REQUIRED=0;
define('GLPI_ROOT', '../../../..');
include (GLPI_ROOT . "/inc/includes.php");
$report = new PluginReportsAutoReport();


5. Далее я добавил экземпляр класса PluginReportsDateIntervalCriteria, чтобы самому накладывать критерии времени.

$dt = new PluginReportsDateIntervalCriteria($report, '`glpi_tickets`.`date`', $LANG["reports"][60]);

6. Отображаем форму для установления отчетного периода и проверяем валидность заполнения:

$report->displayCriteriasForm();
$display_type = HTML_OUTPUT;
if ($report->criteriasValidated())


7. Далее начинаем формировать отчет (получаем название)

{
$report->setSubNameAuto();
$title = $report->getFullTitle();


8. Получаем переменные начала и окончания периода, а также идентификатор нашей организации:

$stdate=$dt->getStartDate();
$findate=$dt->getEndDate();
$ent=$CFG_GLPI["entity"];


9.Составляем запрос к mysql базе (пользователи выбираются только те, чье имя начинается на ‘ru’ и предварительно созданы типы решений для тикетов — для своей компании поправьте):

$sql = "SELECT (select name from glpi_entities where id=$ent) as 'entity',
(select count(id) from glpi_users where is_active=1 and name like 'ru%') as 'users',
(select count(id) from glpi_tickets where date >= '$stdate' and date <= '$findate') as 'id3',
(select count(id) from glpi_tickets where date >= '$stdate' and date <= '$findate')/(select count(id) from glpi_users where is_active=1 and name like 'ru%') as 'avg',
(select count(id) from glpi_tickets where date >= '$stdate' and date <= '$findate' and ticketsolutiontypes_id = 5) as 'onsite',
(select count(id) from glpi_tickets where date >= '$stdate' and date <= '$findate' and ticketsolutiontypes_id = 4) as 'servicedesk',
(select count(id) from glpi_tickets where date >= '$stdate' and date <= '$findate' and ticketsolutiontypes_id = 6) as 'escalated'";


10. Выполняем запрос к базе и вытаскиваем переменные из результата:

$result_sql = mysql_query ($sql);
$result_row=mysql_fetch_array($result_sql, MYSQL_ASSOC);
$entity = $result_row['entity'];
$users = $result_row['users'];
$tickets = $result_row['id3'];
$avg = $result_row['avg'];
$tickets_onsite = $result_row['onsite'];
$onsite_ratio = round($tickets_onsite/$tickets*100, 1);
$onsite_ef = round($tickets_onsite/$users, 1);
$tickets_servicedesk = $result_row['servicedesk'];
$servicedesk_ratio = round($tickets_servicedesk/$tickets*100, 1);
$servicedesk_ef = round($tickets_servicedesk/$users, 1);
$tickets_escalated = $result_row['escalated'];
$escalated_ratio = round($tickets_escalated/$tickets*100, 1);
$escalated_ef = round($tickets_escalated/$users, 4);


11. И рисуем таблицы (у нас их 3 пока) — код достаточно длинный, так что он находится в отдельном файле. Естественно, это всего лишь пример создания своего отчета – может кому-то поможет.

AdBlock похитил этот баннер, но баннеры не зубы — отрастут

Подробнее
Реклама

Комментарии 0

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое