The Unified REST resource adaptors integrate with the Metaswitch Service Assurance Server (SAS). SAS provides a mechanism to record and search detailed end-to-end tracing of call handling.

See the SAS Facility section in the Rhino extended API documentation for more information about SAS tracing.

Note Rhino versions 2.6 and later support SAS tracing.

SAS tracing of incoming requests

The resource adaptor will create a new SAS trail for every incoming request, if configured to do so. This is the default behaviour. The incoming request will be recorded on this trail.

Tip The CreateIncomingSasTrail configuration property controls this behaviour. See Configuring the REST Resource Adaptor.

SAS tracing of outgoing requests

If there is a SAS trail attached to the OutgoingRestActivity, the REST resource adaptor will use the SAS trail to record the outgoing request. The REST resource adaptor will never create a SAS trail, so if there is no trail attached to the OutgoingRestActivity, then the request will not be recorded.

Rhino automatically sets the trail for activities created within event handlers for activities that have a trail attached. To disable tracing of outgoing HTTP requests in this scenario, the SAS trail on the OutgoingRestActivity must be explicitly set to null.

See the Rhino SAS Facility documentation for the details of this automatic trail handling behaviour.

SAS events

The REST resource adaptor raises a SAS marker for trail correlation with other SAS-enabled products when recording a request or response message. It raises a GENERIC_CORRELATOR_MARKER containing the X-Span-ID HTTP header, if it is set.

The following SAS event mini-bundles define all the SAS event that are recorded by a Unified REST resource adaptor.

SAS Events at the HTTP layer

HTTP layer SAS events mini-bundle
---
version: 1.0
events:
  INCOMING_MESSAGE:
    summary: 'Received HTTP {{ var_data[3] }} from {{ var_data[2] }}'
    details: |
      Received HTTP message from {{ var_data[2] }}:{{ static_data[1] }} on {{ var_data[1] }}:{{ static_data[0] }}

      <sas:fixed-width-font>{{ var_data[0] }}</sas:fixed-width-font>
    level: 60
    call_flow:
      caption: '{{ var_data[3] }}'
      data: '{{ var_data[0] }}'
      protocol: HTTP
      direction: in
      local_address: '{{ var_data[1] }}:{{ static_data[0] }}'
      remote_address: '{{ var_data[2] }}:{{ static_data[1] }}'
      message_id: '{{ var_data[4] }}'
      call_info_id: '{{ var_data[5] }}'
  OUTGOING_MESSAGE:
    summary: 'Sent HTTP {{ var_data[3] }} to {{ var_data[2] }}'
    details: |
      Sent HTTP message to {{ var_data[2] }}:{{ static_data[1] }} from {{ var_data[1] }}:{{ static_data[0] }}

      <sas:fixed-width-font>{{ var_data[0] }}</sas:fixed-width-font>
    level: 60
    call_flow:
      caption: '{{ var_data[3] }}'
      data: '{{ var_data[0] }}'
      protocol: HTTP
      direction: out
      local_address: '{{ var_data[1] }}:{{ static_data[0] }}'
      remote_address: '{{ var_data[2] }}:{{ static_data[1] }}'
      message_id: '{{ var_data[4] }}'
      call_info_id: '{{ var_data[5] }}'
  SENDING_MESSAGE:
    summary: 'Sending HTTP {{ var_data[0] }} to {{ var_data[1] }}:{{ var_data[2] }}'
    details: |
      Attempting connection to {{ var_data[1] }}:{{ var_data[2] }}
    level: 40
  SENDING_MESSAGE_VIA_MESH:
    summary: 'Sending HTTP {{ var_data[0] }} to {{ var_data[1] }} via service mesh at {{ var_data[2] }}:{{ var_data[3] }}'
    details: |
      Attempting connection to {{ var_data[1] }} via service mesh at {{ var_data[2] }}:{{ var_data[3] }}
    level: 40

SAS Events at the REST layer

