Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Jira
serverONAP Jira
columnskey,summary,type,created,updated,due,assignee,reporter,priority,status,resolution
serverId425b2b0a-557c-3c0c-b515-579789cceedb
keyCPS-393

Spike Description:

Investigate A&AI interface, especially how to register and receive DMaaP Events from A&AI. Investigate filter-options and consider some PoC code.

Background:

When a xNF object is added to A&AI, a DMaaP event, AAI-EVENT is created. A&AI handles the publishing of this event. To be notified of the AAI-EVENT, CPS will need to register on DMaaP Message Router.

DMaaP offers a client plugin called DMaaP Client, which can be found here. This Client can be used to register to a DMaaP event. The PoC code will use this client to show that CPS can listen for and receive DMaaP events.

Example of DMaaP Event when a pnf is added to A&AI:

Code Block
themeRDark
titleDMaaP Event
linenumberstrue
{"cambria.partition":"AAI",
    "event-header":{
        "severity":"NORMAL",
        "entity-type":"pnf",
        "top-entity-type":"pnf",
        "entity-link":"/aai/v23/network/pnfs/pnf/dummyTest30",
        "event-type":"AAI-EVENT",
        "domain":"dev",
        "action":"CREATE",
        "sequence-number":"0","id":"577eb229-7c74-4cf8-84ab-79f66f4899b2",
        "source-name":"SO",
        "version":"v23",
        "timestamp":"20210701-12:45:09:351"
    },
    "entity":{
        "ipaddress-v4-oam":"100.10.20.20",
        "equip-type":"example-equip-type-val-20348",
        "equip-vendor":"example-equip-vendor-val-52182",
        "ipaddress-v6-oam":"",
        "orchestration-status":"Active",
        "pnf-name2":"dummypnf-1597953056126",
        "equip-model":"example-equip-model-val-8370",
        "in-maint":false,
        "resource-version":"1625143508438",
        "pnf-id":"927b2580-36d9-4f13-8421-3c9d43b7a75e",
        "management-option":"example-management-option-val-72881",
        "spare-equipment-indicator":false,
        "pnf-name":"dummyTest30"}
}



Proof Of Concept Code:

To use the DMaaP Client we need the following dependency in our pom.xml file.

Code Block
languagexml
themeRDark
titleDMaaP Client dependency in pom.xml
linenumberstrue
    <dependency>
        <groupId>org.onap.dmaap.messagerouter.dmaapclient</groupId>
        <artifactId>dmaapClient</artifactId>
        <version>1.1.12</version>
    </dependency>

The following builder method is used to create an instance of a DMaaP Consumer Client:

Code Block
languagejava
themeRDark
titleExample DMaaP Consumer Client
linenumberstrue
final MRConsumerImpl mrConsumer = new MRConsumerImpl.MRConsumerImplBuilder().setHostPart(hosts)
                .setTopic("AAI-EVENT").setConsumerGroup("onap-cps").setConsumerId("cps-ncmp").setTimeoutMs(10000)
                .setLimit(1000).setFilter("").setApiKey_username(null)
                .setApiSecret_password(null).createMRConsumerImpl();

For the Consumer client to be created we need to pass in the values for the following attributes:

Attribute nameAttribute DescriptionExample
setHostPart

The host and port of the DMaaP server in the format <host:port>. This method takes a collection of strings, check example.


Code Block
languagejava
themeRDark
titleExample of HostPart
linenumberstrue
final Collection<String> hosts = new ArrayList<>();
hosts.add("message-router.onap:3904");


setTopicThe topic name to consume from"AAI-EVENT"
setConsumerGroupA name that uniquely identifies the subscriber's group"onap-cps"
setConsumerIdWithin the subscriber's group, a name that uniquely identifies the subscriber's process"cps-ncmp"
setTimeoutMsTime in ms to wait for messages on the server before returning10000
setLimitMaximum number of messages that is returned per fetch1000
setFilterA customizable message filter, or null if no filtering is requirednull
setApiKey_usernameThe username of the client applicationnull
setApiSecret_passwordThe password for the usernamenull

The consumer also takes in the following properties:

Code Block
languagejava
themeRDark
titleSetting the Protocol Flag
linenumberstrue
# This Specifies the request header type used in the request to DMaaP server.
# Valid types:
#   DME2
#   HTTPAAF
#   HTTPAUTH
#   HTTPNOAUTH
# For this POC we use the HTTPNOAUTH, this supports both https and http protocols.

mrConsumer.setProtocolFlag("HTTPNOAUTH");


Code Block
languagejava
themeRDark
titleSetting the Protocol property
linenumberstrue
# The http protocol to use:
# http
# https

final Properties props = new Properties();
props.setProperty("Protocol", "http");
mrConsumer.setProps(props);


To fetch the following method needs to be called on the consumer object:

Code Block
languagejava
themeRDark
titleFetch Method Example
linenumberstrue
mrConsumer.fetch()

The POC used in the demo:

Code Block
languagejava
themeRDark
titleDemo POC code
linenumberstrue
collapsetrue
public static void main(String[] args) throws Exception {
	final Collection<String> hosts = new ArrayList<>();
    hosts.add("message-router.onap:3904");
    final MRConsumerImpl mrConsumer = new MRConsumerImpl.MRConsumerImplBuilder().setHostPart(hosts)
    	.setTopic("AAI-EVENT").setConsumerGroup("cg").setConsumerId("cid").setTimeoutMs(10000)
        .setLimit(1000).setFilter("").setApiKey_username(null)
        .setApiSecret_password(null).createMRConsumerImpl();
	mrConsumer.setProtocolFlag("HTTPNOAUTH");
    final Properties props = new Properties();
    props.setProperty("Protocol", "http");
    mrConsumer.setProps(props);
    log.info("fetch {}", mrConsumer.fetch());
}