Micromanager - универсальный менеджер процессов транскодирования и VOD

Содержание:

1. Описание

Micromanager - гибкий менеджер процессов, ориентированный на процессы обработки видеопотоков. Является удобным средством для управления и мониторинга процессами транскодера ffmpeg, сегментера HLS и другими.

Кроме того, micromanager обладает функциями для управления каталогом VOD с функцией инжестирования контента, в т.ч. транскодирования файлов в необходимый формат.

2. Установка, конфигурация и использование

Для работы micromanager необходимо наличие установленных библиотек libjsonrpc, libjson.

Micromanager, а также все сопутствующие пакеты и необходимые библиотеки совместимых версий, поставляются в виде установочных deb-пакетов и устанавливаются утилитой dpkg. См. Где взять.

Для запуска micromanager используется init.d скрипт: /etc/init.d/micromanager:

$ /etc/init.d/micromanager
Usage: /etc/init.d/micromanager {start|stop|restart|force-reload|reload}

Файлы логов по умолчанию сохраняются в /var/log/micromanager/micromanager.log, включена ротация логов через logrotate.d

2.1 Где взять

Для всех
Скачать необходимые инсталляционные пакеты можно в официальном техническом сообществе Microimpuls по ссылке http://forum.micro.im/ в разделе “Дистрибутивы и обновления ПО”.
Для инженеров Microimpuls
При установке ПО на сервер через систему оркестровки все необходимые установочные пакеты актуальных версий скачиваются из репозитория автоматически.

2.2 Конфигурация

Файл конфигурации находится в /etc/micromanager/micromanager.conf, задаётся в формате JSON. Пример:

{
    "log-syslog": false,
    "log-path": "/var/log/micromanager/micromanager.log",
    "log-facility": 0,
    "log-verbose-level": 4,
    "log-foreground": true,

    "log-state-path": "/var/log/micromanager/state.log",
    "log-state-period": 0,

    "json-rpc-enabled": true,
    "json-rpc-listen-host": "0.0.0.0",
    "json-rpc-listen-port": 7089,

    "run-cmd": "%transcoder% -i %src% %ffmpeg-params% -f mpegts udp://@%dsthost%:%dstport%?pkt_size=%payloadsize%",
    "run-cmd-presets": [
        {
            "name": "custom-preset",
            "run-cmd": "/usr/local/bin/ffmpeg -i %src% %ffmpeg-params% -f mpegts udp://@%dsthost%:%dstport%?pkt_size=%payloadsize%"
        }
    ],
    "run-link-stderr": false,

    "transcoder-path": "/usr/local/bin/ffmpeg",
    "ffprobe-path": "/usr/local/bin/ffprobe",

    "vod-directory": "/opt/storage/vod",
    "vod-ingest-directory": "/opt/storage/vod_ingest/",
    "vod-ingestion-path-checking-period": 15,
    "vod-ffmpeg-use-progress": false,
    "vod-default-naming-template": "/%preset_name%/%src_path_wo_ext%.mp4",

    "vod-ingestion-limit": 10,
    "vod-distribution-limit": 10,
    "vod-archive-limit": 10,

    "process-memory-limit": 512000,
    "process-cpu-limit": 0,
    "processes-to-watch": [
        { "name": "ffmpeg", "memory-limit": 512000, "cpu-limit": 150 },
    ],
    "low-bitrate-limit": 150000,
    "low-bitrate-checks": 30,
    "fail-max-probing": 5,
    "priority": 0,
    "streams": [
        {
            "name": "Stream 1",
            "enabled": true,
            //"timeout": 0, // seconds
            //"autostart": true,
            //"run-cmd-preset": "",
            //"run-cmd": "",
            //"process-memory-limit": 1024000,
            //"process-cpu-limit": 250,
            "priority": 1,
            "src": [
                {
                    "name": "ABS-1 stream 1",
                    "enabled": true,
                    "params": [
                        { "name": "src", "value": "udp://@239.1.1.1:1234" },
                        { "name": "ffmpeg-params", "value": "" },
                        // other keys for replacement
                    ]
                }
            ],
            "dst": "239.0.0.5 1234 multicast udp",
            //"m3u8-playlist": "/tmp/playlist.m3u8",
            "payload-size": 1316
        }
    ]
}

2.2.1 Основные параметры

log-syslog bool
Использовать ли службу syslogd для записи логов в /var/log/syslog. Не рекомендуется включать при интенсивном логировании.
log-facility int
Тег в syslog.
log-path str
Путь до лог-файла для логирования напрямую без syslogd.
log-verbose-level int
Уровень логирования от 0 до 5, 5 - максимальный DEBUG уровень.
log-foreground bool
Вывод лога в stdout.
log-state-period int
Период записи лога состояния в минутах. При значении 0 запись отключается. По умолчанию 0.
log-state-path str
Путь до файла в который будет записываться лог состояния.
json-rpc-enabled bool
Включает интерфейс JSON RPC API. Позволяет осуществлять мониторинг и управление процессами.
json-rpc-listen-host str
Адрес интерфейса для ожидания входящих подключений к JSON RPC API. Значение “0.0.0.0” означает слушать на всех интерфейсах.
json-rpc-listen-port int
Номер порта TCP для JSON RPC API, по умолчанию 7089.
run-cmd str
Строка запуска процесса транскодирования, например ffmpeg. В строке запуска можно использовать переменные вида %param%, вместо этих переменных в момент запуска транскодера будут подставлены соответствующие значения, см. params. Вместо переменной %transcoder% будет подставлено значение transcoder-path.
run-cmd-presets list
Дополнительные варианты команд запуска транскодера. Формат пресета команды описан в run-cmd-presets.
run-link-stderr bool

С версии 1.4.5

Для перехвата сообщений об ошибках ffmpeg рекомендуется использовать перенаправление вывода с параметром -nostats вместо данной функции.

Включает перехват потока stderr при запуске процесса. Если при завершении процесс вернёт код, отличный от 0, то из stderr будет прочитано не более 500 байт и записано в лог. Перехват производится только для процессов инжестирования и дистрибьюции. По умолчанию false.

transcoder-path str
Путь до процесса транскодера, например /usr/local/bin/ffmpeg.
ffprobe-path str
Путь до ffprobe или avprobe. Используется для определения мета-информации о видео-файле для VOD.
vod-directory str
Путь до директории VOD, в которой размещаются файлы видеотеки. По умолчанию /var/vod/.
vod-ingest-directory str
Путь до директории инжестирования. В этой директории с заданной периодичностью micromanager проверяет появление новых файлов и запускает для них процесс инжестирования - добавления в каталог VOD. По умолчанию /var/vod_ingest/.
vod-delete-after-autoingestion bool