Unified REST RA core SAS events mini-bundle
version: 1.0
events:

  # General

  # Not used, replaced with EVENT_FILTERED_NO_SERVICE_TO_HANDLE_REQUEST_EVENT
  NO_SERVICE_TO_HANDLE_REQUEST:
    level: 20
    summary: 'There is no service available to handle a REST request'
    details: |
      api: {{ var_data[0] }}
      operation: {{ var_data[1] }}
      event-type: {{ var_data[2] }}

  # Not used, replaced with NO_SBB_PROCESSED_REST_REQUEST_EVENT
  NO_SBB_PROCESSED_REQUEST:
    level: 20
    summary: 'No SBB processed a REST request'
    details: |
      event-type: {{ var_data[0] }}

  # Not used, replaced with FAILED_TO_PROCESS_REST_REQUEST_EVENT
  REQUEST_EVENT_FAILED_TO_BE_PROCESSED:
    level: 20
    summary: 'A REST request event failed to be processed'
    details: |
      event-type: {{ var_data[0] }}

  # Not used, replaced with EVENT_FILTERED_NO_SERVICE_TO_HANDLE_RESPONSE_EVENT
  NO_SERVICE_TO_HANDLE_RESPONSE:
    level: 20
    summary: 'There is no service available to handle a REST response'
    details: |
      event-type: {{ var_data[0] }}
      status-code: {{ var_data[1] }}

  # Not used, replaced with NO_SBB_PROCESSED_REST_RESPONSE_EVENT
  NO_SBB_PROCESSED_RESPONSE:
    level: 20
    summary: 'No SBB processed a REST request'
    details: |
      event-type: {{ var_data[0] }}
      status-code: {{ var_data[1] }}
      flags: {{ var_data[2] }}
      reason: {{ var_data[3] }}

  # Not used, replaced with FAILED_TO_PROCESS_REST_RESPONSE_EVENT
  RESPONSE_EVENT_FAILED_TO_BE_PROCESSED:
    level: 20
    summary: 'A REST response event failed to be processed'
    details: |
      event-type: {{ var_data[0] }}
      flags: {{ var_data[1] }}
      reason: {{ var_data[2] }}

  UNKNOWN_REQUEST_EVENT:
    level: 20
    summary: 'Failed to deduce an event-id for an incoming request'
    details: |
      api: {{ var_data[0] }}

  UNKNOWN_RESPONSE_EVENT:
    level: 20
    summary: 'Failed to deduce an event-id for an incoming response'
    details: |
      api: {{ var_data[0] }}

  NO_AVAILABLE_REST_API:
    level: 20
    summary: 'There is no REST API available'
    details: |
      path: {{ var_data[0] }}

  # security scheme related sas events

  REQUEST_FAILED_SECURITY_CHECK:
    level: 20
    summary: 'A security scheme rejected an incoming request'
    details: |
      api: {{ var_data[0] }}
      operation: {{ var_data[1] }}
      security-scheme: {{ var_data[2] }}
      required-scopes: {{ var_data[3] }}

  SECURITY_SCHEME_COULD_NOT_BE_APPLIED_TO_REQUEST:
    level: 20
    summary: 'A security scheme could not be applied to an outgoing request'
    details: |
      api: {{ var_data[0] }}
      operation: {{ var_data[1] }}
      security-scheme: {{ var_data[2] }}

  # New sas events used instead of the first six sas events

  EVENT_FILTERED_NO_SERVICE_TO_HANDLE_REQUEST_EVENT:
    level: 20
    summary: 'There is no service available to handle a REST request'
    details: |
      api: {{ var_data[0] }}
      operation: {{ var_data[1] }}
      event-type: {{ var_data[2] }}

  NO_SBB_PROCESSED_REST_REQUEST_EVENT:
    level: 20
    summary: 'No SBB processed a REST request event'
    details: |
      event-type: {{ var_data[0] }}

  FAILED_TO_PROCESS_REST_REQUEST_EVENT:
    level: 20
    summary: 'A REST request event failed to be processed'
    details: |
      event-type: {{ var_data[0] }}
      flags: {{ var_data[1] }}
      reason: {{ var_data[2] }}

  EVENT_FILTERED_NO_SERVICE_TO_HANDLE_RESPONSE_EVENT:
    level: 20
    summary: 'There is no service available to handle a REST response'
    details: |
      api: {{ var_data[0] }}
      operation: {{ var_data[1] }}
      event-type: {{ var_data[2] }}
      status-code: {{ var_data[3] }}

  NO_SBB_PROCESSED_REST_RESPONSE_EVENT:
    level: 20
    summary: 'No SBB processed a REST response event'
    details: |
      event-type: {{ var_data[0] }}
      status-code: {{ var_data[1] }}

  FAILED_TO_PROCESS_REST_RESPONSE_EVENT:
    level: 20
    summary: 'A REST response event failed to be processed'
    details: |
      event-type: {{ var_data[0] }}
      status-code: {{ var_data[1] }}
      flags: {{ var_data[2] }}
      reason: {{ var_data[3] }}
REST Ratype SPI SAS events mini-bundle
version: 1.0
events:

  # Client API request/response
  # Server API callback request/response

  SEND_REST_REQUEST:
    level: 60
    summary: 'Sending {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}'
    details: |
      messageType: {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}
      api: {{ var_data[0] }}
      operationId: {{ var_data[1] }}
      body: {{ var_data[2] | if_blank: "no body" }}

  RECEIVE_REST_RESPONSE:
    level: 60
    summary: 'Receiving {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}'
    details: |
      messageType: {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}
      api: {{ var_data[0] }}
      operationId: {{ var_data[1] }}
      status-code: {{ var_data[2] }}
      body: {{ var_data[3] | if_blank: "no body" }}

  # Server API request/response
  # Client API callback request/response

  RECEIVE_REST_REQUEST:
    level: 60
    summary: 'Receiving {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}'
    details: |
      messageType: {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}
      api: {{ var_data[0] }}
      operationId: {{ var_data[1] }}
      body: {{ var_data[2] | if_blank: "no body" }}

  SEND_REST_RESPONSE:
    level: 60
    summary: 'Sending {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}'
    details: |
      messageType: {{ static_data[0] | enum: "REST_MESSAGE_TYPE" }}
      api: {{ var_data[0] }}
      operationId: {{ var_data[1] }}
      status-code: {{ var_data[2] }}
      body: {{ var_data[3] | if_blank: "no body" }}

enums:

  REST_MESSAGE_TYPE:
    1: 'REST Request'
    2: 'REST Response'
    3: 'Callback REST Request'
    4: 'Callback REST Response'
Previous page Next page