Описание счетчиков времени

Счетчики времени предназначены для определения временных характеристик объекта.

Счетчики времени используются:

  • при расчете временных характеристик объекта;
  • при настройке эскалации — каждая схема эскалации связана с одним счетчиком времени, с помощью которого определяются критичные временные границы уровней эскалации.

Счетчики времени инициализируются при создании объекта или смене типа объекта.
Новый счетчик времени не инициализируется и не рассчитывается для уже существующих объектов.

Параметры счетчика времени

Метрики

Способ учета времени для счетчика (прямой или обратный отсчет времени, с учетом класса обслуживания или без) определяется метрикой:

  • Астрономическое время — метрика предназначена для учета времени вне зависимости от класса обслуживания. Активный счетчик с метрикой "Астрономическое время" отсчитывает время согласно настроенным условиям отсчета по астрономическому времени. Счетчик изменяет свое значение на минуту, каждую минуту.
  • Время обслуживания — метрика предназначена для отсчета времени с учетом класса обслуживания.

    Активный счетчик с метрикой "Время обслуживания" отсчитывает время согласно настроенным условиям отсчета по классу обслуживания:

    • в рабочее время счетчик изменяет свое значение на минуту, каждую минуту;
    • в нерабочее время значение счетчика не изменяется.
  • Запас времени обслуживания — метрика предназначена для отсчета в обратном порядке до нуля определенного целевого промежутка времени согласно классу обслуживания:

    • в рабочее время значение счетчика уменьшается на минуту, каждую минуту;
    • в нерабочее время значение счетчика не изменяется.

    В жизненном цикле счетчика добавляется дополнительное состояние "Кончился запас времени".

При настройке счетчика времени, в зависимости от метрики, используются параметры "Часовой пояс", "Класс обслуживания" и "Промежуток времени", см. подробное описание часовых поясов и классов обслуживания.

Как значения данных параметров указываются атрибуты класса /типа объект, для которого создается счетчик:

  • В классе "Запрос" (serviceCall) по умолчанию имеются атрибуты "Часовой пояс" (timeZone), "Класс обслуживания" (serviceTime) и атрибуты типа "Временной интервал" для заполнения параметра, например, "Нормативное время на решение" (resolutionTime).
  • Для всех остальных классов/типов перед настройкой счетчика необходимо добавить данные атрибуты, см. Настройка атрибутов класса и типа объектов.

Не рекомендуется использовать для настройки счетчика времени вычислимые атрибуты, их использование не гарантирует корректную работу счетчиков.

Тип условия

Тип условия определяет условия смены статусов жизненного цикла счетчика времени: по скрипте или по смене статуса.

Создание счетчика времени, с условием отсчета "По смене статуса", доступно для объектов класса "Запрос" (serviceCall) и объектов с жизненным циклом.

Системные и пользовательские счетчики времени

Счетчики делятся на два вида — системные и пользовательские:

  • Системные счетчики времени задействованы в логике работы приложения для обработки запросов. Системные счетчики можно редактировать, но нельзя удалить или перевести в архив.
  • Пользовательские счетчики могут создаваться при необходимости использовать дополнительные временные характеристики.

Системные счетчики времени:

  • "Время обработки запроса" (processingTime) — cчитается время, затраченное на выполнение запроса с учетом класса обслуживания.

    Счетчик используется в классе "Запрос" (serviceCall) для вычисления атрибута "Время обработки запроса" (processingTimeTimer).

    Параметры счетчика:

    • Метрика: "Время обслуживания";
    • Условие смены состояния: "По смене статуса";
    • Учитывает время в состояниях: "Зарегистрирован" (registered) и "Возобновлен" (resumed).
  • "Запас нормативного времени обслуживания" (timeAllowance) — cчитается запас времени обслуживания с учетом класса обслуживания.

    Счетчик используется в классе "Запрос" (serviceCall) для вычисления атрибута "Регламентное время решения" (timeAllowanceTimer).

    Параметры счетчика:

    • Метрика: "Запас времени обслуживания";
    • Условие смены состояния: "По смене статуса";
    • Учитывает время в состояниях: "Зарегистрирован" (registered) и "Возобновлен" (resumed).
  • "Суммарное время обработки" (totalTime) — cчитается время, проведенное запросом во всех статусах, кроме "Закрыт" (closed) или другого конечного статуса с учетом класса обслуживания.

    Счетчик используется в классе "Запрос" (serviceCall) для вычисления атрибута "Счетчик суммарного времени обработки запросов" (totalTimeTimer).

    • Метрика: "Время обслуживания";
    • Условие смены состояния: "По смене статуса";
    • Учитывает время в состояниях: "Зарегистрирован" (registered), "Разрешен" (resolved), "Возобновлен" (resumed).