С версии 1.4.3

Если true, то после успешного автоматического инжестирования исходный файл будет удаляться. Удаления также не будет в случае, если была какая-либо ошибка в ходе дистрибьюции. По умалчанию false.

vod-ingestion-path-checking-period int
Период проверки директории vod-ingest-directory, задаётся в секундах. При значении 0 автоматическая проверка не осуществляется, однако возможен запуск инжестирования через API.
vod-ffmpeg-use-progress bool
Включает экспериментальную возможность использования параметра -progress для получения более подробной информации о процессе инжестирования.
vod-default-naming-template str

Шаблон имени файла в каталоге VOD после инжестирования. Доступны переменные:

  • %preset_name% - название пресета из run-cmd-presets, использоуемого при инжестировании, либо default, если был использован пресет по-умолчанию;
  • %src_full_path_wo_ext% - путь до исходного файла внутри каталога vod-ingest-directory без расширения;
  • %src_full_path% - полный путь до исходного файла внутри каталога vod-ingest-directory;
  • %src_name% - имя исходного файла без расширения;
  • %src_dir% - директория, в которой находится исходный файл относительно каталога vod-ingest-directory.

Пример: /%preset_name%/%src_full_path_wo_ext%.ts.

vod-distribution-enabled bool

С версии 1.4.5

Включает дистрибьюцию ассета после успешного завершения инжестирования. По умолчанию false.

vod-default-distribution-template str

С версии 1.4.5

Шаблона процесса дистрибьюции. По умолчанию "scp %parameters% %full_path% %address%:%destination%". Доступны следующие переменные: - %file_name% - имя ассета без пути, сгенерированное при запуске инжестирования; - %full_path% - полный путь до инжестированного ассета, сгенерированный при запуске из шаблона именования, совпадает с параметром %dstpath% в шаблоне команды инжестирования; - %preset_name% - имя пресета, использованного при инжестировании, или default если был использован пресет по-умолчанию; - %address% - поле адреса; - %parameters% - дополнительные параметры команды.

Параметры %parameters%, %address% и %destination%

vod-distribution-addresses list

С версии 1.4.5

Список адресов дистрибьюции. Формат описан в vod-distribution-addresses.

vod-ingestion-limit int

С версии 1.7.0

Максимальное количество одновременно выполняемых задач инжестирования. Если -1, то неграниченно. По умолчанию -1.

vod-distribution-limit int

С версии 1.7.0

Максимальное количество одновременно выполняемых задач дистрибьюции. Если -1, то неграниченно. По умолчанию -1.

vod-archive-limit int

С версии 1.7.0

Если больше нуля, то определяет количество последних выполненных или отменнённых задач, о которых micromanager будет сохранять информацию. По умолчанию 0.

process-memory-limit int
Лимит потребляемой оперативной памяти в байтах для основного процесса micromanager. По достижению этого лимита процессы транскодирования будут перезапущены.
process-cpu-limit int
Лимит потребляемых ресурсов процессора в процентах для основного процесса micromanager. По достижению этого лимита процессы транскодирования будут перезапущены.
processes-to-watch list
Список процессов, за потреблением CPU и Memory которых будет следить micromanager. Формат описан в processes-to-watch.
low-bitrate-limit int
Порог битрейта выходного потока в bps, ниже которого micromanager примет решение о том, что возникла ошибка и перезапустит процесс транскодера.
low-bitrate-checks int
Количество проверок битрейта выходного потока ниже порогового значения, перед тем как принять решение об ошибке.
fail-max-probing int
Количество проверок отсутствия выходного потока, после которого процесс транскодирования будет перезапущен.
priority int
Приоритет процесса в ОС, 0 - автоматический приоритет по выбору ОС.
streams list
Список транскодируемых потоков. Для каждого потока будет запущен инстанс транскодера по команде run-cmd, либо, если для потока определен run-cmd-preset, то команда из соответствующего пресета. Формат описан в streams.
score-max-cpu-la1 float

С версии 1.4.5

Максимальное значение средней загрузки вычислительных ресурсов за 1 минуту (CPU LA1).

2.2.2 Описание параметра run-cmd-presets

name str
Название пресета, имя default является зарезервированным и не рекомендуется к использованию.
run-cmd str
Команда запуска, идентично run-cmd.
naming-template str
Шаблон имени выходного файла, если пресет используется для транскодирования файла при инжестировании. Идентично vod-default-naming-template. Если данный параметр не задан для пресета, то будет использоваться шаблон по-умолчанию.
distribution-template str
Шаблона процесса дистрибьюции. Аналогично vod-default-distribution-template. Если данный параметр не задан для пресета, то будет использоваться шаблон по-умолчанию.

Примечание: пресет по умолчанию - это пресет, составленный из параметров run-cmd, vod-default-naming-template и vod-default-distribution-template. Имеет имя default и может быть использован при инжестировании.

2.2.3 Описание параметра processes-to-watch

name str
Имя процесса, например ffmpeg. Отслеживание происхдит через команду ps.
memory-limit int
Лимит потребляемой оперативной памяти для процесса, задаётся в байтах. По достижению лимита процесс будет убит.
cpu-limit int
Лимит потребляемых ресурсов процессора для процесса, задаётся в процентах. По достижению лимита процесс будет убит.

2.2.4 Описание параметра streams

Каждому потоку присваивается номер в порядке упоминания его в конфигурации, причём самый первый поток имеет номер 0. Данный номер используется в лог-файле, а также при управлении потоками через API.

