Локальные пути

Система распределена, но разные логические роли, работающие на разных серверах требуют доступа к одним и тем же файлам. Например, роль ws сохранила файл к сценарию IVR, роль ivr исполняет компонент воспроизведения и проверяет наличие файла, а роль mg осуществляет непосредственное воспроизведение. Таких примеров масса, и все они требуют единения файловой системы между серверами.

Принципиально в системе «Era» существует несколько различных видов каталогов:

  • Синхронизационная папка, файлы из которой автоматически растекаются по серверам в соответствии с назначением.

  • Сетевая папка хранилища на сайте, размещение в которое делает файл доступным с других серверов этого сайта.

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

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

  • Папка для записи, используемая медиа-шлюзами для сохранения RTP-трафика.

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

Настройка корневых каталогов для указанных выше категорий производится в конфигурации для каждого сервера отдельно.

Абсолютные и относительные прямые пути ОС

Абсолютный или относительный путь – это 1 уровень ссылки на файл.

Работа с путями 1 уровня в сценариях запрещена.

Корневые ключи, задаваемые в конфиге

Корневые папки по типам – это 2 уровень ссылки на файл.

Работа с путями 2 уровня в сценариях запрещена.

Типы путей:

Префикс Описание

:SYNC

Путь к каталогу синхронизации.

  • Корень: get_sync_root_path()

:SITESHARE

Путь к каталогу для хранения фалов на сетевом диске доступном на сайте.

  • Корень: get_siteshare_path()

  • Требуется rshare.sign для работы сервисов системы

:GLOBALSHARE

Путь к каталогу для хранения фалов на сетевом диске доступном для всей системы.

  • Корень: get_globalshare_path()

  • Требуется rshare.sign для работы сервисов системы

:RECORD

Путь к каталогу для записи звонков на медиа шлюзе (исключен из общего пользования). Это локальная папка.

  • Корень: get_record_path(Addr, Postfix)

:RECSTORE

Путь к каталогу для хранения записанных звонков в системе (исключен из общего пользования), если хранение в рамках домена не настроено во внешнее хранилище. Это может быть NFS папка, или локальная папка.

  • Корень: get_recstore_path()

  • get_recstore_path_by_id(RecStoreId)

  • RecStoreId - алиас конкретного хранилища, которых может быть много. Каждый микшер пишет в конкретный, а веб-сервер может иметь доступ ко всем.

  • Требуется rshare.sign для работы сервисов системы

:LOCAL

Путь к каталогу для хранения временных файлов ноды

  • Корень: get_local_path()

  • Для использования: get_node_temp_path()get_local_path() + get_current_node_name()

rshare.sign

Служебный файл, наличие которого указывает системе «Era» на то, что сетевой каталог подключен.

  • Необходим для работы сервисов системы с каталогами :SITESHARE и :GLOBALSHARE.

  • Файл должен быть создан на подключенном сетевом хранилище. При отсутствии сетевого подключения этот файл исчезает, система понимает что каталог не доступен.

  • Если сетевое хранилище не используется, то создается файл непосредственно в каталоге :SITESHARE или :GLOBALSHARE сервера.

Содержимое файла:
rshare

Для проверки выполнить:

hd rshare.sign

Результат:

 00000000  72 73 68 61 72 65  |rshare|
 00000006

Работа с файловой системой в сценариях

Все динамические указания файлов должны использовать один из специализированных префиксов (3 уровень).

В сценариях разрешена работа только с путями 3 уровня.

Запрещены переходы назад (/..).

DFSync (domain file sync)

Статическая информация, синхронизирующаяся по всем серверам всех сайтов в течение 10-20 секунд. Разделяется на общую и доменную. Каталоги с доменами синхронизируются на серверах, принадлежащих сайтам, где обслуживается домен.

Table 1. Структура DFSync:
Префикс Описание

