Release Notes v6.0.0

Перейти к релизу

Функциональные изменения#

  • license-server проверяет непрерывное покрытие всего основного срока лицензии V3 лицензионными тарифами. Лицензии без тарифов или с разрывами покрытия отклоняются с причиной tariff_coverage_incomplete; портал показывает пояснение на русском языке. Проверка применяется также к ранее сохраненным лицензиям при их чтении.

  • Реализован multitenant / cloud режим работы, включая управление тенантами и tenant-scoped доступом:

    • Расширена ролевая модель управления доступом.
    • Реализовано использование управляемых через UI API-ключей с поддержкой ролевой модели.
    • Добавлена поддержка интеграции с IDM для управления пользователями в tenant-контексте.
    • Добавлен суперпользователь с полными правами и возможностью восстановления через специальный сценарий.
  • Полностью переработан сервис биллинга:

    • добавлена поддержка нескольких тарифов в одной лицензии, включая сроки действия и приоритеты их применения;
    • добавлены именованные назначения тарифов, позволяющие применять разные тарифы к отдельным точкам маршрутизации — сегментам SIP-маршрута;
    • поддерживаются тарификация по попыткам вызова или анализируемым вызовам, календарные месячные и квартальные отчетные периоды, абонентская плата и включенный объем;
    • поддерживаются ступенчатая тарификация и скидка за объем с пороговыми ценами;
    • тарифы поддерживают ставку НДС; в отчетах отдельно отображаются сумма без НДС, сумма НДС и итоговая сумма с НДС;
    • расчет выполняется для каждого вызова с фиксацией фактически примененных назначения, тарифа, единиц тарификации, цен и стоимости, поэтому последующие изменения тарифов не изменяют уже рассчитанные вызовы;
    • скорректированы правила расчета включенного объема, неполных периодов, скидок, НДС и округления денежных сумм;
    • добавлены новые отчеты о потреблении и детализация по дням, тарифам, назначениям, вызовам, попыткам, детекциям и оплачиваемым единицам;
    • в отчетности отдельно отображаются предварительная расчетная сумма по текущему открытому периоду и фактическая сумма к оплате по закрытым тарифным периодам;
    • в интерфейсе отчетов снято ограничение просмотра последними двенадцатью месяцами: для выбора доступны все расчетные периоды, предоставленные billing-server;
    • отчеты старого биллинга сохранены в отдельном архивном разделе без пересчета исторических данных по новым тарифам.
  • Реализована полная интеграция со SmartContact.

  • В профилях детекции добавлена возможность включать и отключать проигрывание роликов для пробития тишины.

  • Добавлена возможность сбора и анализа SIP trace, включая backend хранения и web UI для support-задач.

  • Полностью переработан раздел Статистика:

    • единым источником данных стал CDR, отдельное хранилище stats больше не используется;
    • CDR, результаты детекции и разметка объединены в одном отчете;
    • данные сохраняются в UTC (GMT), а отображаются в часовом поясе браузера;
    • существенно расширены критерии поиска;
    • добавлен отдельный фильтр расхождений между разметкой и результатом детекции;
    • добавлена выгрузка отчета в CSV.
  • Полностью переработана загрузка разметки:

    • добавлена загрузка CSV из портала, включая шаблон и встроенную справку;
    • незагруженные записи возвращаются с указанием причины;
    • поддерживается поиск по SIP Call-ID, Custom Call ID, а также по номеру клиента и времени вызова;
    • добавлено опциональное поле Источник для контроля качества источников разметки;
    • в поставку добавлен контейнер автоматической загрузки разметки из сторонней СУБД:
      • в одной установке SmartCPD можно развернуть несколько независимых экземпляров контейнера для разных источников данных и способов сопоставления;
      • контейнер можно развернуть отдельно от стека SmartCPD, в том числе в инфраструктуре заказчика, для удалённой загрузки разметки в облачную или находящуюся в другом сетевом контуре установку;
    • добавлен новый Markup API с поддержкой CSV и REST, заменяющий API отдельного сервиса markup-api.
  • Добавлено хранение детальной истории детекции:

    • каждый шаг детекции сохраняется с результатом, порядком и техническими деталями;
    • расширенный отчет показывает все шаги детекции для каждого вызова;
    • для каждого шага могут сохраняться полная запись и отдельная запись стороны клиента;
    • записи доступны для прослушивания и скачивания из портала;
    • сроки хранения управляются настройками: один день для полных записей, семь дней для записей клиента и 30 дней для истории детекций по умолчанию;
    • автоматическая очистка записей ограничивает использование дискового пространства.
  • Расширены бизнес-отчеты Grafana:

    • добавлен отчет для сравнения результатов A/B-тестирования;
    • отчет по ключевым показателям дополнен историческими данными и результатами разметки;
    • добавлен отчет для проверки работы анализатора аудиослепков;
  • Компоненты SIP:

    • добавлена возможность интеграции с rtpengine. Интеграция не входит в стандартную поставку SmartCPD и выполняется в рамках Professional Services;
    • добавлена опциональная поддержка облачного решения;
    • реализована поддержка мостовых подключений между частным и публичным сетевыми контурами (private -> public). Настройка такого сценария не входит в стандартную поставку SmartCPD и выполняется в рамках Professional Services;
    • расширен набор SIP-данных, сохраняемых и отображаемых в CDR.

