...
В условиях применения шаблона можно использовать данные подобранной ядром плагина записи о сессии, которые доступны через системную переменную $session $prev_session. Это позволяет, например, настраивать выбор шаблона сессии по данным профилей оборудования, которые были подобраны при обработке первого пакета аккаунтинга по сессии.
| Code Block | ||||
|---|---|---|---|---|
| ||||
plugins:
base:
l2tp-by-login:
actions:
authorize:
...
authenticate:
...
accounting:
# Абонентский профиль подбирается так же, как и при авторизации
customer_profile:
<<: *customer_profile
# Операторский профиль не используется
provider_profile: {}
session:
# Набор атрибутов для формирования уникального внешнего идентификатора сессии
unique_id_attributes: [User-Name, NAS-IP-Address, Framed-IP-Address, NAS-Port]
# Шаблоны сессий
templates:
# Сессия с доступом в Интернет
- condition: ' $customer_profile.attributes.try("Service-State-Code") == "SERV_STATE_Provision"
or $session$prev_session.attributes.try("Service-State-Code") == "SERV_STATE_Provision"'
attributes: &session_attributes
Calling-Station-Id: $request.RAD_REQUEST.try("Calling-Station-Id")
Called-Station-Id: $request.RAD_REQUEST.try("Called-Station-Id")
Framed-IP-Address: $request.RAD_REQUEST.try("Framed-IP-Address")
NAS-Identifier: $request.RAD_REQUEST.NAS-Identifier
NAS-IP-Address: $request.RAD_REQUEST.NAS-IP-Address
Service-State-Code: $customer_profile.attributes.try("Service-State-Code")
Session-Template: '"Full access session"'
User-Name: $request.RAD_REQUEST.User-Name
# Тарификация потоковых услуг передачи данных
# Счётчики в пакетах приходят относительно сервера доступа — необходимо инвертировать направление для абонента
services:
# Услуга «Интернет-трафик вх.»
- service_id: 40213701
value: $request.RAD_REQUEST.try("Acct-Output-Octets", "0").to_i() + 4 * $request.RAD_REQUEST.try("Acct-Output-Gigawords", "0").to_i().gigabytes()
unit: bytes
# Услуга «Интернет-трафик исх.»
- service_id: 40213501
value: $request.RAD_REQUEST.try("Acct-Input-Octets", "0").to_i() + 4 * $request.RAD_REQUEST.try("Acct-Input-Gigawords", "0").to_i().gigabytes()
unit: bytes
# Гостевые сессии незарегистрированных абонентов — не нужно загружать в Гидру
- condition: ' $customer_profile.null?()
and $session$prev_session.customer_profile_id.empty?()'
attributes:
<<: *session_attributes
Session-Template: '"Guest session"'
load_to_hydra: false
# Сессии с ограниченным доступом — не нужно тарифицировать услуги
- attributes:
<<: *session_attributes
Session-Template: '"Restricted session"'
services: {} |
...