Comprehensive service interaction scripting

The Metaswitch SIS is a very powerful, flexible, and extendable, script-driven service-interaction platform. You can write SIS scripts to:

  • Define trigger rules that control how an incoming request is mapped to a service composition that should be used to process it

  • Combine multiple services (including a combination of SCP, SIP AS and Rhino-hosted services) in a service composition — to form new service offerings

  • Manage service interaction to isolate and control how services interact

  • Adjust signaling parameters before, and after services are invoked

Powerful Java APIs for extending the SIS

Whilst the SIS scripting language is very flexible, some service-interaction scenarios may require further customisation. For maximum power and flexibility, you can augmente the SIS via very powerful Java-based extension capabilities and invoke Java extension components from SIS scripts. For example, you can query an operator specific platform, such as a subscriber database, to adjust signaling parameters based on the query result.

The table below compares the relative capabilities of a composition script versus an extension component:

Composition Script Extension Component

Protocol knowledge

Limited to triggering protocol

Can use any protocol available in the SLEE

Signaling parameters that can be modified

Limited to those provided by SIS variables

Any

Access to provisioned data

None

Any arbitrary internal or external data store

Monitor and change signaling parameters

With SIS extension capabilities, you can inspect and modify call-signaling parameters between the time the SIS decides to invoke a particular composition service and when it actually does. You can use this feature, for example, to select a specific external SCP or AS when triggering an external service, and modify call parameters before the trigger message is sent.

Comprehensive operations and management

You can manage the SIS by:

  • Command-line — sis-console, a command-line console, provides access to almost all SIS configuration functions, and all SIS management and provisioning functions. The sis-console is an extension to the Rhino Command-Line Console (rhino-console), so you can manage both Rhino and SIS from the same session.

or

  • Standard management interfaces  — any external client that can manage Rhino can also manage the SIS using interfaces defined as JMX MBeans, registered with the platform MBean server.

Example sis-console session

Below is an example of a sis-console session:

[admin@localhost (#1)] help
Available command categories:

auditing              Manage Rhino's auditing subsystem
bindings              Manage component bindings
config                Import, export, and manage Rhino configuration
deployment            Install, uninstall, and view SLEE deployable units
general               Rhino console help and features
housekeeping          Housekeeping and maintenance functions
license               Install, remove and view Rhino licenses
limiting              Manage Rhino's limiting subsystem
logging               Configure Rhino's internal logging subsystem
namespaces            Manage namespaces
persistence           Configure Rhino's external database persistence subsystem
profile               Manage profiles and profile tables
resources             Manage resource adaptors
sas                   Manage SAS tracing
security              Manage Rhino security
services              Manage services running in the SLEE
sis                   General SIS management operations
sis-address-subscriptionsManage SIS address subscriptions
sis-compositions      Deploy, undeploy, and view SIS compositions
sis-experimental-featuresManage SIS experimental features
sis-extension-refs    Create, remove, view, and manage SIS extension references
sis-interceptor-refs  Create, remove, view, and manage SIS interceptor references
sis-interceptors      Deploy, undeploy, and view SIS interceptors
sis-macros            Deploy, undeploy, and view SIS macros
sis-networkinterfaces Manage SIS network interfaces
sis-service-refs      Create, remove, view, and manage SIS service references and external platform definitions
sis-triggeraddresstracingManage SIS trigger address tracing
sis-triggers          Deploy, undeploy, view and activate SIS triggers
sleestate             Query and manage Rhino SLEE state
snmp                  Manage Rhino SNMP agent configuration
thresholdrules        Manage threshold alarm rules
trace                 View and set SLEE trace levels using the trace MBean
usage                 View SLEE Service usage statistics
usertransaction       Manage client-demarcated transaction boundaries

Enter help <category name | command name substring> for a list of available commands

[admin@localhost (#2)] listtriggers sis-in
TriggerID[name=CheckParameters,vendor=OpenCloud,version=1.0]
TriggerID[name=O-Trigger Handling,vendor=OpenCloud,version=1.0]
TriggerID[name=T-Trigger Handling,vendor=OpenCloud,version=1.0]
TriggerID[name=Generic Failure Handling,vendor=OpenCloud,version=1.0]

[admin@localhost (#3)] activatetrigger sis-in "name=O-Trigger Handling,vendor=OpenCloud,version=1.0"
Activated trigger TriggerID[name=O-Trigger Handling,vendor=OpenCloud,version=1.0]

[admin@localhost (#4)] installcomposition sis-in composition-7000.xml
Installed composition CompositionID[name=7000,vendor=OpenCloud,version=1.0] from file composition-7000.xml

[admin@localhost (#5)] listservices
ServiceID[name=Call Barring Service,vendor=OpenCloud,version=0.2]
ServiceID[name=Call Forwarding Service,vendor=OpenCloud,version=0.2]

[admin@localhost (#6)] activateservice "name=Call Barring Service,vendor=OpenCloud,version=0.2"
Activating service ServiceID[name=Call Barring Service,vendor=OpenCloud,version=0.2] on node(s) [101]
Service transitioned to the Active state on node 101

Online administration

The SIS supports administration and maintenance while actively processing network traffic. SIS components (such as macros, triggers, and service compositions) can be installed, upgraded, and removed from the SIS, subscribers provisioned, and other administration tasks performed all without loss of service. Moreover, you can use an internal audit-management function to validate the SIS configuration (for example, to find any service composition referencing a SLEE service that has not been activated).

Powerful and flexible fine-grained tracing

Debugging service problems experienced by individual subscribers can be difficult at the best of times. The SIS provides a targeted or fine-grained tracing feature that lets you enable various levels of debugging for specific service compositions or subscribed addresses. This means you do not need to enable debug logging for all calls that pass through the SIS — which can can overwhelmingly degrade performance — when you’re only interested in calls to (or with reference to) particular addresses, or that trigger certain compositions. With fine-grained tracing, you can debug isolated problems easily — without affecting the user experience of all other subscribers (whose calls are routed through the platform).

Example fine-grained tracing

Below are example sis-console commands and Rhino log output using fine-grained tracing.

sis-console commands

[admin@localhost (#1)] setfinegrainedtracingenabled sis-in true
Fine-grained tracing enabled

[admin@localhost (#2)] reload sis-in
Reloaded SIS RA Entity sis-in

[admin@localhost (#3)] updateaddresssubscription sis-in 3460001234 -debuglevel 3
Updated subscription 34600001234

Rhino log output

2011-03-20 15:27:51.843  Info   [trace.sis_in.insis.trigger-handler]  [[dialogID=8]]  dialog debugging triggered for [dialogID=8] at debug level 3 due to a subscription profile
2011-03-20 15:27:51.844  Info   [trace.sis_in.insis.trace.flow]    Cap 0  NW   ---------O_InitialDP clg=600001234 cld=610031274---------> INSIS
2011-03-20 15:27:51.902  Info   [trace.sis_in.insis.trace.detail]    Cap 0   NW -> INSIS(event:InitialDP)
    CCInitialDPRequestEvent[
        dialog=CGIN-Dialog:[dialogID=8]
        invokeId=0
        argument=[
            serviceKey 50
            ...
            ]
        ]

2011-03-20 15:27:51.903  Info   [trace.sis_in.insis.trigger-handler]  [[dialogID=8]]  accepting open request
2011-03-20 15:27:51.948  Info   [trace.sis_in.insis.trace.flow]    Cap 0  NW   <-----------------OpenResponse[accepted]------------------ INSIS
2011-03-20 15:27:51.948  Info   [trace.sis_in.insis.trace.detail]    Cap 0   NW <- INSIS(event:OpenRequest)
    DialogOpenAcceptEvent[
        dialog=CGIN-Dialog:[dialogID=8]
        responder=null
        ]

2011-03-20 15:27:51.949  Info   [trace.sis_in.insis.trigger-handler]  [[dialogID=8]]  setState(SERVICE_COMPOSITION_DISCOVERY -> MONITORING)
2011-03-20 15:27:53.075  Info   [trace.sis_in.insis.virtual-ssf]  [[dialogID=8]]  adding events [OpenRequest, InitialDP, Delimiter] to process queue
2011-03-20 15:27:53.076  Info   [trace.sis_in.insis.virtual-ssf]  [[dialogID=8]]  setFlags(INITIAL: [] -> [BUSY_INPUT])
2011-03-20 15:27:53.154  Info   [trace.sis_in.insis.virtual-ssf]  [[dialogID=8]]  beginning event processing of: [OpenRequest, InitialDP, Delimiter]
2011-03-20 15:27:53.154  Info   [trace.sis_in.insis.model]  [[dialogID=8]]  preprocessing [OpenRequest, InitialDP, Delimiter]
2011-03-20 15:27:53.173  Info   [trace.sis_in.insis.model]  [[dialogID=8]]  current call leg state: [1:{COLLECTED_INFO:[]}]
2011-03-20 15:27:53.173  Info   [trace.sis_in.insis.virtual-ssf]  [[dialogID=8]]  setState(INITIAL -> SERVICE_COMPOSITION_EVALUATION: [BUSY_INPUT])
2011-03-20 15:27:53.216  Info   [trace.sis_in.insis.virtual-ssf]   [[dialogID=8]]  service composition says to invoke ServiceRefID[VPN]
2011-03-20 15:27:53.235  Info   [trace.sis_in.insis.virtual-ssf]   [[dialogID=8]]  entering event processing loop for event(s): [OpenRequest, InitialDP, Delimiter]
...

Auditing

The SIS can keep an audit trail of key decisions made during processing of trigger events. You can enable audit logging for specific service compositions or subscribed addresses, or globally for all calls. The SIS outputs audit logs to their own SLEE tracer, so they can be easily filtered to a separate file log.

Example SIS audit log

Note For brevity, the following example truncates trigger event descriptions — actual audit traces include all event parameters.
2011-03-20 15:49:20.543  Info    [trace.sis_in.insis.audit]  [[dialogID=77]]:
    trigger event: InitialDP[dialog=...serviceKey=50,callingPartyNumber=...610012359... eventType=(o) collected info...calledPartyBCDNumber=...610032089...]
    address 34610012359 matched subscription 34610012359
    matched TriggerID\[name=O-Trigger Handling,vendor=OpenCloud,version=1.0]
    selected CompositionID[name=Originating,vendor=OpenCloud,version=1.0]
    invoking service VPN
    invoking service Call Barring
    invoking service Call Duration Logging
    composition completed
2011-03-20 15:49:20.577  Info    [trace.sis_in.insis.audit]  [[dialogID=78]]:
    trigger event: InitialDP[dialog=...serviceKey=50,callingPartyNumber=...610012359... calledPartyNumber=...610032089...eventType=(t) attempt authorized...]
    address 34610032089 matched subscription 34610032089
    matched TriggerID[name=T-Trigger Handling,vendor=OpenCloud,version=1.0]
    selected CompositionID[name=Terminating,vendor=OpenCloud,version=1.0]
    invoking service Call Barring
    evaluating service-input-interceptor
    service-input-interceptor complete; invoking service
    invoking service Call Forwarding
    invoking service Call Duration Logging
    composition completed
2011-03-20 15:49:21.513  Info    [trace.sis_in.insis.audit]  [[dialogID=79]]:
    trigger event: InitialDP[dialog=...serviceKey=50,callingPartyNumber=...620005076... calledPartyNumber=...610032605...eventType=(t) attempt authorized...]
    address 34610032605 matched subscription 34610032605
    matched TriggerID[name=T-Trigger Handling,vendor=OpenCloud,version=1.0]
    selected CompositionID[name=Terminating,vendor=OpenCloud,version=1.0]
    invoking service Call Barring
    evaluating service-input-interceptor
    service-input-interceptor complete; invoking service
    invoking service Call Forwarding
    invoking service Call Duration Logging
    composition completed
2011-03-20 15:49:22.452  Info    [trace.sis_in.insis.audit]  [[dialogID=80]]:
    trigger event: InitialDP[dialog=...serviceKey=50,callingPartyNumber=...610021092... eventType=(o) collected info...calledPartyBCDNumber=...620002308...]
    address 34610021092 matched subscription 34610021092
    matched TriggerID[name=O-Trigger Handling,vendor=OpenCloud,version=1.0]
    selected CompositionID[name=Originating,vendor=OpenCloud,version=1.0]
    invoking service VPN
    invoking service Call Barring
    invoking service Call Duration Logging
    composition completed
Previous page Next page