:SYNC_COMMON

  • Хранение стандартных медиа-файлов и загруженных данных.

  • Доступ из сценариев: чтение для всех.

  • Доступ из API: полный доступ к разделам (waitonhold, conf, custom, …​)

  • Основные пользователи: Воспроизведение стандартных звуков в звонках, конференциях и IVR.

  • Синоним: :SYN_MEDIA

  • Expression: syn_media()

 :SYNC + get_subpath_common()
 :SYNC/common/
 /home/era/media/ + common/

.

:SYNC_DOMAIN_COMMON

  • Хранение медиа-файлов, перекрывающих стандартный набор из :SYNC_COMMON.

  • Доступ из сценариев: чтение для данного домена, для остальных полный запрет.

  • Доступ из API: не реализован.

  • Основные пользователи: воспроизведение стандартных звуков в звонках,конференциях и IVR.

  • Синоним: :SYN_DOM_MEDIA

  • Expression: syn_dom_media()

 :SYNC + get_subpath_domain(Domain) + get_subpath_common()
 :SYNC/domains/[domain]/common/
 /home/era/media/ + domains/domain.org/common/

.

:SYNC_DOMAIN_DATA

  • Хранение различной информации доступной в данном домене

  • Доступ из сценариев: чтение и запись в данном домене.

  • Доступ из API: нет.

  • Основные пользователи: различные сценарии данного домена

  • Синоним: :SYN_DOM

  • Expression: syn_domain()

 :SYNC + get_subpath_domain(Domain) + get_subpath_data()
 :SYNC/domains/[domain]/data/
 /home/era/media/ + domains/domain.org/data/

.

:SYNC_SCRIPT_STATIC

  • Хранение медийной информации прикрепленной к сценарию

  • Доступ из сценариев: чтение для данного сценария.

  • Доступ из API: полный (ivr, svc)

  • Основные пользователи: сценарии IVR

  • Синоним: :SYN_SCR_MEDIA

  • Expression: syn_script_media()

 :SYNC + get_subpath_script_static(Domain, ScriptType, ScriptId)
 :SYNC/domains/[domain]/scripts/<SCRIPT_TYPE>/<SCRIPT_ID>/static/
 /home/era/media/ + domains/domain.org/ + scripts/ivr/1233-43223-43213411234/static/

.

:SYNC_SCRIPT_DATA

  • Хранение различной информации прикрепленной к сценарию

  • Доступ из сценариев: чтение и запись для данного сценария.

  • Доступ из API: нет.

  • Основные пользователи: сценарии IVR.

  • Синоним: :SYN_SCR

  • Expression: syn_script()

 :SYNC + get_subpath_script_data(Domain, ScriptType, ScriptId),
 :SYNC/domains/[domain]/scripts/<SCRIPT_TYPE>/<SCRIPT_ID>/data/
 /home/era/media/ + domains/domain.org/ + scripts/ivr/1233-43223-43213411234/data/

.

NFS

Shared сетевые каталоги. Разделяются на внутри-сайтовые и глобальные.

Table 2. Структура NFS:
Префикс Описание

:GLOBALSHARE_PUBLIC

  • Хранение различной информации с полным доступом для всех

  • Доступ из сценариев: полный для всех доменов и сценариев.

  • Доступ из API: не реализован.

  • Основные пользователи: все пользователи

  • синоним: :GS_PUB

  • Expression: gs_public()

 :GLOBALSHARE + get_subpath_public()
 :GLOBALSHARE/public/
 /home/era/globals/ + public

.

:GLOBALSHARE_DOMAIN_DATA

  • Хранение различной информации доступной в данном домене по всей системе.

  • Доступ из сценариев: Текущему домену полный доступ, остальным полный запрет.

  • Доступ из API: не реализован.

  • Основные пользователи: сценарии для манипулирования различными файлами.

  • Что хранится: документы, факсы, сгенерированные медиа файлы.

  • Синоним: :GS_DOM

  • Expression: gs_domain()

 :GLOBALSHARE + get_subpath_domain(Domain) + get_subpath_data()
 :GLOBALSHARE/domains/[Domain]/data/
 /home/era/globals/ + domains/domain.org/data/

