Загрузка диска: nmon, atop, iostat -x
Информация о железе (мать, проц, память и т.п.): dmidecode
#!/bin/bash
my_str="str1"
if [[ $my_str = @(str1|str2|str3) ]]; then
echo "striтg found"
fi
См. Bash extglob (extended globbing)
Продолжаем мучать app_record.c
Задача: отловить набор внутреннего номера. Номера начинаются с "4".
Т.е. нужно прервать запись только по нажатию "4", и сообщить об этом факте.
Добавим опцию "e" в приложение Record. Для этого:
# mkdir initramfs_tmp
# cd initramfs_tmp
# cp /boot/initramfs-6.12.34-gentoo-dist.img .
# mv initramfs-6.12.34-gentoo-dist.img initramfs-6.12.34-gentoo-dist.xz
# unzstd initramfs-6.12.34-gentoo-dist.xz
# cat initramfs-6.12.34-gentoo-dist | cpio -idmv
Добавляем в CDR две колонки:
- hangupcause (int4);
- hangupparty (varchar или сделать отдельный тип enum 'caller|callee').
Далее добавляем в app_dial.c переменную типа char buf_hangup_str[8], по очереди пишем в неё значения ast_channel_hangupcause(chan) и ast_check_hangup(chan), и сбрасываем в CDR через ast_cdr_setvar.
Соответствующий патч ниже.
0) Логирование
-xlog и acc в LOCAL4 и Postgres
-настройка syslog-ng на запись LOCAL4 в opensips.log
-do_accounting("db|log","cdr|missed|failed") на начальный INVITE
1) Чёрные листы
-partition надо задать параметром, default не работает
-данные берутся из кэша, считываются из БД на старте, обновление через address_reload в cli
2) Регистрация, аутентификация, привязка к IP
-для аутентификации используются модули auth_db для доступа к таблице subscriber и auth для самой аутентификации
-данные зарегистрированного клиента сохраняются в таблицу location функцией save модуля registrar
-используются модули usrloc, registrar, auth, auth_db, signaling, tm, sl
-после аутентификации INVITE не забывать вызывать функцию consume_credentials(), чтобы удалить реквизиты из заголовка Authentication при дальнейшей пересылке
CARRIERROUTE
Модуль, обеспечивающий возможности маршрутизации, балансировки и черных списков. Он считывает маршруты из базы данных или файла конфигурации на старте OpenSIPS. Может использовать одно дерево маршрутизации (для одного оператора) или, при необходимости, для каждого пользователя — отдельное дерево маршрутизации (уникальное для каждого оператора) для маршрутизации на основе префикса номера. Поддерживает несколько доменов дерева маршрутов, например, для резервирования маршрутов или разных правил маршрутизации в зависимости от пункта назначения.
Модуль скалируется до более чем нескольких миллионов пользователей и способен обработать более нескольких сотен маршрутов. В сценариях балансировки рекомендуется использовать файл конфигурации, чтобы не вносить дополнительную сложность с запросами БД.
В целом, этот модуль можно использовать в качестве замены для модулей lcr и dispatcher, если у есть определенные требования к производительности, гибкости и/или интеграции, с которыми эти модули не справляются. Но для небольших установок, вероятно, имеет смысл использовать lcr и диспетчерский модуль.
Если модуль используется в маршруте ошибки (failure route), то необходимо вызвать функцию append_branch() после перезаписи RURI, чтобы сообщение ушло новому получателю.
Зависимости: tm, database (если используем БД)