blob: a897086bde814a0eef92a1a25971e2fcae0a4332 [file] [log] [blame]
/*
* Copyright 2019-present Open Networking Foundation
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function () {
'use strict';
const logger = require('../config/logger.js');
let serviceEvents = {
// probe -> controller -> probe
EVENT_EMIT: 'cord.workflow.ctlsvc.event.emit'
};
// WebSocket interface for emitting an event
// Message format:
// {
// topic: 'cord.workflow.ctlsvc.event.emit',
// message: {
// req_id: <req_id>, // optional
// topic: <topic>,
// message: <message>
// }
// }
const emitEvent = (topic, message, cb) => {
const eventrouter = require('./eventrouter.js');
let errorMessage;
if(!message) {
// error
errorMessage = `Message body for topic ${topic} is null or empty`;
logger.log('warn', `Return error - ${errorMessage}`);
cb(errorMessage, false);
return;
}
if(!('topic' in message)) {
// error
errorMessage = `field 'topic' does not exist in message body - ${JSON.stringify(message)}`;
logger.log('warn', `Return error - ${errorMessage}`);
cb(errorMessage, false);
return;
}
if(!('message' in message)) {
// error
errorMessage = `field 'message' does not exist in message body - ${JSON.stringify(message)}`;
logger.log('warn', `Return error - ${errorMessage}`);
cb(errorMessage, false);
return;
}
let result = eventrouter.emitEvent(
message.topic,
message.message
);
if(!result) {
errorMessage = `failed to emit event ${message.topic} - ${message.message}`;
cb(errorMessage, false);
}
else {
cb(null, true);
}
return;
};
const getRouter = () => {
return {
emitEvent: {
topic: serviceEvents.EVENT_EMIT,
handler: emitEvent
}
};
};
module.exports = {
serviceEvents: serviceEvents,
getRouter: getRouter
};
})();