name str
Название потока.
enabled bool
Флаг, означающий включен ли процесс транскодирования потока. При значении false процесс для данного потока не будет запущен. По умолчанию true.
autostart bool
Определяет, необходимо ли автоматически запускать процесс транскодирования, либо запускать только по запросу через API. Используется для экономии ресурсов транскодера. По умолчанию true.
timeout int
Определяет таймаут в секундах, после которого в случае неактивности (отсутствия запросов на запуск потока через API) процесс будет остановлен. По умолчанию 0.
run-cmd-preset str
Имя пресета команды запуска транскодера из списка run-cmd-presets. По умолчанию - пустое значение, используется команда из run-cmd.
run-cmd str
Переопределяет параметр run-cmd для конкретного процесса данного потока. По умолчанию - пустое значение.
process-memory-limit int
Переопределяет параметр process-memory-limit для конкретного процесса данного потока. По умолчанию не определен.
process-cpu-limit int
Переопределяет параметр process-cpu-limit для конкретного процесса данного потока. По умолчанию не определен.
priority int
Переопределяет параметр priority для конкретного процесса данного потока. По умолчанию не определен.
src list
Список источников для потока. При задании нескольких источников micromanager будет переключать транскодер на следующий источник при возникшей проблеме в текущем. Механизм можно использовать для резервирования. Формат описан в src.
dst str
Выходной адрес потока. За данным потоком micromanager будет следить, контролируя таким образом работу транскодера. Формат dst описан в документации microporter/libmedia
m3u8-playlist str
Путь до m3u8-плейлиста, который генерирует сегментер. Если не задан dst, но задан этот параметр, то micromanager будет осуществлять проверку существования плейлиста и его обновления новыми чанками и на основании этого делать вывод статусе потока.
payload-size int
Размер одного пакета Multicast-потока. По умолчанию 1316.
2.2.4.1 Описание параметра src
name str
Название источника.
enabled bool
Флаг, определяющий, включен ли источник. По умолчанию true.
params list
Список параметров для процесса транскодера. Значения параметров подставляются в строку запуска транскодера в виде переменных %название_параметра%. Формат описан в params.
2.2.4.2 Описание поля params
name str
Название параметра.
value str
Значение параметра.

2.2.5 Описание параметра vod-distribution-addresses

enabled bool
Включает использование данного адреса при дистрибьюции.
address str
Поле %address% шаблона процесса.
parameters str
Поле %parameters% шаблона процесса.
destination str
Поле %destination% шаблона процесса.

Например, при шаблоне scp %parameters% %full_path% %address%:%destination%/%preset_name%/, пути до файла ассета /var/vod/default/file.ts, использовании пресета по умолчанию и следующих параметрах адреса:

"vod-distribution-addresses": [
  {
    "enabled": true,
    "address": "user@127.0.0.1",
    "destination": "/var/vod/files",
    "parameters": "-i /home/.ssh/id_rsa"
  }
]

команда дистрибьюции будет выглядеть как scp -i /home/.ssh/id_rsa /var/vod/default/file.ts user@127.0.0.1:/var/vod/files/default/.

Примечание 1: дистрибьюция производится последовательно по каждому адресу после окончания инжестирования. Если дистрибьюция по одному из адресов была завершена с ошибкой (дочерний процесс вернул не 0), то дальшейшая обработка ассета будет приостановлена, инжестирование будет считаться неуспешным.

Примечание 2: при использовании scp для дистрибьюции необходимо внести хост в список известных у ssh-клиента.

3. Логирование

3.1. Основной лог-файл

micromanager.log - основной лог-файл. Сообщения имеют вид:

%timestamp% %log_level% %function%[%PID%]: %message%

Пример:

Thu Mar 30 17:30:52 2017 INFO ingestion_thread_handler[29731]: (ED.mp4) ingestion process thread stopped

Возможные уровни сообщений в порядке увеличения детализированности лога (каждый следующий уровень включает в себя предыдущие уровни):

  • CRITICAL - критические ошибки, влияющие непосредственно на работу процесса micromanager: ошибки вызова fork(), popen() и link(), обработки сигналов и прочее.
  • ERROR - значительные ошибки: ошибки чтения конфигурации, ошибки работы дочерних процессов (в т.ч. ненулевой код возврата), работы с сетью и др.
  • WARNING - предупреждения: ошибки вызова API, сообщения о перезапуске задачи из-за ошибки и др.
  • INFO и NOTICE - информационные сообщения.
  • DEBUG - малозначительные сообщения, полезные для отладки.

Список некоторых возможных сообщений приведён в разделе Список возможных кодов и сообщений лога micromanager.

3.2. Лог состояния

Если параметр log-state-period больше нуля, то micromanager с заданной периодичностью в минутах будет вести лог состояния.

Вид записей лога:

Log OK: 28/09 06:24:49
Mem used: 3790604 KiB, mem free: 267952 KiB
Swap used: 25728 KiB, swap free: 8359804 KiB
CPU load: 6.0%
In VoD directory: 255539 MiB free
__________________________________________________________________________________________________________________________________
| NAME                  | ENABLE| SRC                    | DST                            | STATE         | BITRATE  | STOP TIME |
----------------------------------------------------------------------------------------------------------------------------------
| Еврокино              | true  | udp://@239.1.2.3:5000  | 239.120.0.6 1234 multicast udp | NOT_RUNNING   | -        | -         |

________________________________________
| PATH                                  |
----------------------------------------
| Sintel                                |
| ED.avi                                |
| failfile                              |

Каждая запись лога состояния содержит две таблицы: таблицу потоков и список файлов в директории ожидания (по умоллчанию /var/vod_ingest).

Поля таблицы потоков:

  • NAME - Имя потока.
  • ENABLE - true, если поток включен.
  • SRC - Источник потока.
  • DST - Исходящий адрес потока.
  • STATE - Статус потока (RUNNING, NOT_RUNNING, NO_STREAM_DATA, NO_PLAYLIST, NOT_SEGMENTING).
  • BITRATE - Текущий битрейт потока.
  • STOP TIME - Время, когда будет остановлен поток.

A. Описание JSON-RPC API

A.1 Описание методов JSON-RPC API

get_stream_list

Получает список потоков.

Возвращает список объектов со следующими полями:

Название Тип Описание
id int Номер потока
name str Имя потока
enabled bool true, если поток активен
src-index int Порядковый номер используемого источника
autostart bool true, если включен запуск потока на старте micromanager
timeout int Время в секундах, через которое поток будет остановлен после запуска
stop-timestamp int Время в формате UNIX-timestamp, в которое поток будет остановлен
src str Адрес текущего источника
uptime int Время непрерывной работы в секундах
bitrate int Текущий битрейт в байтах в секунду
state str Статус потока.

Возможные значения поля state:

  • NOT_RUNNING;
  • RUNNING;
  • NO_STREAM_DATA;
  • NO_PLAYLIST;
  • NOT_SEGMENTING;
  • INCORRECT_CONFIG;
  • UNKNOWN.

start_stream

Запускает поток.

Параметры:

  • id - номер потока, тип int.

