Asterisk: extconfig.conf - Realtime
Реалтайм Архитектура Asterisk - набор драйверов и функций для конфигурации в режиме реального времени.
Существует два типаконфигурации - статический и динамический:
- Статический хранит конфигурации в БД, как конфигурационные файлы и также обновляет данные при перезагрузке модулей.
- Динамический используется для создания и обновления объектов в режиме реального времени, при совершении вызовов.
Оба режима могут использоваться одновременно.
Реалтайм архитектура поддерживает разные типы хранилищ.
В данный момент, большинство драйверов основаны на SQL,
но есть и поддержка других методов, например LDAPи CURL.
В данный момент поддерживаются следующие бэкенды:
- ODBC: при помощи UnixODBC, интегрированная в Asterisk UnixODBC подсистема поддерживает множество разных БД.
- MySQL: нативная поддержка MySQL, интегрирована в Asterisk
- PostgreSQL: нативная поддержка PostgreSQL, интегрирована в Asterisk
- SQLite и SQLite3: для небольших БД можно использовать SQLite3.
- LDAP: получайте учетные данные из LDAPдиректорий.
- cURL: Получайте и отправляйте данные веб приложений и связанных с ними БД.
Статическая конфигурация
Использует базы данных, как хранилище статических конфигураций.
Конфигурации обновляются при загрузке модулей, как и в случае с
конфигурационными файлами.
Все настройки записываются под одной категорией - [settings]
Конфиг ⇒ Драйвер БД, база данных, таблица базы данных.
Если таблица не указана, будет использовано имя конф. файла.
file.conf => driver,database[,table[,priority]]
Пример записи для загрузки 'queues.conf' через ODBC и 'extensions.conf' из SQlite:
queues.conf => odbc,asterisk,ast_config extensions.conf => sqlite,asterisk,ast_config
Следующие конфиги НЕ МОГУТбыть использованы в реалтайм хранилище:
- asterisk.conf
- extconfig.conf (данный файл)
- logger.conf
Также, некоторые конфиги не загрузятся из Realtime хранилища,
если драйвер БД (хранилища) не был, ранее,
загружен оператором 'preload' в конфиге 'modules.conf':
- manager.conf
- cdr.conf
- rtp.conf
- features.conf
- cel.conf
- indications.conf
Списки контроля доступа (ACL) также не смогут быть использованы
в manager.conf без предварительной загрузки драйвера хранилища.
/etc/asterisk/modules.conf
[modules] preload => res_odbc.so preload => res_config_odbc.so
Структура таблицы статической базы данных
Структура статической таблицы БД реалтайм архитектуры Asterisk
значительно отличается от, собственно, Realtimeтаблиц.
Она предполагает единую схему для всех подключаемых конфигов.
static ast_config.sql
create table ast_config ( id int(11) NOT NULL auto_increment, cat_metric int(11) NOT NULL default '0', var_metric int(11) NOT NULL default '0', commented int(11) NOT NULL default '0', filename varchar(128) NOT NULL default '', category varchar(128) NOT NULL default '', var_name varchar(128) NOT NULL default '', var_val varchar(128) NOT NULL default '', PRIMARY KEY (id), KEY `filename_comment` (`filename`,`commented`) )ENGINE = InnoDB;
- 'cat_metric' и 'var_metric' определяют порядок (очередность). 'cat_metric' во всей конфигурации, а 'var_metric', внутри категории. Метрика с меньшим значением представляется раньше, метрика с большим позднее. На примере порядка выбора кодеков в sip.conf, это будет работать так: 'disallow=all' - метрика 0 представляется 1-й, затем 'allow=alaw' - метрика 1 и далее 'allow=g729'
- Если поле 'commented' не равно '0', строка считается закомметированной и игнорируется.
- `filename` - Конфиг которому предназначены данные (например extensions.conf).
- 'category' - контекст диалплана или категория конфига.
- `var_name` - опция )параметр) конфига, напрмер extenв диалплане
- `var_val` - собственно данные, после знака '⇒' в конфиге
Пример
extconfig.conf
extensions.conf => odbc,asterisk,ast_config
Опции и диалплан в extensions.conf:
[general] static=yes [globals] RECDIR=/mnt/record ; Директория записи [from-internal] exten => _9X.,1,Dial(PJSIP/${EXTEN:1}@trunk,60,trU(sub-monitor,s,1) exten => _9X.,n,Hangup [sub-monitor] exten => s,1,Noop(**rec to mount**) exten => s,n,MixMonitor(${RECDIR}/${UNIQUEID}.wav) exten => s,n,Return
В таблице ast_config будут представлены так:
MariaDB [asterisk]> select * from ast_config; +----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+ | id | cat_metric | var_metric | commented | filename | category | var_name | var_val | +----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+ | 1 | 0 | 0 | 0 | extensions.conf | general | static | yes | | 2 | 1 | 0 | 0 | extensions.conf | globals | RECDIR | /mnt/record | | 3 | 2 | 0 | 0 | extensions.conf | from-internal | exten | _9X.,1,Dial(PJSIP/${EXTEN:1}@siptrunk,60,trU(sub-monitor,s,1) | | 4 | 2 | 1 | 0 | extensions.conf | from-internal | exten | _9X.,n,Hangup | | 5 | 3 | 0 | 0 | extensions.conf | sub-monitor | exten | s,1,Noop(**rec to mount**) | | 6 | 3 | 1 | 0 | extensions.conf | sub-monitor | exten | s,n,MixMonitor(${RECDIR}/${UNIQUEID}.wav) | | 7 | 3 | 2 | 0 | extensions.conf | sub-monitor | exten | s,n,Return | +----+------------+------------+-----------+-----------------+---------------+----------+--------------------------------------------------------------------+ 7 rows in set (0.00 sec)
; Realtime configuration engine ; ; maps a particular family of realtime ; configuration to a given database driver, ; database and table (or uses the name of ; the family if the table is not specified ; ;example => odbc,asterisk,alttable,1 ;example => mysql,asterisk,alttable,2 ;example2 => ldap,"dc=oxymium,dc=net",example2 ; ; Additionally, priorities are now supported for use as failover methods ; for retrieving realtime data. If one connection fails to retrieve any ; information, the next sequential priority will be tried next. This ; especially works well with ODBC connections, since res_odbc now caches ; when connection failures occur and prevents immediately retrying those ; connections until after a specified timeout. Note: priorities must ; start at 1 and be sequential (i.e. if you have only priorities 1, 2, ; and 4, then 4 will be ignored, because there is no 3). ; ; ; Possible driver backends: ; ; "odbc" is shown in the examples below, but is not the only valid realtime ; engine. Here are several of the possible options: ; odbc ... res_config_odbc ; sqlite ... res_config_sqlite ; sqlite3 ... res_config_sqlite3 ; pgsql ... res_config_pgsql ; curl ... res_config_curl ; ldap ... res_config_ldap ; mysql ... res_config_mysql (available via add-ons in menuselect) ; ; Note: The res_config_pgsql and res_config_sqlite backends configure the ; database used in their respective configuration files and ignore the ; database name configured in this file. ; ;iaxusers => odbc,asterisk ;iaxpeers => odbc,asterisk ;sippeers => odbc,asterisk ;sipregs => odbc,asterisk ; (avoid sipregs if possible, e.g. by using a view) ;ps_endpoints => odbc,asterisk ;ps_auths => odbc,asterisk ;ps_aors => odbc,asterisk ;ps_domain_aliases => odbc,asterisk ;ps_endpoint_id_ips => odbc,asterisk ;voicemail => odbc,asterisk ;extensions => odbc,asterisk ;meetme => mysql,general ;queues => odbc,asterisk ;queue_members => odbc,asterisk ;queue_rules => odbc,asterisk ;acls => odbc,asterisk ;musiconhold => mysql,general ;queue_log => mysql,general ; ; ; While most dynamic realtime engines are automatically used when defined in ; this file, 'extensions', distinctively, is not. To activate dynamic realtime ; extensions, you must turn them on in each respective context within ; extensions.conf with a switch statement. The syntax is: ; switch => Realtime/[[db_context@]tablename]/<opts> ; The only option available currently is the 'p' option, which disallows ; extension pattern queries to the database. If you have no patterns defined ; in a particular context, this will save quite a bit of CPU time. However, ; note that using dynamic realtime extensions is not recommended anymore as a ; best practice; instead, you should consider writing a static dialplan with ; proper data abstraction via a tool like func_odbc.