.

:GLOBALSHARE_SCRIPT_DATA

  • Хранение различной информации сценария в данном домене по всей системе.

  • Доступ из сценариев: Текущему сценарию полный доступ, остальным сценариям текущего домена и другим доменам полный запрет.

  • Доступ из API: пока не реализован.

  • Основные пользователи: сценарии для манипулирования различными файлами

  • Что хранится: документы, факсы, сгенерированные медиа файлы

  • Синоним: :GC_SCR

  • Expression: gs_script()

 :GLOBALSHARE + get_subpath_script_data(Domain, ScriptType, ScriptId)
 :GLOBALSHARE/domains/[Domain]/scripts/[ScriptType]/[ScriptId]/data/
 /home/era/globals/ + domains/domain.org/scripts/ivr/1233-43223-43213411234/data/

.

:SITESHARE_PUBLIC

  • Хранение различной информации доступной с полным доступом для всех на данном сайте.

  • Доступ из сценариев: полный для всех доменов и сценариев.

  • Доступ из ws-api: пока не реализован.

  • Основные пользователи: -

  • Что хранится: документы, факсы, медиа файлы, и.т.д.

  • Синоним: :SS_PUB

  • Expression: ss_public()

 :SITESHARE + get_subpath_public()
 :SITESHARE/public/
 /home/era/nfs/ + public

.

:SITESHARE_DOMAIN_DATA

  • Хранение различной информации доступной в данном домене на данном сайте.

  • Доступ из сценариев: Текущему домену полный доступ, остальным полный запрет.

  • Доступ из API: пока не реализован.

  • Основные пользователи: сценарии для манипулирования различными файлами.

  • Что хранится: документы, факсы, медиа файлы, голосовая почта.

  • Синоним: :SS_DOM

  • Expression: ss_domain()

 :SITESHARE + get_subpath_domain(Domain) + get_subpath_data()
 :SITESHARE/domains/[Domain]/data/
 /home/era/nfs/ + domains/domain.org/data/

.

:SITESHARE_SCRIPT_DATA

  • Хранение различной информации сценария в данном домене на данном сайте.

  • Доступ из сценариев: Текущему сценарию полный доступ, остальным сценариям текущего домена и другим доменам полный запрет.

  • Доступ из API: пока не реализован.

  • Основные пользователи: сценарии для манипулирования различными файлами, отправка записи на воспроизведение.

  • Что хранится: документы, факсы, медиа файлы.

  • Синоним: :SS_SCR

  • Expression: ss_script()

 :SITESHARE + get_subpath_script_data(Domain, ScriptType, ScriptId)
 :SITESHARE/domains/[Domain]/scripts/[ScriptType]/[ScriptId]/data/
 /home/era/nfs/ + domains/domain.org/scripts/ivr/1233-43223-43213411234/data/

.

LFS

Локальные внутри-серверные каталоги.

Table 3. Структура LFS:
Префикс Описание

:TEMP

  • Размещение и сбор записей разговоров от медиа-шлюзов к пользователям, временная файловая помойка веб-сервера.

  • Доступ из сценариев: Текущий экземпляр сценария полный доступ, остальным полный запрет.

  • Доступ из API: нет.

  • Особенности:

    • Папка самоочищается при завершении/падении сценария.

    • При перезапуске ноды удаляется папка ноды целиком.

  • Основные пользователи: IVR (запись и микшер, получение факса, получение e-mail, распознавание и синтез речи), локальные работы с файлами, файловая помойка веб-сервера.

  • Синоним: нет.

  • Expression: temp()

 :LOCAL + ScriptId + Pid
 :LOCAL/[ScriptId]/[Pid]/
 /home/temp/era/ + temp/nodename/ + 12341234-1234-1234-1234-123412341234/0.123.0/

.