4.3.9. TaskStatus

Описание

Метод возвращает статус задачи по ее task_ids и позволяет отслеживать этап, на котором задача находится в данный момент.

Запрос

{
  "user_id":(number),
  "methods":[
    {
      "method":"TaskStatus",
      "params":{
        "project_id":(number),
        "task_ids":' id1 | [id1,id2] | "*" ',
        "detailed_test_results":(boolean),
        "restart_chain":(string)
      }
    }
  ]
}

где:

  • user_id — целое число, идентификатор пользователя;

  • project_id — целое число, идентификатор проекта пользователя;

  • task_ids — идентификаторы задач, поле может задаваться в одном из следующих форматов:

    • id1 — целое число, идентификатор задачи,

    • [id1,id2] — массив целых чисел, идентификаторы задач,

    • "*" — строка, символ «звездочки», запрос информации обо всех запущенных задачах, а также задачах в очереди.

  • detailed_test_results (опциональное поле) — логический тип, управляет уровнем детализации результатов тестов в поле test_results:

    • true — метод вернет результаты для каждой группы тестов отдельно, а также суммарный результат тестов total. Список групп тестов: file_summary, container_validation, video_parameters, audio_parameters, video_quality и audio_quality,

    • false (значение по умолчанию) — метод вернет только суммарный результат тестов.

  • restart_chain (опциональное поле) — строка, управляет отображением статусов для цепочки перезапущенных задач. Возможные значения: first, last, exact, all (значение по умолчанию).

    О цепочке перезапусков

    Задачи с одинаковым initial_task_id образуют в ответе группу-цепочку перезапущенных задач. Это задачи со статусом Stalled, автоматически отправленные на повторную проверку. В настройках проекта задан сценарий автоматического перезапуска задач со статусом Stalled, по умолчанию перезапуск задач включен, количество перезапусков — 3. Изменить сценарий можно в настройках проекта (описание приведено в разделе Перезапуск Stalled задач) либо с помощью метода ProjectSettingsChange. При каждом перезапуске создается новая задача с новым task_id, но значение initial_task_id у всех задач цепочки одинаковое и равно task_id исходной задачи.

    Таким образом, initial_task_id позволяет:

    • найти все перезапуски, относящиеся к одной исходной задаче;

    • отследить, была ли задача в итоге выполнена (успешно или нет) после всех попыток перезапуска.

    Параметр restart_chain определяет, статус каких задач из цепочки вернуть:

    1. first — статус только исходной (самой первой) задачи в цепочке. Информация о перезапусках не включается.

    2. last — статус только последней задачи в цепочке. Промежуточные перезапуски не отображаются.

    3. exact — статус только для конкретного task_id, указанного в запросе. Полезен, если нужно проверить статус конкретной задачи (например, промежуточного перезапуска).

    4. all (значение по умолчанию) — статусы всех задач, входящих в цепочку (исходная задача и все ее перезапуски).

Ответ

{
  "reply":[
    {
      "method":"TaskStatus",
      "result":[
        {
          "task_id":(number),
          "uri":(string),
          "name":(string),
          "status":(string),
          "initial_task_id":(number),
          "progress":(number),
          "test_results":{
            "ok":(number),
            "warning":(number),
            "error":(number),
            "fatal":(number),
            "result":(string)
          },
          "task_page":(string),
          "requested_task_ids":[]
        }
      ],
      "errors":[(string)]
    }
  ]
}