Возвращает строку с результатом вызова метода. Возможные значения:

  • stream started;
  • bad stream id.

stop_stream

Останавливает поток.

Параметры:

  • id - номер потока, тип int.

Возвращает строку с результатом вызова метода. Возможные значения:

  • stream stopped;
  • bad stream id.

reboot_stream

Перезапускает поток.

Параметры:

  • id - номер потока, тип int.

Возвращает строку с результатом вызова метода. Возможные значения:

  • stream rebooted;
  • bad stream id.

switch_source

Переключает источник потока.

Параметры:

  • id - номер потока, тип int.

Возвращает строку с результатом вызова метода. Возможные значения:

  • transcoding source switched;
  • no more sources;
  • bad stream id.

get_statistics

Получает статистику работы micromanager.

Возвращает объект со следующими полями:

Название Тип Описание
pid int PID процесса micromanager
streams-count int Общее количество видеопотоков
running-count int Количество запущенных видеопотоков
threads-count int Количество запущенных вычислительных потоков в процессе micromanager
mem-usage int Количество ОЗУ, потребляемое процессом micromanager и процессами видеопотоков в МиБ
cpu-usage float загрузка CPU процессом micromanager и процессами видеопотоков
uptime int Время непрерывной работы процесса micromanager в секундах
bitrate int Суммарный битрейт всех запущенных видеопотоков
result str Всегда равно “success”

get_config

Запрашивает конфигурацию в виде JSON-объекта.

Коды ошибок:

Код Описание
201 Файл конфигурации не задан
224 Ошибка чтения файла конфигурации

set_config

Изменяет и применяет конфигурацию.

Параметры:

Название Тип Описание Обязательный Ограничения
config obj Конфигурация в виде JSON-объекта Да  

Возвращаемое значение всегда равно “ok”.

Коды ошибок:

Код Описание
100 Отсутствует объект params
101 Пропущен параметр config
109 Некорректная кофигурация
220 Ошибка резервного копирования файла конфигурации
221 Ошибка записи конфигурации
222 Ошибка применения новой конфигурации, предыдущая восстановлена из резервной копии
223 Ошибка применения новой конфигурации и восстановления предыдущей из резервной копии

get_asset_meta

Запрашивает подробную информацию об ассете.

Параметры:

Название Тип Описание Обязательный Ограничения
path str Относительный путь до файла Да  

Возвращает список объек со следующими полями (все поля имеют строковый тип):

Название Тип Описание
size str Размер файла в байтах
length str Длина в секундах
bit-rate str Средний битрейт
format-name str Краткое имя контейнера или формата
format-long-name str Полное имя контейнера или формата
streams array Cписок потоков

Объекты списка streams имеют следующие поля:

Название Тип Описание
type str Тип потока
codec-name str Краткое имя кодека
codec-long-name str Полное имя кодека
language str Язык

Коды ошибок:

Код Описание
101 Параметр path пропущен или пуст
201 Ошибка получения информации об ассете

get_asset_files

Запрашивает список ассетов.

Параметры:

Название Тип Описание Обязательный Ограничения
offset int Номер элемента, с которого надо начинать список Нет Не меньше нуля
limit int Максимальный размер списка Нет Не меньше нуля
filter str Строка поиска по именам ассетов Нет  

Возвращает список объектов со следующими полями:

Название Тип Описание
file-name str Относительный путь до ассета

asset_delete

Удаляет ассет.

Параметры:

Название Тип Описание Обязательный Ограничения
path str Относительный путь до файла Да  

Возвращаемое значение всегда равно “success”.

Коды ошибок:

Код Описание
101 Параметр path пропущен или пуст
201 Ошибка удаления acctnf (см. поле message).

delete_file_from_ingest_directory

Удаляет файл из директории ожидания.

Параметры:

Название Тип Описание Обязательный Ограничения
path str Относительный путь до файла Да  

Возвращаемое значение всегда равно “success”.

Коды ошибок:

Код Описание
101 Параметр path пропущен или пуст
201 Ошибка удаления файла (см. поле message).

get_ingestion_status

Получает статус инжестирования.

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

Возвращает список объектов со следующими полями:

Название Тип Описание
task-id int Идентификатор задачи.
source-file-name str Относительный путь до исходного файла
target-file-name str Относительный путь до инжестированного файла
running bool true, если процесс инжестирования активен
completed bool true, если процесс инжестирования завершён
bitrate int Текущий битрейт в байтах
fps float Cкорость инжестирования в кадрах
frame int Текущий кадр
file-size int Текуший размер инжестируемого файла в КиБ
src-file-size int Размер исходного файла в КиБ
mem-used int Количество оперативной памяти, используемой процессом инжестирования в КиБ
cpu-load float Загрузка процессора процессом инжестирования
failed bool true, если процесс инжестирования или дистрибьюции завершён из-за ошибки
error-string str Cообщение об ошибке, либо причина отмены задачи; если статус не равен FAILED или CANCELED то содержит пустую строку
status str Текущий статус задачи.

Возможные значения поля status:

  • WAITING;
  • STARTING;
  • ACTIVE;
  • COMPLETED;
  • FAILED;
  • CANCELED.

get_distribution_status

Получает статус дистрибьюции.

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

Возвращает список объектов со следующими полями:

Название Тип Описание
task-id int Идентификатор задачи.
source-file-name str Относительный путь до ассета
running bool true, если процесс дострибьюции запущен и активен
processed int Количество обработанных адресов
mem-used int Количество оперативной памяти, используемой процессом в КиБ
cpu-load float Загрузка процессора процессом дистрибьюции
error-string str Cообщение об ошибке, либо причина отмены задачи; если статус не равен FAILED или CANCELED то содержит пустую строку
status str Текущий статус задачи.

Возможные значения поля status:

  • WAITING;
  • STARTING;
  • ACTIVE;
  • COMPLETED;
  • FAILED;
  • CANCELED.

cancel_task

Отменяет задачу.

Параметры:

Название Тип Описание Обязательный Ограничения
id int Идентификатор задачи Да Не меньше нуля.

Возвращаемое значение всегда равно “ok”.

ingest_file

Инжестирует файл.

Параметры:

Название Тип Описание Обязательный Ограничения
path str Относительный путь до файла в директории инжестирования Да  
preset_name str Имя пресета Да  
run_cmd str Шаблон команды запуска Нет  
naming_template str Шаблон имени файла Нет  
delete_after bool если true, удаляет файл после успешного инжестирования и успешной дистрибьюции (если дистрибьюция включена в параметрах micromanager); по умолчанию false Нет  