Технические изменения#

  • Изменена архитектура решения. Актуальное описание приведено в документе Архитектура.
  • Изменены внешние API. Актуальные контракты приведены в документе Внешнее API:
    • авторизация всех внешних методов переведена на управляемые Bearer API-ключи и ролевые привилегии;
    • Prometheus API переведен со статического установочного токена на управляемые API-ключи с привилегией metrics.canSee;
    • IDM API переведен на v2, legacy IDM API v1 и связанный статический токен удалены;
    • Audit API переведен на v2;
    • прежний Markup API заменен новым Markup API /api/cdr/v1 в составе cdr-collector.
  • Добавлено описание ролевой модели в документе Ролевая модель
  • Добавлено описание процесса внедрения продукта в документе Внедрение
  • Добавлена поддержка автоматизированного CI-сценария для setup, генерации stack-артефактов, повторной конфигурации и деплоя, включая материализацию и ротацию Docker secrets.
  • Добавлена проверка согласованности часовых поясов: SMARTCPD_TZ и SMARTCPD_DB_TZ должны совпадать; setup проверяет это при интерактивной настройке и перед командами generate и deploy.
  • Упрощены скрипты подготовки PostgreSQL: вместо набора разрозненных сценариев используется единый flow создания БД, ролей и owner-based grants.
  • Упрощена настройка встроенного health-контура и оповещений Grafana: health alert rules переведены на единый operational window, а базовая отправка уведомлений на email теперь настраивается через стандартные SMTP override-параметры Grafana.
  • Сервис хранения логов log2file поддерживает автоматическую gzip-архивацию завершенных файлов за предыдущие дни и сохранение логов в отдельные файлы с настраиваемой агрегацией по часовым интервалам. Архивация включена по умолчанию.
  • Разделены контуры хранения исходных данных и данных биллинга:
    • cdr-collector хранит исходные CDR, историю детекций и разметку;
    • billing-server хранит только тарифы, их назначения и расчетные данные биллинга;
    • исходные CDR и отдельная таблица stats больше не хранятся и не дублируются в контуре биллинга.
  • На серверной стороне время сохраняется в UTC.
  • Отдельный пользователь БД markup больше не требуется; добавлен новый пользователь БД cdr.
  • Обновлены технические дашборды Grafana для cdr-collector и call-controller.
  • Компоненты SIP:
    • разделена обработка удаленного завершения установленного вызова (remote release) и отмены устанавливаемого вызова (CANCEL).
  • balancer:
    • sip_trace_id используется как уникальный бизнес-ключ вызова;
    • доработан механизм регистрации: при удалении или блокировке SIP-аккаунта на портале соответствующая запись удаляется из кэша usrloc.
  • Для устранения уязвимостей CVE обновлены не только компоненты приложений, но и базовые образы.