где:

  • task_id — целое число, идентификатор пользователя;

  • uri — строка, путь к анализируемому файлу;

  • name — строка, имя файла;

  • status — строка, статус, отражает этап, на котором находится задача. Список статусов:

    • Scheduled — задача создана и добавлена в очередь на запуск. Далее статус изменяется на один из описанных ниже,

    • Explore — задача отправлена на предварительный анализ зонду,

    • Running — задача запущена,

    • Completed — задача выполнена,

    • Rejected — запуск задачи был отклонен. Информацию о причине можно найти в web–интерфейсе в блоке Dashboard → Незавершенные задачи. Возможные причины:

      • Общая длительность медиафайла составила 0 секунд или зонд не смог определить длительность,

      • Медиафайл не найден по указанному пути URI,

      • Медиафайл не соответствует обязательным требованиям шаблона проверки. В настройках шаблона включена опция Прерывать анализ при несоответствии для тестов формата контейнера, формата видео или формата аудио. Отключить опцию можно в настройках шаблона,

      • Неподдерживаемый формат медиафайла;

      • Доступ к проверке медиафайлов временно приостанавливается, если лицензионный баланс полностью исчерпан или его остаток меньше длительности файла, отправленного на проверку. Более подробно принцип расходования пакета лицензионных часов описан здесь.

    • Canceled — задача была остановлена. Возможные сценарии:

      • задача была остановлена пользователем в web-интерфейсе или с помощью метода TaskStop. Источник остановки будет также указан на странице Dashboard → Незавершенные задачи,

      • задача была остановлена балансировщиком нагрузки в процессе вытеснения ввиду наличия задачи с приоритетом Immediate. Более подробно работа балансировщика и описание приоритетов описаны на странице Dashboard.

    • Stalled — задача остановлена некорректно. Сервер перестал получать данные анализа, но команда на остановку задачи не была получена. Обычно это связано с потерей связи сервера с зондом или некорректным завершением работы зонда. В этом случае система перезапустит задачу 3 раза (по умолчанию). Сценарий автоматического перезапуска задач можно изменить в настройках проекта ➝ в блоке Перезапуск Stalled задач.

  • initial_task_id — целое число, идентификатор группы задач в рамках цепочки перезапусков. Для любой задачи в группе — включая первую — initial_task_id равен task_id са́мой первой задачи. Если перезапусков не было, initial_task_id совпадает с task_id само́й задачи;

  • progress — целое число, отражает ход выполнения задачи в процентах. Прогресс выводится для задач со статусами Running и Completed;

  • test_results — в зависимости от значения detailed_test_results в запросе, ответ метода включает суммарный результат тестов:

    • ok — целое число, количество тестов без ошибок,

    • warning — целое число, количество тестов с уровнем критичности warning, в которых обнаружена хотя бы одна ошибка,

    • error — целое число, количество тестов с уровнем критичности error, в которых обнаружена хотя бы одна ошибка,

    • fatal — количество тестов с уровнем критичности fatal, в которых обнаружена хотя бы одна ошибка,

    или отдельный результат для каждой группы тестов:

    • file_summary,

    • container_validation,

    • video_parameters,

    • audio_parameters,

    • video_quality,

    • audio_quality,

    • total (суммарный результат тестов).

  • result — строка, результат выполненной задачи:

    • Passed — строка, задача успешно выполнена, ошибок не обнаружено,

    • Warning — строка, задача выполнена, отчет содержит ошибки с уровнем критичности warning,

    • Failed — строка, задача выполнена, отчет содержит ошибки с уровнем критичности error или fatal.

  • task_page — строка, адрес web-страницы задачи;

  • requested_task_ids — массив целых чисел, идентификаторы запрошенных задач;

  • errors — массив строк, возвращает перечень ошибок.

Пример

Запрос утилитой cURL
#1. Простой запрос статуса одной задачи.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2213]}}]}'

#2. Пример, в котором дополнительно передается поле detailed_test_results:true.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2213],"detailed_test_results":true}}]}'

#3. Запрос статуса для трех задач с task_id 2213, 2222, 2288. Для третьей задачи задано заведомо несуществующее значения в поле task_ids.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2213,2222,2288]}}]}'

#4. Запрос статуса для трех задач с task_id 2213, 2222, 2247. Третья задача получила статус Stalled и была автоматически перезапущена дважды.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2213,2222,2247],"detailed_test_results":false,"restart_chain":"all"}}]}'

#5. Запрос статуса задачи с task_id 2247 со статусом Stalled и параметром restart_chain = all.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2247],"detailed_test_results":false,"restart_chain":"all"}}]}'

#6. Запрос статуса задачи с task_id 2247 со статусом Stalled и параметром restart_chain = first.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2247],"detailed_test_results":false,"restart_chain":"first"}}]}'

#7. Запрос статуса задачи с task_id 2247 со статусом Stalled и параметром restart_chain = last.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2247],"detailed_test_results":false,"restart_chain":"last"}}]}'

#8. Запрос статуса задачи с task_id 2248 со статусом Stalled и параметром restart_chain = exact.
curl http://172.16.1.41/ctrl_api/v1/json \
 -H "Content-Type: application/json" \
 --data '{"user_id":1,"methods":[{"method":"TaskStatus","params":{"project_id":2,"task_ids":[2248],"detailed_test_results":false,"restart_chain":"exact"}}]}'
