Уведомления по расписанию


#1

Всем привет!

Есть бизнес-задача: раз в сутки уведомлять кастомеров об окончании срока аренды оборудования письмом на электронную почту.

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

  • Добавлять LifeCycle в PhysicalDevice
  • Добавлять StopWatch’ в PhysicalDevice
  • Писать свой триггер
  • Использовать объекты с LifeCycle (например тикеты)
  • Интегрировать с внешним сервисом (например, тупо скриптом по крону получать выборку и что-то с ней делать)

Буду признателен за помощь.


#2

Привет, @gabell!

Задача интересная, и способов её решения есть много, тут кто на что учился)

Нужно немного уточнить условие: уведомлять об окончании срока аренды конкретного оборудования с указанием его наименования в письме. Это важно, поскольку для того, чтобы в письме вставить какие-то параметры объекта через $this->name$, нужно чтобы триггер сработал именно на этом объекте.

Для себя я выбрал такой вариант: https://github.com/itop-itsm-ru/alarm-clock-attribute. Этот модуль добавляет новый тип поля “Будильник”, который срабатывает в указанное время и может запускать триггер. Там же есть пример.

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


#3

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

@vladimir, да именно так. За код спасибо большое. Постараюсь в ближайшее время посмотреть поподробнее. Похоже на то, что нужно.


#4

@vladimir, что-то не выходит каменный цветок. Установил по инструкции, атрибут, триггер добавил.
Эти куски выполняю в QueryRunner’е -

SELECT {$sClass} WHERE {$sAttCode} < '{$sNow}' AND {$sAttCode}_ac_enabled = 1;
SELECT TriggerOnAlarmClock AS t WHERE t.target_class IN ('$sClassList') AND :attcode REGEXP alarm_clock_attcodes

- все ок, нужные объекты/триггры находит.

Попробовал в лоб: error_log повставлять в код, но что-то ничего не увидел в логах.
К сожалению, я далек от php. Может посоветуете как по-простому подебажить?


#5

@gabell, а что именно не выходит-то?
Cron работает?


#6

Cron работает?

Теперь работает :grin: Спасибо.


#7

:thumbsup:

Будьте внимательны, теоретически большое кол-во объектов с будильником может отрицательно сказаться на производительности. Раз в минуту крон ищет кандидатов на срабатывание и обновляет статус будильника, если он сработал.


#8

Добрый день. Не подскажите как alarm-clock-attribute работает с iTop версии 2.3.3-3159?
Пытался поставить по инструкции, но выдаёт ошибку во время установки.
Failed to process class ‘Person’, from ‘/var/www/profivit.ru/www/datamodels/2.x/itop-config-mgmt’: Field: ‘picture’, (type: AttributeImage), missing (or empty) mandatory tag ‘sql’ under the tag 'field’
Заранее спасибо