Исправленные ошибки#

  • При загрузке разметки из CSV с невалидным UTF-8 вместо 500 Internal Server Error возвращается 400 Bad Request с сообщением invalid UTF-8 string и расположением проблемного поля. Файл отклоняется до обработки записей.
  • Исправлены неточности setup flow и сопровождающей документации по настройке SmartContact, SIP trace и observability.
  • Исправлена фильтрация вызовов по Labels в разделе Статистика.
  • Скорректирован подсчет лимитов детекции.
  • billing-server:
    • уточнены критерии классификации попыток вызова и анализируемых вызовов для тарификации;
    • исправлен пропорциональный расчет включенного объема и абонентской платы для тарифных окон, действовавших только часть отчетного периода;
    • исправлены ошибки расчета биллинга, отображения и формирования отчетов и детализации.
  • balancer:
    • исправлена обработка коллизий BYE, возникавших при спрямлении вызова абонентом;
    • исправлена блокировка загрузчика конфигурации при одновременных запросах.

Совместимость и обновление#

Совместимость#

  • SmartCPD 5.2.12, 5.3.2 (см. процесс обновления).
  • Docker версии 26+.
  • Debian 12, РЕД ОС 8 (проверены).
  • PostgreSQL версии 14+.

Состав обновления#

  • Добавлен сервис cdr-collector.
  • Добавлен новый сервис billing-server.
  • Добавлен опциональный сервис billing-server-legacy для миграции с SmartCPD 5.x и доступа к архивным отчетам старого биллинга. Сервис разворачивается только при включении миграции старого биллинга и не запускается при чистой установке SmartCPD 6.0.0.
  • Добавлен опциональный сервис cdr-collector-markup-uploader для автоматической загрузки разметки из внешней СУБД.
  • Удален сервис markup-api; предоставляемый им API заменен новым Markup API в составе cdr-collector. Обновлены сервисы:
СервисОбраз:версия
amdamd:6.0.0
analyzeranalyzer:4.4.0
balancerbalancer:6.0.0
config-serversmartcpd-config-server:6.0.0
grafanagrafana:6.0.0
license-serverlicense-server:6.0.0
log2filelog2file:6.0.0
metricsmetrics:6.0.0
mgwmgw:6.0.0
portal-apiportal-api:6.0.0
portal-frontendportal-frontend:6.0.0
resolverservice-host-ip-resolver:6.0.0
sipcapture-serversipcapture-server:6.0.0
sipcapture-webappsipcapture-webapp:6.0.0
smartcpdsmartcpd-engine:6.0.0

Обновление с версий 5.x#

Прямое обновление до 6.0.0 поддерживается с 5.2.12 и 5.3.2. Перед обновлением исходная версия должна быть запущена, миграции БД завершены, работоспособность компонентов проверена. Для более ранних версий необходимо сначала выполнить обновление до указанной версии своей линейки.

Примеры путей обновления:

  • 5.2.2 → 5.2.8 → 5.2.12 → 6.0.0.
  • 5.3.0 → 5.3.2 → 6.0.0.

Обновление требует миграции данных из legacy-таблиц cdr, stats и markup в новый контур cdr-collector. Порядок обновления и требования к миграции описаны в документе «Обновление SmartCPD».

На каждой промежуточной версии необходимо запустить SmartCPD, дождаться завершения миграций БД и проверить работоспособность компонентов.

Ограничения и особенности#

Контроль тарифов для облачных назначений#

