...
В условиях применения шаблона можно использовать данные подобранной ядром плагина записи о сессии, которые доступны через системную переменную $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: {} |
...