Пример скрипта управления уровнями BGRadiusDialup
Материал из BiTel WiKi
Для версии 5.0
Пример 1
Система расчитана на безлимитные тарифы с учётным периодом. В моменты пиковой загрузки канала производится выставление уровней сжатия для абонентов с большим потреблением трафика. Моменты пиковой загрузки определяются на основании конфигурации по дням недели и часам.
Описание алгоритма:
Есть три уровня сжатия: 1, 2 и 3. Соответственно это -20, -50 и -80% от базовой скорости канала. 0 - канал не сжат. Есть перловый скрипт на отдельной от биллинга машине, с доступом к реплике БД биллинга и ещё одной собственной БД со статистикой.
Скрипт запускается каждый час и делает:
- Если нет статистики за прошлые сутки, то создаёт её:
- Выбирает сколько внешнего входящего и на каком тарифе скачал вчера каждый из договоров и на каком тарифе.
- По каждой полученной записи вычисляется уровень сжатия по правилам, определённым для каждого конкретного тарифа (правила вида трафик от до и уровень сжатия).
- Полученные уровни сжатия заносятся в таблицу вида: дата - договор - уровень.
- Обновляется таблица с текущими уровнями сжатия. Таблица вида: договор - уровень. Значение уровня вычисляется как среднее значение уровня за сколько-то прошедших суток.
- Простая логика без обратной связи с каналом. Смотрит время в конфигурации и если час совпадает с указанным - значит полученные уровни сжатия нужно передать на радиус. Т.е. на радиус передаётся перечень договоров с ненулевыми уровнями сжатия. договор - уровень
- Если час не нужный - передаётся пустой список, т.е. у всех 0 уровень.
- В тарифном дереве добавляем узел "Фильтр по уровню".В нём можно указать через запятые уровни, подузлом может быть размещён узел "Зона".
- При очередной тарификации (апдейт пакет) договор переходит в какую-то зону и отправляется CoA запрос. Т.е. скорость применится через максимум <интервал между Update пакетами> минут после передачи команды радиусу от скрипта.
Собственно скрипт и его конфиг: Файл:Dialup level manage ex 1.zip
В конфигурационном файле что значит:
--- # Compression level for tariff 455 : - код тарифного плана - 5, 10, 1 - ГБ от ГБ до - уровень - 10, 20, 2 - 20, 0, 3
А это в какие моменты применять уровни:
--- # Use level rules - dw_from: 1, dw_to: 5, hour_from: 0, hour_to: 23 - dw_from: 6, dw_to: 7, hour_from: 0, hour_to: 23
Как примерно выглядит тариф: