Пример скрипта управления уровнями BGRadiusDialup

Материал из BiTel WiKi

Перейти к: навигация, поиск

Для версии 5.0

Пример 1

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

Описание алгоритма:

Есть три уровня сжатия: 1, 2 и 3. Соответственно это -20, -50 и -80% от базовой скорости канала. 0 - канал не сжат. Есть перловый скрипт на отдельной от биллинга машине, с доступом к реплике БД биллинга и ещё одной собственной БД со статистикой.

Скрипт запускается каждый час и делает:

  1. Если нет статистики за прошлые сутки, то создаёт её:
    1. Выбирает сколько внешнего входящего и на каком тарифе скачал вчера каждый из договоров и на каком тарифе.
    2. По каждой полученной записи вычисляется уровень сжатия по правилам, определённым для каждого конкретного тарифа (правила вида трафик от до и уровень сжатия).
    3. Полученные уровни сжатия заносятся в таблицу вида: дата - договор - уровень.
    4. Обновляется таблица с текущими уровнями сжатия. Таблица вида: договор - уровень. Значение уровня вычисляется как среднее значение уровня за сколько-то прошедших суток.
  2. Простая логика без обратной связи с каналом. Смотрит время в конфигурации и если час совпадает с указанным - значит полученные уровни сжатия нужно передать на радиус. Т.е. на радиус передаётся перечень договоров с ненулевыми уровнями сжатия. договор - уровень
  3. Если час не нужный - передаётся пустой список, т.е. у всех 0 уровень.
  4. В тарифном дереве добавляем узел "Фильтр по уровню".В нём можно указать через запятые уровни, подузлом может быть размещён узел "Зона".
  5. При очередной тарификации (апдейт пакет) договор переходит в какую-то зону и отправляется 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

Как примерно выглядит тариф:

Пример тарифа
Личные инструменты