Ответ на запрос из примера #1
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2213,
          "uri": "file:///mnt/VoD_storage/sample1.mp4",
          "name": "",
          "status": "Completed",
          "initial_task_id": 2213,
          "progress": 100,
          "test_results": {
            "ok": 36,
            "warning": 1,
            "error": 12,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/17/tasks/2213",
          "requested_task_ids": [2213]
        }
      ]
    }
  ]
}
Ответ на запрос из примера #2
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2213,
          "uri": "file:///mnt/VoD_storage/sample1.mp4",
          "name": "",
          "status": "Completed",
          "initial_task_id": 2213,
          "progress": 100,
          "test_results": {
            "file_summary": {
              "ok": 9,
              "warning": 1,
              "error": 2
            },
            "container_validation": {
              "ok": 5,
              "error": 1
            },
            "video_parameters": {
              "ok": 16,
              "error": 6
            },
            "audio_parameters": {
              "ok": 3,
              "error": 2
            },
            "video_quality": {
              "ok": 1,
              "error": 1
            },
            "audio_quality": {
              "ok": 2
            },
            "total": {
              "ok": 36,
              "warning": 1,
              "error": 12
            },
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/17/tasks/2213",
          "requested_task_ids": [
            2213
          ]
        }
      ]
    }
  ]
}
Ответ на запрос из примера #3
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2222,
          "uri": "file:///mnt/VoD_storage/sample2.mp4",
          "name": "Test2",
          "status": "Completed",
          "progress": 100,
          "test_results": {
            "ok": 37,
            "warning": 1,
            "error": 8,
            "fatal": 1,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/17/tasks/2222"
        },
        {
          "task_id": 2213,
          "uri": "file:///mnt/VoD_storage/sample1.mp4",
          "name": "",
          "status": "Completed",
          "progress": 100,
          "test_results": {
            "ok": 36,
            "warning": 1,
            "error": 12,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/17/tasks/2213"
        },
      ],
      "errors": [
        "Requested task IDs do not exist: [2288]"
      ]
    }
  ]
}
Ответ на запрос из примера #4
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2213,
          "uri": "file:///mnt/VoD_storage/sample1.mp4",
          "name": "",
          "status": "Completed",
          "initial_task_id": 2213,
          "progress": 100,
          "test_results": {
            "error": 12,
            "ok": 36,
            "warning": 1,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/17/tasks/2213",
          "requested_task_ids": [
            2213
          ]
        },
        {
          "task_id": 2222,
          "uri": "file:///mnt/VoD_storage/sample2.mp4",
          "name": "",
          "status": "Completed",
          "initial_task_id": 2222,
          "progress": 100,
          "test_results": {
            "ok": 37,
            "error": 8,
            "warning": 1,
            "fatal": 1,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/17/tasks/2222",
          "requested_task_ids": [
            2222
          ]
        },
        {
          "task_id": 2249,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Completed",
          "initial_task_id": 2247,
          "progress": 100,
          "test_results": {
            "error": 24,
            "ok": 28,
            "warning": 1,
            "fatal": 2,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/1/tasks/2249",
          "requested_task_ids": [
            2247
          ]
        },
        {
          "task_id": 2247,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Stalled",
          "initial_task_id": 2247,
          "requested_task_ids": [
            2247
          ]
        },
        {
          "task_id": 2248,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Stalled",
          "initial_task_id": 2247,
          "requested_task_ids": [
            2247
          ]
        }
      ],
    }
  ]
}
Ответ на запрос из примера #5
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2247,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Stalled",
          "initial_task_id": 2247,
          "requested_task_ids": [
            2247
          ]
        },
        {
          "task_id": 2248,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Stalled",
          "initial_task_id": 2247,
          "requested_task_ids": [
            2247
          ]
        },
        {
          "task_id": 2249,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Completed",
          "initial_task_id": 2247,
          "progress": 100,
          "test_results": {
            "error": 24,
            "ok": 28,
            "warning": 1,
            "fatal": 2,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/1/tasks/2249",
          "requested_task_ids": [
            2247
          ]
        }
      ]
    }
  ]
}
Ответ на запрос из примера #6
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2247,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Stalled",
          "initial_task_id": 2247,
          "requested_task_ids": [
            2247
          ]
        }
      ]
    }
  ]
}
Ответ на запрос из примера #7
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2249,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Completed",
          "initial_task_id": 2247,
          "progress": 100,
          "test_results": {
            "error": 24,
            "ok": 28,
            "warning": 1,
            "fatal": 2,
            "result": "Failed"
          },
          "task_page": "http://172.16.1.41/projects/2/apps/1/tasks/2249",
          "requested_task_ids": [
            2247
          ]
        }
      ]
    }
  ]
}
Ответ на запрос из примера #8
{
  "reply": [
    {
      "method": "TaskStatus",
      "result": [
        {
          "task_id": 2248,
          "uri": "file:///mnt/VoD_storage/sample3.mp4",
          "name": "Test Stalled",
          "status": "Stalled",
          "initial_task_id": 2247,
          "requested_task_ids": [
            2248
          ]
        }
      ]
    }
  ]
}