Примечание: если указаны, и имя пресета, и шаблон команды запуска или имени файла, то парметры, заданные в пресете, имеют меньший приоритет. Также, если в выбранном пресете отсутствуют какие-либо параметры, то будут взяты значения пресета по-умолчанию.

Примечание 2: если значение preset_name равно default, то будет выбран пресет по-умолчанию.

Возвращаемое значение - объект со следующими параметрами:

Название Тип Описание
file str Относительный путь до ассета после инжестирования
id int Идентификатор задачи.

Коды ошибок:

Код Описание
101 Параметр path пропущен или пуст
110 Не найден пресет с таким именем

distribute_file

Добавляет задачу дострибьюции.

Параметры:

Название Тип Описание Обязательный Ограничения
path str Относительный путь до файла в директории ассетов Да  
preset_name str Имя пресета Да  
delete_after bool если true, удаляет файл после успешного инжестирования и успешной дистрибьюции (если дистрибьюция включена в параметрах micromanager); по умолчанию false Нет  

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

Примечание 2: если значение preset_name равно default, то будет выбран пресет по-умолчанию.

Возвращаемое значение - объект со следующими параметрами:

Название Тип Описание
id int Идентификатор задачи.

Коды ошибок:

Код Описание
101 Параметр path пропущен или пуст
110 Не найден пресет с таким именем

get_presets

Запрашивает список пресетов.

Возвращает объект со следующими полями:

Название Тип Описание
default str Шаблон команды запуска, используемый по умолчанию
default-naming-template str Шаблон имени файла, используемый по умолчанию
default-distribution-template str Шаблон команды дистрибьюции, используемый по умолчанию
presets array Список пресетов в том же виде, в котором он задан в конфигурации

get_waiting_files

Запрашивает список файлов в директории ожидания.

Параметры:

Название Тип Описание Обязательный Ограничения
offset int Номер элемента, с которого надо начинать список Нет Не меньше нуля
limit int Максимальный размер списка Нет Не меньше нуля
filter str Строка поиска по именам файлов Нет  

Возвращает список объектов со следующими полями:

Название Тип Описание
file-name str Относительное имя файла
target-file-name   Относительное имя ассета после инжестирования с шаблоном именования по умолчанию

is_alive

Запрашивает данные о доступности и загруженности видеосервера.

Возвращает объект со следующими полями:

Название Тип Описание
is_alive bool true, если значение score не превышает максимальное
score float Оценка загруженности сервера

B. Интеграция с IPTV Middleware

Решение Micromanager интегрировано с системой Microimpuls IPTV/OTT Middleware Smarty.

C. Решение проблем и рекомендации

С.1 Ошибки CC error при транскодировании HD и Full HD каналов при высокой нагрузке на CPU

Для HD-потоков можно определить более высокий приоритет процесса через параметр priority в списке streams.

С.2 Рекомендуемые параметры ядра

Изменения нужно вносить в файл /etc/sysctl.conf:

kernel.shmmax = 2473822720
kernel.shmall = 4097152000
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_default = 8388608
net.core.wmem_max = 16777216
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 0
net.ipv4.tcp_keepalive_time = 10
net.ipv4.tcp_fin_timeout = 5

Затем выполнить команду для применения изменений:

sysctl -p

D. Список возможных сообщений в логах

Сообщения об обрабатываемых потоках имеют вид `(%n) %message`, где %n - порядковый номер потока в конфигурации, причём самый первый поток имеет номер 0. Сообщения об инжестировании - `(%src_file) %message`, где %src_file - путь до исходного файла относительно директории инжестирования.

