Загрузить изображение для проекта: 'Citeck Community'
  1. Citeck Community
  2. ECOSCOM-3495

Add timers support in ecos-process

    XMLWordДля печати

Детали задачи

    • Icon: История История
    • Решение: Готово
    • Icon: High High
    • Community 3.19.0
    • Не заполнено
    • Не заполнено
    • Не заполнено

    Описание

      1. Добавить сущность таймера и сервис для работы с таймерами:

      {
             "id": EntityUuid, <- идентификатор с тенантом и UUID. Описан в ecos-process
             "retryCounter": 0, <- количество повторений, которые были уже выполнены (повторение начинается если при выполнении команды мы получили ошибку).
             "triggerTime": "2020-04-10T00:00:00Z", <- время когда таймер должен сработать
             "active": true, <- флаг активности
             "command": {<- команда для выполнения при срабатывании таймера
                  "id": String,
                  "targetApp": String,
                  "type": String,
                  "body": JsonNode     
             },        
             "result": {...} <- результат выполнения команды
      }

      2. Добавить команду на создание таймера (за примерами см. ru\\citeck\\ecos\\process\\service
      commands):

      {
             "retryCount": 10,
             "triggerTime": "2020-04-10T00:00:00Z",
             "command": {<- команда для выполнения при срабатывании таймера
                  "id": String,
                  "targetApp": String,
                  "type": String,
                  "body": JsonNode     
             }
      }

      Ответ:

      {
        "timerId": String
      }

      3. Добавить джобу, которая раз в минуту (при этом если предыдущий запуск не завершился нельзя начинать новый) будет искать все активные таймеры, у которых triggerTime меньше чем текущее время и выполнять команду, которая записана в command через commandsService.

      Если команда выполнилась успешно (errors.size() == 0), то помечаем таймер как не активный (active = false).
      Если команда выполнилась не успешно, то увеличиваем retryCount на 1 и меняем triggerTime на текущее время + 10 минут * retryCount.
      При этом в логах обязательно должно быть сообщение об ошибках выполнения команды.

      Прим. Команда должна выполняться в том же тенанте, который записан в ID таймера

      Статья по командам (не очень подробная) https://citeck.atlassian.net/wiki/spaces/knowledgebase/pages/1129840746/ECOS+Commands

      Вложенные файлы

        Активность

          Люди

            rk:27b18e8b-dfd7-420e-a25d-2f75e7183b68 Nikolay Gerasimenko [X] (Неактивный)
            Pavel.Simonov Pavel Simonov [X] (Неактивный)
            Голоса:
            0 Голосовать за эту задачу
            Наблюдатели:
            2 Начать наблюдение за этой задачей

            Даты

              Создано:
              Обновленo:
              Дата решения:

              Учет времени

                Оценка:
                Первоначальная оценка - 2 дни Первоначальная оценка - 2 дни
                2d
                Осталось:
                Оставшееся время - 0 минуты
                0m
                Затрачено:
                Затраченное время - 2 дни, 4 часы
                2d 4h