Задача [0560]: Конвертация произвольных файлов в форматы, поддерживаемые Synergy

Формулировка проблемы. Текущие просмотрщики Synergy корректно отображают файлы наиболее часто используемых форматов, таких как txt, odt/doc/docx, ods/xls/xlsx, pps/ppt/pptx, pdf, png/jpg, mp3 и т.п. Необходима возможность корректного отображения более редких и специфичных форматов, например: msg, msh, dwg и т.п.

Решение. Общим решением является реализация утилиты, которая будет позволять подключать и запускать произвольные конверторы файлов.

Во-первых, выделим требования к утилите.

Во-вторых, опишем форматы конфигурации.

Формат конфигурационного файла:

standalone/configuration/ai/converter.json
{
  "dwg": {
    "path": "/opt/dwgconverter/bin/dwgconv.sh",
    "outFormat": "pdf",
    "moduleID": "6b13459e-aa3c-4a5a-94db-bb64f328e30c",
    "timeout": 10,
    "timeoutSinceChange": 2
  },
  "msg": {
    "path": "/opt/msgconverter/bin/msgconv.sh",
    "outFormat": "htd",
    "moduleID": "6b13459e-aa3c-4a5a-94db-bb64f328e30c",
    "timeout": 10,
    "timeoutSinceChange": 2
  }
}

Формат передачи параметров исполняемому файлу-конвертору:

util path/input.txt uuid token

где:

Каждый параметр отделен от предыдущего пробелом. Соблюдение порядка следования параметров обязательно.

Для авторизации по Basic HTTP используются закодированные в Base64 логин и пароль, разделенные знаком "двоеточие". Подробнее про авторизацию по ключам написано в руководстве по интеграции.

В-третьих, опишем общий алгоритм действий, необходимых для корректной конвертации файлов.

  1. Конфигурационный файл настроен таким образом, что для расширения dwg должен вызываться конвертор dwgconv.sh.

  2. Пользователь загружает файл somefile.dwg в папку хранилища.

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

  4. На каждый вызов утилиты создается своя папка в файловой системе, куда в кладется результирующий файл out.pdf.

  5. После окончания конвертации файл out.pdf копируется в отдельную ноду хранилища.

  6. При следующем открытии файла подгружается его сконвертированная версия соответствующим просмотрщиком Synergy.

При конвертации возможна запись нескольких вспомогательных файлов, из которых и будет составлен итоговый out.pdf. И если выполнение записи одного такого файла займет больше, чем указанное в таймауте timeoutSinceChange время, то процессу должен отправиться sigterm (сигнал о прерывании).

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