Формат Описание Уровень Пример
(%src_file) ingestion process thread stopped Поток процесса инжестирования завершён INFO Thu Mar 30 17:30:52 2017 INFO ingestion_thread_handler[29731]: (ED.mp4) ingestion process thread stopped
ingestion control thread started Поток мониторинга процесса инжестирования запущен INFO Thu Mar 30 17:30:35 2017 INFO main_thread_handler[29731]: ingestion control thread started
ingestion control thread stopped Поток мониторинга процесса инжестирования завершён INFO Thu Mar 30 17:30:51 2017 INFO main_thread_handler[29731]: ingestion control thread stopped
ingestion already started: src file = %file1, dst file = %file2 Попытка запустить несколько процессов инжестирования с одним и тем же файлом назначения WARNING Fri Mar 31 11:30:20 2017 WARNING run_ingestion[19855]: ingestion already started: src file = ED.mp4, dst file = /default/ED.mp4
run ingestion: path %file, preset name: %preset Запущено инжестирование ассета %file с пресетом %preset INFO Thu Mar 30 17:30:35 2017 INFO run_ingestion_process[29731]: (ED.mp4) run ingestion, target file: /var/vod//default/ED.mp4
ingestion failed: file %file_name does not exist Ошибка инжестирования: исходный файл не существует или не доступен WARNING Fri Mar 31 11:29:49 2017 WARNING run_ingestion[19855]: ingestion failed: target file /default/ED.mp4 does not exist
ingestion failed: target file %file already exists Ошибка инжестирования: файл назначения уже существует WARNING Fri Mar 31 11:29:49 2017 WARNING run_ingestion[19855]: ingestion failed: target file /default/ED.mp4 already exists
ingestion is starting: src file = %file1, dst file = %file2 Инициализация инжестирования INFO Thu Mar 30 17:30:35 2017 INFO run_ingestion[29731]: ingestion is starting: src file = ED.mp4, dst file = /default/%src_path_wo_ext%.mp4
(%src_file) copy %target_file to %address Дистрибьюция: копирование файла %target_file на адрес %address INFO Fri Mar 31 11:45:11 2017 INFO run_distribution_process[21564]: (ED.mp4) copy /default/ED.mp4 to user@127.0.0.1
(%src_file) can’t make pipe: %error Ошибка вызова pipe() (при run-link-strerr = true) CRITICAL Fri Mar 31 11:40:56 2017 INFO run_ingestion_process[21564]: (ED.mp4) can’t make pipe: Broken pipe
(%src_file) %type failed: fork failed with error %error Ошибка вызова fork() при запуске процесса дистрибьюции или инжестирования CRITICAL Fri Mar 31 11:40:56 2017 CRITICAL run_ingestion_process[21564]: (ED.mp4) ingestion failed: fork failed with error Too many open files
(%src_file) distribution address list is empty Дистрибьюция ассетов включена, но список адресов пуст WARNING Fri Mar 31 11:40:56 2017 WARNING distribute_to_all[21564]: (ED.mp4) distribution address list is empty
(%src_file) run distribution for %file Запуск дистрибьюции для ассета %file INFO Fri Mar 31 11:45:11 2017 INFO distribute_to_all[21564]: (ED.mp4) run distribution for /default/ED.mp4
(%src_file) add ingestion to watchlist Инжестирование добавлено в список наблюдения INFO Thu Mar 30 17:30:35 2017 INFO add_injection_to_list[29731]: (ED.mp4) add ingestion to watchlist
(%src_file) remove ingestion from watchlist Инжестирование удалено из списка наблюдения INFO Fri Mar 31 11:44:46 2017 INFO remove_injection_from_list[21564]: (hls.conf) remove ingestion from watchlist
(%src_file) %type error Ошибка выполнения процесса инжестирования или дестрибьюции ERROR Fri Mar 31 11:42:30 2017 ERROR on_process_exited_with_non_zero[12140]: (ED.mp4) distribution error: cp: target ‘/var/vod/files’ is not a directory
(%src_file) %type error: can’t read stderr Ошибка выполнения процесса инжестирования или дестрибьюции, невозможно прочитать stderr (при run-link-strerr = true) ERROR Fri Mar 31 11:42:30 2017 ERROR on_process_exited_with_non_zero[12140]: (ED.mp4) distribution error: can’t read stderr
(%src_file) distribution process PID not found Не найднен PID процесса дистрибьюции WARNING Fri Mar 31 11:45:13 2017 WARNING watch_distribution_process[21564]: (ED.mp4) distribution process PID not found
(%src_file) distribution process executed, PID %pid Запущен процесс дистрибьюции с PID %pid INFO Fri Mar 31 11:20:12 2017 INFO watch_distribution_process[21564]: (ED.mp4) distribution process executed, PID 243
(%src_file) distribution process app exited with code %code Процесс дистрибьюции завершён с кодом выхода %code INFO Fri Mar 31 11:45:13 2017 INFO watch_distribution_process[21564]: (ED.mp4) distribution process app exited with code 0
(%src_file) distribution process app exited via signal %sig Процесс дистрибьюции завершён сигналом %sig WARNING Fri Mar 31 11:40:10 2017 WARNING watch_distribution_process[21564]: (ED.mp4) distribution process app exited via signal 15
(%src_file) stopping, process %pid will be killed micromanager завершается, процесс с PID %pid будет остановлен INFO Fri Mar 31 11:40:10 2017 INFO watch_distribution_process[21564]: (ED.mp4) stopping, process 243 will be killed
(%src_file) ingestion completed Инжестирование успешно завершено INFO Fri Mar 31 11:30:47 2017 INFO on_ingestion_succeed[19855]: (ED.mp4) ingestion completed
(%src_file) start distribution Инжестирование успешно завершено, начата дистрибьюция INFO Fri Mar 31 11:45:11 2017 INFO on_ingestion_succeed[21564]: (ED.mp4) start distribution
(%src_file) delete file Инжестирование успешно завершено, исходный файл будет удалён INFO Fri Mar 31 11:43:28 2017 INFO on_ingestion_succeed[12140]: (ED.mp4) delete file /var/vod/default/ED.mp4
(%src_file) file deleting error Ошибка удаления файла после инжестирования WARNING Fri Mar 31 11:43:30 2017 WARNING on_ingestion_succeed[12140]: (ED.mp4) file deleting error
(%src_file) PID not found Не найднен PID процесса инжестирования WARNING Fri Mar 31 11:45:13 2017 WARNING watch_ingestion_process[21564]: (ED.mp4) PID not found
(%src_file) ingestion process executed, PID %pid Запущен процесс инжестирования с PID %pid INFO Thu Mar 30 17:30:37 2017 INFO watch_ingestion_process[29731]: (ED.mp4) ingestion process executed, PID 29759
(%src_file) ingestion process app exited with code %code Процесс инжестирования завершён с кодом выхода %code INFO Thu Mar 30 17:30:52 2017 INFO watch_ingestion_process[29731]: (ED.mp4) ingestion process app exited with code 255
(%src_file) ingestion process app exited via signal %sig Процесс инжестирования завершён сигналом %sig WARNING Thu Mar 30 17:30:52 2017 WARNING watch_ingestion_process[29731]: (ED.mp4) ingestion process app exited via signal 15
(%src_file) ingestion failed: %error Ошибка инициализации инжестирования ERROR Fri Mar 31 11:29:49 2017 WARNING run_ingestion[19855]: ingestion failed: target file /default/ED.mp4 already exists
(%src_file) run ingestion process: src = %file1, dst = %file2 Запуск инжестировани для ассета %file1, файла назначения: %file2 INFO Fri Mar 31 11:44:38 2017 INFO run_ingestion_process[21564]: run ingestion process: src = /var/vod_ingest/ED.mp4, dst = /var/vod//default/ED.mp4
(%src_file) check ingestion Мониторинг процесса инжестирования DEBUG Thu Mar 30 17:30:47 2017 DEBUG check_ingestion[29731]: (ED.mp4) check ingestion
delete asset %file Удаление ассета INFO Fri Mar 31 11:30:06 2017 INFO delete_asset[19855]: delete asset: default/ED.mp4
delete file from ingest directory: %file Удаление файла %file из директории инжестирования INFO Fri Mar 31 11:28:37 2017 DEBUG delete_file_from_ingest_directory[19855]: delete file from ingest directory: /var/vod_ingest/ED.mp4
get all ingestions Запрос списка всех процессов инжестирования DEBUG Fri Mar 31 11:35:02 2017 DEBUG get_all_ingestions[19855]: get all ingestions
check files in %file Проверка неинжестированных файлов в директории %file DEBUG Fri Mar 31 11:12:00 2017 DEBUG main[19855]: check files in /var/vod_ingest
%sig received Получен сигнал %sig NOTICE Thu Mar 30 17:04:11 2017 NOTICE signal_handler[13227]: SIGTERM or SIGINT received, stopping...
can’t open directory %dir Невозможно получить список файлов в директории %dir, директория отсутствует или недоступна ERROR Thu Mar 30 12:45:23 2017 ERROR get_files[32480]: can’t open directory /var/vod_ingest
execution failed: %error Критическая ошибка запуска процесса CRITICAL Thu Mar 30 17:30:51 2017 CRITICAL execute_process[32480]: execution failed: Permission denied
using execl() to run process, cmd: %cmd Запуск процесса, команда запуска %cmd DEBUG Thu Mar 30 17:38:54 2017 INFO execute_process[32480]: using execl() to run process
create directory %dir Создание директории %dir DEBUG Thu Mar 30 17:07:07 2017 DEBUG create_directory[13641]: create directory /tmp/micromanager/reports/
write state log Запись лога состояния DEBUG Thu Mar 30 17:37:46 2017 DEBUG log[31031]: write state log
error, state log will not be writen Ошибка записи лога состояния WARNING Thu Mar 30 17:35:12 2017 WARNING log[31031]: error, state log will not be writen
set logging period: %time Изменение периода записи лога состояния (в секундах) INFO Thu Mar 30 17:07:07 2017 INFO set_time[13641]: set logging period: 0
logger unlocked Разблокирована запись лога состояния INFO Thu Mar 30 17:30:35 2017 INFO unlock[29731]: logger unlocked
state logger started Запущена запись лога состояния INFO Thu Mar 30 17:30:35 2017 INFO main_thread[29731]: state logger started
state logger stopped Запись лога состояния остановлена INFO Thu Mar 30 17:39:33 2017 INFO main_thread[31031]: state logger stopped
can’t write to file %file Ошибка записи в файл %file WARNING Thu Mar 30 17:30:18 2017 WARNING log[31031]: can’t write to file /var/log/micromanager/state.log
(%stream) process thread stopped... Процесс потока %stream остановлен INFO Fri Mar 31 10:28:33 2017 INFO process_thread_handler[19855]: (0) process thread stopped...
(%stream) stream checker read exception Ошибка чтения во время мониторинга потока WARNING  
(%stream) tream checker thread stopped... Мониторинг потока %stream остановлен INFO Thu Mar 30 17:11:14 2017 INFO stream_checker_thread_handler[13641]: (0) stream checker thread stopped...
process with PID %pid was killed Процесс с PID %pid остановлен INFO  
(%stream) process using too much memory (%mem), trying to restart Процесс использует слишком много памяти и будет перезапущен WARNING  
(%stream) process using too much cpu (%cpu), trying to restart Процесс использует слишком много процессорного времени и будет перезапущен WARNING  
process ‘%process_name’ with pid %pid using too much memory (%mem), killing Отслеживаемый процесс использует слишком много оперативной памяти и будет завершён WARNING  
process ‘%process_name’ with pid %pid using too much cpu (%cpu), killing Отслеживаемый процесс использует слишком много процессорного времени и будет завершён WARNING  
(%stream) streaming time out, stop Таймаут работы потока, вещание остановлено (если параметр timeout больше нуля) INFO  
(%stream) stream not alive, trying to restart or switch source Превышен максимальное количество попыток проверки доступности потока, возможно, источник потока недоступен или некорректен, будет использован другой источник, либо процесс будет перезапущен WARNING Thu Mar 30 17:39:33 2017 WARNING watch_stream[31031]: (0) stream not alive, trying to restart or switch source
(%stream) possible stream not alive %n times Провалилось %n попыток проверки потока INFO Thu Mar 30 17:39:25 2017 INFO watch_stream[31031]: (0) possible stream not alive 4 times
(%stream) segmenter not alive, trying to restart or switch source Ошибка работы сегментера, сегментер будет перезапущен WARNING  
(%stream) process not running, trying to restart Процесс мёртв или недоступен и будет перезапущен WARNING  
(%stream) process generate stream with too low bitrate (%byte bps), check %n Битрейт исходящего потока ниже минимально установленного (попытка %n) WARNING Thu Mar 30 17:37:48 2017 WARNING watch_stream[31031]: (0) process generate stream with too low bitrate (0 bps), check 2
(%stream) process generate stream with too low bitrate (%byte bps), trying to restart Превышено максимальное количество попыток проверки битрейта, процесс будет перезапущен WARNING Thu Mar 30 17:37:48 2017 WARNING watch_stream[31031]: (0) process generate stream with too low bitrate (0 bps), trying to restart
(%stream) executing process... Запуск процесса INFO Thu Mar 30 17:39:07 2017 INFO execute_process[31031]: (0) executing process...
(%stream) fork failed: %error Ошибка вызова fork() CRITICAL  
couldn’t set thread priority: %error Ошибка установки приоритета процесса WARNING  
(%stream) execution failed: %error Ошибка запуска процесса CRITICAL  
(%stream) process executed, pid %pid Процесс запущен INFO Thu Mar 30 17:39:07 2017 INFO execute_process[31031]: (0) process executed, pid 32764
(%stream) process app killed, pid %pid Процесс остановлен INFO Thu Mar 30 17:39:21 2017 INFO execute_process[31031]: (0) process app killed, pid 598
(%stream) process app exited with code %code Процесс завершился с кодом выхода %code ERROR Thu Mar 30 17:38:16 2017 ERROR execute_process[31031]: (0) process app exited with code 1
(%stream) process app exited via signal %sig Процесс завершен сигналом %sig ERROR Thu Mar 30 17:38:16 2017 ERROR execute_process[31031]: (0) process app exited via signal 15
invalid distribution list array Некорректный список адресов дистрибьюции WARNING Thu Mar 30 17:17:31 2017 WARNING read_config[15342]: invalid distribution list array
checking configuration file syntax ‘%file’ Проверка синтаксиса файла конфигурации INFO Thu Mar 30 17:07:07 2017 INFO read_config[13641]: checking configuration file syntax ‘/etc/micromanager/micromanager.conf
reading configuration from file ‘%file’ Чтение конфигурации из файла INFO Thu Mar 30 17:07:07 2017 INFO read_config[13641]: reading configuration from file ‘/etc/micromanager/micromanager.conf’
the number of streams is too big (max %max) Количество потоков в файле конфигурации превышает максимально допустимое (%max), ошибка применения конфигурации ERROR Thu Mar 30 17:18:56 2017 ERROR read_config[15391]: the number of streams is too big (max 512)
initialization of stream #%n failed Ошибка инициализации потока с номером %n, ошибка применения конфигурации ERROR Thu Mar 30 17:18:02 2017 ERROR read_config[15379]: initialization of stream #0 failed
parsing streams list failed index %n Некорректное описание потока в файле конфигурации, ошибка применения конфигурации ERROR Fri Mar 31 10:28:19 2017 ERROR read_config[19855]: parsing streams list failed index 0
reloading stream #%n Перезапуск потока с номером %n NOTICE Thu Mar 30 17:03:52 2017 NOTICE reload_stream[13227]: reloading stream #0 ‘TLC’
parsing streams list failed, stream %n does not have any source Некорректное описание потока в файле конфигурации: не указан ни один источник ERROR Fri Mar 31 10:28:19 2017 ERROR read_config[19855]: parsing streams list failed, stream 0 does not have any source
stream checker bind failed: %error Ошибка вызова bind() ERROR Thu Mar 30 17:03:52 2017 ERROR reload_stream[13227]: stream checker bind failed: Address already in use
stream checker socket error: %error Ошибка инициализации сокета ERROR Thu Mar 30 17:03:52 2017 ERROR reload_stream[13227]: stream checker socket error: Socket type not supported
config file name is empty Пустое имя файла конфигурации (при перезагрузке конфигурации) WARNING Fri Mar 31 10:28:19 2017 WARNING reload_config[19855]: config file name is empty
reloading stream #%n failed Ошибка перезапуска потока ERROR Fri Mar 31 10:28:19 2017 ERROR reload_config[19855]: reloading stream #0 failed
deinit stream #%n because it was not found in configuration Завершается работа потока, так как он отсутствует в новой версии конфигурации (при перезагрузке конфигурации) INFO Fri Mar 31 10:28:19 2017 INFO reload_config[19855]: deinit stream #0 because it was not found in configuration
parsing streams list failed at index %n Некорректное описание потока в файле конфигурации (при перезагрузке конфигурации) ERROR Fri Mar 31 10:28:19 2017 ERROR reload_config[19855]: parsing streams list failed at index 0
starting streams Запуск всех потоков INFO Thu Mar 30 17:04:13 2017 INFO start_stream[13641]: starting streams
starting stream #%n ‘%stream_name’ Запуск потока с номером %n и именем %stream_name INFO Fri Mar 31 10:28:19 2017 INFO start_stream[19855]: starting stream #0 ‘Еврокино’
stream #%n ‘%stream_name’ has already started, update stop timestamp Поток с номером %n и именем %stream_name уже запущен, будет обновлено время его остановки (для потоков с параметром timeout большем 0) INFO Fri Mar 31 10:28:19 2017 INFO start_stream[19855]: stream #0 ‘Еврокино’ has already started, update stop timestamp
stopping streams Остановка всех потоков INFO Thu Mar 30 17:04:11 2017 INFO stop_stream[13227]: stopping streams
stopping stream #%n ‘%stream_name’ Остановка потока с номером %n и именем %stream_name INFO Thu Mar 30 17:03:52 2017 INFO stop_stream[13227]: stopping stream #0 ‘TLC’
networking initialization failed Критическая ошибка инициализации JSON-RPC API ERROR Thu Mar 30 17:06:57 2017 ERROR start_json_rpc[16803]: networking initialization failed
json-rpc bind failed Критическая ошибка инициализации JSON-RPC API: ошибка вызова bind(), возможно, сетевой порт уже занят ERROR Thu Mar 30 17:06:57 2017 ERROR start_json_rpc[16803]: json-rpc bind failed
json-rpc listen failed Критическая ошибка инициализации JSON-RPC API: ошибка вызова listen() ERROR Thu Mar 30 17:06:57 2017 ERROR start_json_rpc[16803]: json-rpc listen failed
starting JSON-RPC server Запущен JSON-RPC API INFO Thu Mar 30 17:03:52 2017 INFO start_json_rpc[13227]: starting JSON-RPC server
stopping JSON-RPC server JSON-RPC API остановлен INFO Thu Mar 30 17:04:11 2017 INFO stop_json_rpc[13227]: stopping JSON-RPC server
config write error: can’t write in file %file_name Ошибка сохранения конфигурации WARNING Thu Mar 30 17:21:56 2017 WARNING write_config[13641]: config write error: can’t write in file /etc/micromanager/micromanager.conf
backup config, file name: %file_name Резервное копирование файла %file_name DEBUG Thu Mar 30 17:11:14 2017 DEBUG backup_config[13641]: backup config, file name: /etc/micromanager/micromanager.conf
backup error: file %file_name does not exist Ошибка резервного копирования: файл %file_name не существует WARNING Thu Mar 30 17:11:14 2017 WARNING backup_config[13641]: backup error: file /etc/micromanager/micromanager.conf does not exist
try to backup config, backup file name: %file_name Сохранение резеврвной копии в файл %file_name INFO Thu Mar 30 17:11:14 2017 INFO backup_config[13641]: try to backup config, backup file name: /etc/micromanager/micromanager.conf-2017-3-30-17:1 1:14
can’t write file %file_name, backup error Ошибка резервного копирования: ошибка записи в файл %file_name WARNING Thu Mar 30 17:11:14 2017 WARNING backup_config[13641]: can’t write file /etc/micromanager/micromanager.conf-2017-3-30-17:1 1:14, backup error
restore config, backup file name: %file_name Восстановление конфигурации из резервной копии INFO Thu Mar 30 17:31:20 2017 INFO restore_config[13641]: restore config, backup file name: /etc/micromanager/micromanager.conf-2017-3-30-17:0 1:12
configuration restoring failed Ошибка восстановления конфигурации ERROR Thu Mar 30 17:31:20 2017 INFO restore_config[13641]: configuration restoring failed
configuration file not found ‘%file_name’ Не найден файл конфигурации CRITICAL Thu Mar 30 17:28:42 2017 CRITICAL read_json_config_from_file[13641]: configuration file not found ‘/etc/micromanager/micromanager.conf’
configuration parsing failed: %error Ошибка разбора конфигурации ERROR Fri Mar 31 12:04:15 2017 ERROR read_json_config_from_file[14290]: configuration parsing failed * Line 44, Column 19, Missing ‘}’ or object member name
get streams list Запрос списка потоков DEBUG Fri Mar 31 12:08:46 2017 DEBUG get_streams_list[15074]: get streams list
API %method Вызов метода API %method INFO Thu Mar 30 17:11:14 2017 INFO api_set_config[13641]: API set config
API %method error (%code): %error Ошибка вызова метода API %method, код ошибки %code WARNING Thu Mar 30 17:10:01 2017 WARNING api_set_config[13641]: API set_config error (221): configuration write error