Page tree

Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: HARD-602 Use $prev_session instead of $session for v5.1+

...

В условиях применения шаблона можно использовать данные подобранной ядром плагина записи о сессии, которые доступны через системную переменную $session $prev_session. Это позволяет, например, настраивать выбор шаблона сессии по данным профилей оборудования, которые были подобраны при обработке первого пакета аккаунтинга по сессии.

Code Block
titleПример настройки действия accounting — учёт L2TP-сессий с тарификация интернет-трафика для сессий с доступом в Интернет
collapsetrue
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: {}

...