Жизненный цикл счетчика времени

После создания счетчик времени проходит определенный жизненный цикл. Смена статусов счетчика выполняется по скрипту или при смене статуса объекта, для которого создан счетчик.

Статусы жизненного цикла счетчика времени:

  • Ожидает начала (NOTSTARTED, сокращенно n) — счетчик создан, условия начала отсчета не выполнены, отсчет времени не производится.
  • Активен (ACTIVE, сокращенно a) — выполнены условия начала или возобновления отсчета, производится отсчет времени.

    Условия начала отсчета:

    • выполнен скрипт, указанный в поле "Условие начала отсчета";
    • объект переходит в первый возможный (согласно настройке жизненного цикла объекта) статус из группы "Учитывать время в статусах".

    Условия возобновления отсчета:

    • выполнен скрипт, указанный в поле "Условие возобновления отсчета";
    • объект переходит из статуса без группы (при настройке счетчика статус не включен в группы в параметрах "Учитывать время в статусах" и "Останавливать счетчик в статусах"), в статус из группы "Учитывать время в статусах".
  • Приостановлен (PAUSED, сокращенно p) — выполнены условия приостановки отсчета, отсчет времени не производится, значение счетчика запоминается и не изменяется.

    Условия приостановки отсчета:

    • выполнен скрипт, указанный в поле "Условие приостановки отсчета";
    • объект переходит из статуса, включенного в группу "Учитывать время в статусах", в статус без группы (при настройке счетчика статус не включен в группы в параметрах "Учитывать время в статусах" и "Останавливать счетчик в статусах").
  • Остановлен (STOPPED, сокращенно s) — выполнены условия остановки отсчета времени, отсчет времени остановлен.

    Статус "Остановлен" — это конечный статус жизненного цикла объекта, из этого статуса счетчик не может быть возобновлен.

    Условия остановки отсчета:

    • выполнен скрипт, указанный в поле "Условие окончания отсчета";
    • объект переходит в один из статусов группы "Останавливать счетчик в статусах". Если в поле "Останавливать счетчик в статусах" не указано ни одного значения, то счетчик не останавливается.
  • Кончился запас времени (EXCEED, сокращенно e) — счетчик досчитал указанный промежуток времени до 0 (для счетчика с метрикой "Запас времени обслуживания").

Отображение счетчика времени в интерфейсе оператора

Для отображения значений счетчика времени в интерфейсе оператора используются атрибуты типа "Счетчик времени" и "Счетчик времени (обратный)". С одним счетчиком времени может быть связано несколько атрибутов, в различном представлении для отображения.

Счетчик времени указывается при добавлении атрибута и не может быть изменен при редактировании атрибута.

Особенности заполнения значений атрибутов "Счетчик времени" и "Счетчик времени (обратный)": значение атрибута заполняется только у объектов, созданных после добавления атрибута. Значение атрибута у уже существующих объектов остается пустым.

Поведение счетчиков времени при изменении параметров счетчика

Счетчики времени с метрикой "Время обслуживания"

Перерасчет временных характеристик, связанных с данным счетчиком, уже существующих объектов не производится.

После изменения класса обслуживания и/или часового пояса новые параметры будет учитываться при расчете временных характеристик в объектах, созданных после внесения изменений в настройки счетчика.

Счетчики времени с метрикой "Запас времени обслуживания"

Изменение часового пояса и/или промежутка времени