Для облачных назначений наличие доступного тарифа у тенанта необходимо контролировать вручную, включая создание тенанта, изменение доступности тарифов и окончание срока их действия. При допуске новых вызовов платформа не проверяет наличие тарифа в биллинге и не блокирует вызовы из-за его отсутствия. Если на момент начала вызова не найден применимый тариф ни по назначению вызова, ни по основному назначению default, расчетный факт сохраняется с ошибкой no_effective_tariff, без примененного тарифа и со стоимостью 0. Вызов остается без рассчитанной стоимости; последующее появление тарифа не запускает автоматический пересчет этого факта.

Это ограничение ручного контроля не относится к тарифному покрытию валидной файловой лицензии V3: license-server проверяет, что хотя бы один тариф присутствует, а интервалы тарифов без разрывов покрывают весь срок действия лицензии. При нарушении этого правила лицензия признается невалидной и не предоставляет права на новые вызовы. Если другой действующей лицензии или применимой cloud policy нет, новые вызовы не допускаются. Допуск по cloud policy относится к облачному сценарию и требует ручного контроля тарифов, описанного выше.

Кодировка CSV-файлов разметки#

Загрузка разметки из CSV поддерживает только UTF-8. Файлы в других кодировках, включая Windows-1251, необходимо пересохранить в UTF-8 до отправки; автоматическое перекодирование не поддерживается.

Внешний Audit API#

Внешний Audit API в текущем релизе доступен только на уровне платформы. Tenant-scoped авторизация и получение журнала аудита в контексте клиента пока не поддерживаются.

Timezone приложения и БД#

В SmartCPD 6.0.0 timezone запуска контейнеров (SMARTCPD_TZ) должна совпадать с timezone сервера БД (SMARTCPD_DB_TZ). Setup проверяет это соответствие и отклоняет генерацию или развертывание конфигурации с разными значениями, поэтому установку и изменение конфигурации необходимо выполнять через smartcpd-setup.sh.

Потребление памяти сервисом amd#

При длительной работе amd на предельных нагрузках возможно повышенное или неравномерное потребление RAM. В контейнер amd уже включена библиотека libtcmalloc_minimal из Google Performance Tools. Если на большой нагрузке требуется стабилизировать профиль потребления памяти, библиотеку можно подключить через LD_PRELOAD в compose.override.yml:

services:
  amd:
    environment:
      LD_PRELOAD: "/usr/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"

После изменения compose.override.yml необходимо перегенерировать и применить стек:

./smartcpd-setup.sh generate
./smartcpd-setup.sh deploy

tcmalloc использует отдельные кэши памяти для потоков, сокращая блокировки при выделении памяти. При длительной высокой нагрузке это может повысить производительность amd и сделать потребление RAM более плавным и стабильным.

Известные проблемы#

  • Первичная инициализация биллинга после крупной миграции. При первичной инициализации billing-server после миграции cdr-collector может возвращать ошибку 500 Internal Server Error. Кроме того, биллинг выполняет избыточный проход по всей истории CDR до заданной даты начала расчёта вместо старта с нужной даты. Проблема сказывается только на крупных миграциях с объёмом более 40 млн записей CDR. Исправлено в 6.0.1.
  • Первичная инициализация тарифов облачных тенантов. Для облачных тенантов, не перечисленных явно в тарифе, назначение default может не создаваться с даты начала расчёта. При открытии списка назначений в UI оно создаётся текущей датой, в том числе до завершения первичной инициализации. Более ранние вызовы без применимого назначения получают ошибку no_effective_tariff и стоимость 0. Исправлено в 6.0.1. Уже созданные назначения и рассчитанные факты автоматически не исправятся.
  • [#25183] Full Control Group. Механизм Full Control Group в данном релизе не работает.
  • [#25373] Метрики дашборда SIP-вызовов. Метрики Unavaialable и SCPD Error в дашборде SIP-вызовы работают некорректно.

Дата формирования

Powered by Altuera