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.
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.
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
---
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
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] }}
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'