Versions Compared

Key

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

Applications can This document provides client application developers the background needed to subscribe to YOUnite MDM service event notifications to get notification topics and event types so they can receive real-time updates to MDM events.  Notifications are classified by topics and event types.  A   A topic is created for each MDM zone and for each MDM zone there are various notification types.


...

Note: Currently we are using simple username/password authentication between the YOUnite UI and AMQ. All interaction between zones and clients that are tied to zones (e.g. YOUnite UI) should interact with AMQ with OAuth tokens or even better SSO→OAuth.  See YOUMDM-103.

...

Subscribing to Topics

MDM uses the Apache ActiveMQ messaging system which leverages the STOMP text-based messaging protocol.  STOMP allows clients to be written easily.  A STOMP protocol implementation in node.js can be found here.

Adding STOMP

<Waiting on snippet on adding STOMP>

Configuring STOMP

<Waiting on snippet on configuration>

Adding STOMP Handler

<Waiting on snippet on setting up STOMP handler>

Subscribing to a Topic

<Waiting on snippet for subscribing>

...

Add the following libraries in your local workspace:

  • amq_jquery_adapter.js
  • amq.js
  • stomp.js

...

Note: Hari is working on inserted the STOMP libraries into the project . There may be some changes to the following using npm to install the libraries.

...

Injecting STOMP Libraries

Directly add to the library section of your source code e.g. (use the appropriate path to your libraries):


Code Block
{src: `${this.ASSETS_SRC}/vendor-libs/js/amq_jquery_adapter.js`, inject: true, vendor: true},
{src: `${this.ASSETS_SRC}/vendor-libs/js/amq.js`, inject: true, vendor: true},
{src: `${this.ASSETS_SRC}/vendor-libs/js/stomp.js`, inject: true, vendor: true},


Subscribing to a Topic

Setup your credentials in your configuration (e.g. config.ts)

Code Block
languagejs
//
// Define these in a config file e.g. config.ts
//
ACTIVEMQ_CLIENT: process.env.ACTIVEMQ_CLIENT ? process.env.ACTIVEMQ_CLIENT : 'ws://docker.local:61614',
ACTIVEMQ_USER_NAME: process.env.ACTIVEMQ_USER_NAME ? process.env.ACTIVEMQ_USER_NAME : 'admin',
ACTIVEMQ_PASSWORD: process.env.ACTIVEMQ_PASSWORD ? process.env.ACTIVEMQ_PASSWORD : 'admin',


Setup your handler:

Code Block
languagejs
subscribeNotification() {
	this.loggedInZoneUuid = localStorage.getItem('zoneUuid');
	this.client = Stomp.client(Config.ACTIVEMQ_CLIENT);
	let topicUrl = '/topic/' + this.loggedInZoneUuid;
	let connectHeaders = {
		login: Config.ACTIVEMQ_USER_NAME,
		passcode: Config.ACTIVEMQ_PASSWORD,
		'client-id': this.loggedInZoneUuid
	};
	let componentRef = this;
	
	let callback = function (message) {
		// called when the client receives a STOMP message from the server
		componentRef.toastr.info(message.body);
		componentRef.incrementUnreadNotificationCount();
	};
	let subscribeHeaders = {'activemq.subscriptionName': this.loggedInZoneUuid};
	this.client.connect(connectHeaders, function () {
		componentRef.client.subscribe(topicUrl, callback, subscribeHeaders);
	}
);


Disconnect from the handler on logout, this should be in the same file as the above handler:


Code Block
this.client.disconnect();

Notification Event Types

The following is list of event types that a subscriber can be notified of on a per zone (topic) basis.  Each time an event is triggered it publishes a new notification of a given event type  .  

EventEvent TypeDefault ScopeAdditional Payload
A zone is createdZONE_POSTALLnone
A zone is updatedZONE_PUTALLnone
A zone is deletedZONE_DELETEALLnone
A zone's thumbnail image is updated (TBD)ZONE_THUMBNAIL_PUTALLTBD

A data domain is created or a new version of

of the data domain has been created

DOMAIN_POSTALLTBD

A data domain has been created

DOMAIN_PUTALLTBD
A data domain has been deletedDOMAIN_DELETE??DOMAIN_NAME_POSTA data domain has been updatedDOMAIN_NAME_PUT?DOMAIN_DATA_POST?DOMAIN_DATA_DELETEALLTBD
An MDR has been created for a given data domain (TBD)DOMAIN_NAME_DATA_POSTALLTBD
An MDR has been updated in a given data domain . (TBD)DOMAIN_NAME_DATA_PUTALLTBD
An MDR has been deleted in a give data domain . (TBD)DOMAIN_NAME_DATA_DELETE

Payload

The payload for an event includes:

KeyDescription
Event Type (see above)Originating zone UUIDOriginating zone nameStatusDescription

Message

Date CreatedKey/Value map with additional information (NOTE: that should be documented for each event type)ALLTBD


Notification Event Response Body

The notification's JMS header includes the following:

keyvalue
descriptionA full description of the event - i.e. a full concatenation of the information described below for easy displaying.
changeVersionThe resources change version.
createdDateThe date the resource was created.
NameThe resource name
message-idThe JMS message ID.
dateCreatedUnix timestamp of when the event notification was sent

uuid

Zone uuid of target resource
eventTypeOne of the above described "Notification Event Types"
originatorNameThe name of the zone that generated the event.
originatorUuid

The UUID of the zone that generated the event.

timestampThe time the notification was created.
optionalOther key/values that are appropriate for the notification type


Requesting Notification Log

A client can make a request to get the log history for all notifications sent to their zone.  The user provides their zone and a from and to date.