После изменения часового пояса и/или промежутка времени новые параметры будут учитываться при расчете временных характеристик в объектах, созданных после внесения изменений в настройки счетчика.

Изменение класса обслуживания

Пересчет временных характеристик при смене класса обслуживания зависит от параметра "Разрешить пересчет временных характеристик при смене класса обслуживания объекта".

  • Если флажок включен:

    • Если флажок включен до того, как объекты, у которых счетчик активен, созданы в системе, то при смене класса обслуживания объекта производится пересчет временных характеристик. Все интервалы активности счетчиков сохраняются в базе данных.
    • Если флажок включен после того, как объекты созданы в системе, и их счетчик был активен какое-то время до включения параметра, то интервалы активности счетчика до включения данного параметра не сохраняются в базе данных, и счетчик начинает отсчет с момента включения параметра.
  • Если параметр выключен, то при смене класса обслуживания объекта пересчет регламентного времени не производится. Все интервалы активности счетчиков не учитываются в базе данных.

Изменение класса обслуживания и нормативного времени обработки

При одновременном изменении класса обслуживания и нормативного времени обработки сначала производится пересчет временных характеристик, связанный с изменением класса обслуживания, а затем пересчет, связанный с изменением нормативного времени обработки.

Согласно настройкам счетчика времени, вычисляются периоды активности счетчика времени. На вычисленные периоды активности счетчика накладываются периоды обслуживания нового класса обслуживания и рассчитывается значение счетчика на момент изменения класса обслуживания объекта.

При перерасчете новое нормативное время обработки объекта сравнивается с текущим значением счетчика времени:

  • Если текущее значение счетчика меньше нового времени обработки (счетчик времени не достиг нуля), то счетчик времени продолжает отсчет;
  • Если текущее значение счетчика больше нового нормативного времени обработки (при перерасчете счетчик времени уже достиг нуля) и в параметрах счетчика включен флажок "Разрешить возобновление счетчика из статуса "Кончился запас времени" при изменении значения промежутка времени в объекте", то проверяется условие возобновления счетчика:

    • Если "Новое нормативное время - (Старое нормативное время + Время просрочки)" > 0, то счетчик возобновляет отсчет времени. Новая дата остановки счетчика = текущая дата /время + (Новое нормативное время - (Старое нормативное время + Время просрочки)).
    • Если "Новое нормативное время - (Старое нормативное время + Время просрочки)" <= 0, то счетчик остается в статусе "Кончился запас времени" и объект считается просроченным.

    Время просрочки (время от перехода счетчика в статус "Кончился запас времени" до текущей даты /времени) считается с учетом класса обслуживания по условиям смены статуса и по условиям, определенным в скриптах.

    Пересчет временных характеристик может выполниться некорректно для тех объектов, у которых счетчик времени перешел в статус "Кончился запас времени" до включения флажка "Разрешить возобновление счетчика из статуса "Кончился запас времени" при изменении значения промежутка времени в объекте".

  • Если текущее значение счетчика больше нового времени обработки (при перерасчете счетчик времени уже достиг нуля) и в параметрах счетчика отключен флажок "Разрешить возобновление счетчика из статуса "Кончился запас времени" при изменении значения промежутка времени в объекте", то счетчик времени останавливает отсчет и переходит в статус "Кончился запас времени", объект считается просроченным.

Состояние счетчика времени в базе данных меняется при изменении состояния объекта, от которого зависит счетчик времени, например, объект перешел в статус, в котором счетчик должен остановиться.
Следовательно, корректной является следующая ситуация — если счетчик времени перешел в статус "Кончился запас времени", то при получении статуса счетчика через utils.get('UUID объекта').codeBackTimer возвращается статус EXCEED, а при получении статуса из базы данных sql- или hql-запросом возвращается статус ACTIVE.
Регулярное обновление значений счетчиков в базе данных можно включить в конфигурационном файле dbaccess.properties (параметры ru.naumen.core.server.timerStatusChangeHandler.enable и ru.naumen.core.server.timerStatusChangeHandler.timerStatusChangeDelay).