Ciena Blue Planet MCP

The Message Bus Probe can be configured to obtain events from Blue Planet MCP Release 3.0.

The following configuration files are supplied with the probe for the integration:
  • message_bus_ciena_mcp.props
  • message_bus_ciena_mcp.rules
  • message_bus_ciena_notificationMap.rules
  • message_bus_ciena_resyncMap.rules
  • cienaMcpTransport.properties
  • ciena_mcp_parser_config.json
To enable the Message Bus Probe to connect to the Blue Planet MCP REST API, and to subscribe to notifications using Web Socket, use the following steps:
  1. Configure the probe properties in the message_bus_ciena_mcp.props file.
    Username           : 'username'
    Password           : 'password'
    Host               : 'mcp.ciena.com'
    Port               : 443
    EnableSSL          : 'true'
    KeyStore           : '/home/netcool/keystore.jks'
    KeyStorePassword   : 'password'
    
    RulesFile          : '$OMNIHOME/probes/linux2x86/message_bus_ciena_mcp.rules' 
    PropsFile          : '$OMNIHOME/probes/linux2x86/message_bus_ciena_mcp.props'
    TransportFile      : '$OMNIHOME/java/conf/cienaMcpTransport.properties'
    TransportType      : 'WebSocket'
    TransformerFile    : '$OMNIHOME/probes/linux2x86/ciena_mcp_parser_config.json'
    MessageLog         : '$OMNIHOME/log/message_bus_ciena_mcp.log'
    
    InitialResync      : 'true'
    HeartbeatInterval  : 1

    Update the properties with the values appropriate for your system.

  2. Configure the transport properties in the cienaMcpTransport.properties file.
       ## Add the required tokens to the keepTokens setting
       keepTokens=token,user,RSV_TOTAL:/meta/query-total
    
    ## Get the client token from /tron/api/v1/tokens
    loginRequestURI=/tron/api/v1/tokens
    loginRequestMethod=POST
    loginRequestContent={\"username\":\"++Username++\",\"password\":\"++Password++\"}

    ++Username++ and ++Password++ used in loginRequestContent will be substituted with the values specified for Username and Password in the probe properties file. When correctly authenticated, the response will contain a token which will be used in subsequent API queries.

    #Use with pagination
    resyncRequestURI=/nsa/api/v2_0/alarms/filter/filteredAlarms?filter%5Bstate%5D%5B%5D=ACTIVE&filter%5Bseverity%5D%5B%5D=CRITICAL%2CMAJOR%2CMINOR%2CWARNING&offset=++{0,100,100}++&pageSize=100
    resyncRequestMethod=GET
    resyncRequestHeaders=Authorization=Bearer ++token++

    These properties specify the Alarms (v2) REST API query to retrieve network alarms for resynchronisation purposes. This query filters only for active alarms having Critical, Major, Minor and Warning severities. The token value will be substituted with the token value retrieved from successful authentication with Blue Planet MCP.

    The query also uses an offset pagination functionality to enable the probe to request for data in batches. The offset value ++{start, stop, step}++ will be substituted with the correct number at runtime by the probe. In the example above, the offset number is derived by adding the start and step numbers namely: 0+100=100. You should specify 0 for the start value to indicate that the start of the returned data is from the first record and specify similar values for the step and pageSize. The stop value is currently not used to calculate the offset value and can be ignored. When 100 is specified for the step and pageSize, MCP returns 100 records for each queried batch.

    ## Connecting to Frostpush websocket
    webSocketURI=/kafkacomet/socket/websocket?user_id=++user++&vsn=1.0.0
    webSocketHeaders=Authorization=Bearer ++token++
    webSocketSubscribeMessage={\"topic\":\"topics:bp.aeprocessor.v1.alarms\",\"ref\":0,\"event\":\"phx_join\",\"payload\":{}}
    webSocketRefreshMessage={\"topic\":\"topics:bp.aeprocessor.v1.alarms\",\"event\":\"heartbeat\",\"payload\":{},\"ref\":\"1\"}
    webSocketRefreshInterval=20

    These properties configure the probe to subscribe to notifications using WebSocket. The ++user++ variable will be substituted with the value specified for Username in the probe properties file.

    To keep the WebSocket connection open, a heartbeat must be sent with a frequency of less than every 30 seconds. If the Blue Planet MCP server does not receive a heartbeat every 30 seconds, in the absence of any other messages, the connection will be terminated. The default webSocketRefreshInterval value is 20 seconds.

    ## Refresh the tokens every hour , change the interval if necessary.
    loginRefreshURI=/tron/api/v1/tokens
    loginRefreshMethod=POST
    loginRefreshContent={\"username\":\"++Username++\",\"password\":\"++Password++\"}
    loginRefreshInterval=3600
    refreshRetryCount=5

    Blue Planet MCP sets the session inactivity timeout value per system or user, this can be viewed and configured in the Blue Planet MCP UI System > Security > Inactivity tab. For the HTTP channel to be kept alive, loginRefreshInterval should be set to a value lower than the MCP session inactivity timeout value. The default loginRefreshInterval value is 3600 seconds. The default refreshRetryCount is 5 times.

  3. Configure the transformer properties in the ciena_mcp_parser_config.json file. Update the endpoint attribute of NotificationAlarmParser to match the webSocketURI used in the cienaMcpTransport.properties file.
    {
      "eventSources" : [ {
        "endpoint" : "/kafkacomet/socket/websocket",
        "name" : "NotificationAlarmParser",
        "config" : {
          "dataToRecord" : [ ],
          "messagePayload" : "json.payload.body.value",
          "messageHeader" : "",
          "jsonNestedPayload" : "json.event.alarm",
          "jsonNestedHeader" : "",
          "messageDepth" : 4
        }
      }, {
        "endpoint" : "resync",
        "name" : "ResyncAlarmParser",
        "config" : {
          "dataToRecord" : [ ],
          "messagePayload" : "json.data",
          "messageHeader" : "",
          "jsonNestedPayload" : "",
          "jsonNestedHeader" : "",
          "messageDepth" : 3
        }
      }, {
        "name" : "OtherAlarmParser",
        "type" : "ANY",
        "config" : {
          "dataToRecord" : [ ],
          "messagePayload" : "json",
          "messageHeader" : "",
          "jsonNestedPayload" : "",
          "jsonNestedHeader" : "",
          "messageDepth" : 5
        }
      }]
    }