UNPKG

fog-controller

Version:

Fog Controller project @ iotracks.com

477 lines (440 loc) 17.9 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); var _baseManager = require('./../managers/baseManager'); var _baseManager2 = _interopRequireDefault(_baseManager); var _element = require('./../models/element'); var _element2 = _interopRequireDefault(_element); var _elementInstance = require('./../models/elementInstance'); var _elementInstance2 = _interopRequireDefault(_elementInstance); var _sequelize = require('./../utils/sequelize'); var _sequelize2 = _interopRequireDefault(_sequelize); var _appUtils = require('../utils/appUtils'); var _appUtils2 = _interopRequireDefault(_appUtils); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } /** * @file elementInstanceManager.js * @author Zishan Iqbal * @description This file includes the CURD operations for the elementInstance Model. */ var ElementInstanceManager = function (_BaseManager) { _inherits(ElementInstanceManager, _BaseManager); function ElementInstanceManager() { _classCallCheck(this, ElementInstanceManager); return _possibleConstructorReturn(this, (ElementInstanceManager.__proto__ || Object.getPrototypeOf(ElementInstanceManager)).apply(this, arguments)); } _createClass(ElementInstanceManager, [{ key: 'getEntity', value: function getEntity() { return _elementInstance2.default; } /** * @desc - updates the elementInstance which has the coresponding uuid * @param Integer, JSON object - uuid, data * @return Integer - returns the number of rows updated */ }, { key: 'updateByUUID', value: function updateByUUID(uuid, data) { return _elementInstance2.default.update(data, { where: { uuid: uuid } }); } }, { key: 'updateByUUIDAndName', value: function updateByUUIDAndName(uuid, name, data) { return _elementInstance2.default.update(data, { where: { $or: [{ uuid: uuid }, { name: name }] } }); } }, { key: 'updateByFogUuId', value: function updateByFogUuId(fog_uuid, data) { return _elementInstance2.default.update(data, { where: { iofog_uuid: fog_uuid } }); } }, { key: 'getByFogId', value: function getByFogId(fog_uuid) { return _elementInstance2.default.findAll({ where: { iofog_uuid: fog_uuid } }); } /** * @desc - uses a raw-query to join element_instance and data_tracks * @param Integer - instanceId * @return JSON - returns a Array of JSON objects with elementInstance and its related dataTracks */ // findByInstanceId(instanceId) { // let instanceConfigQuery = 'SELECT i.*, t.is_activated FROM element_instance i LEFT JOIN \ // data_tracks t ON i.track_id = t.ID \ // WHERE i.iofog_uuid in (:instanceId) AND (i.track_id = 0 OR t.is_activated = 1)'; // return sequelize.query(instanceConfigQuery, { // replacements: { // instanceId: instanceId // }, // type: sequelize.QueryTypes.SELECT // }); // } }, { key: 'findByUuId', value: function findByUuId(uuid) { return _elementInstance2.default.find({ where: { uuid: uuid } }); } }, { key: 'findByElementKey', value: function findByElementKey(elementKey) { return _elementInstance2.default.findAll({ where: { element_key: elementKey } }); } }, { key: 'findByTrackId', value: function findByTrackId(trackId) { return _elementInstance2.default.findAll({ where: { trackId: trackId } }); } }, { key: 'createElementInstanceObj', value: function createElementInstanceObj(elementInstance) { return _elementInstance2.default.create(elementInstance); } }, { key: 'createElementInstance', value: function createElementInstance(element, userId, trackId, config, elementName, logSize, fogInstanceId) { var elementInstance = { uuid: _appUtils2.default.generateInstanceId(32), trackId: trackId, element_key: element.id, config: config, name: elementName, last_updated: new Date().getTime(), updatedBy: userId, configLastUpdated: new Date().getTime(), isStreamViewer: false, isDebugConsole: false, isManager: false, isNetwork: false, registryId: element.registry_id, rebuild: false, rootHostAccess: false, logSize: logSize, volumeMappings: '{"volumemappings": []}', iofog_uuid: fogInstanceId }; return _elementInstance2.default.create(elementInstance); } }, { key: 'createStreamViewerInstance', value: function createStreamViewerInstance(streamViewerElementKey, userId, fogInstanceId, registryId) { var config = { 'accesstoken': _appUtils2.default.generateRandomString(32), 'filesizelimit': 200.0 }, elementInstance = { uuid: _appUtils2.default.generateInstanceId(32), trackId: 0, element_key: streamViewerElementKey, config: JSON.stringify(config), name: 'Stream Viewer', last_updated: new Date().getTime(), updatedBy: userId, configLastUpdated: new Date().getTime(), isStreamViewer: true, isDebugConsole: false, isManager: false, isNetwork: false, registryId: registryId, rebuild: false, rootHostAccess: false, logSize: 50, iofog_uuid: fogInstanceId, volumeMappings: '{"volumemappings": []}' }; return _elementInstance2.default.create(elementInstance); } }, { key: 'createNetworkInstance', value: function createNetworkInstance(element, userId, fogInstanceId, satelliteDomain, satellitePort1, satelliteCertificate, passcode, name, localPort, isPublic, trackId) { var netConfig = { 'mode': isPublic ? 'public' : 'private', 'host': satelliteDomain, 'port': satellitePort1, 'cert': satelliteCertificate, 'connectioncount': isPublic ? 60 : 1, 'passcode': passcode, 'localhost': 'iofog', 'localport': localPort, 'heartbeatfrequency': 20000, 'heartbeatabsencethreshold': 60000 }, elementInstance = { uuid: _appUtils2.default.generateInstanceId(32), trackId: trackId, element_key: element.id, config: JSON.stringify(netConfig), name: name, last_updated: new Date().getTime(), updatedBy: userId, configLastUpdated: new Date().getTime(), isStreamViewer: false, isDebugConsole: false, isManager: false, isNetwork: true, registryId: element.registry_id, rebuild: false, rootHostAccess: false, logSize: 50, volumeMappings: '{"volumemappings": []}', iofog_uuid: fogInstanceId }; return _elementInstance2.default.create(elementInstance); } }, { key: 'createDebugConsoleInstance', value: function createDebugConsoleInstance(consoleElementKey, userId, fogInstanceId, registryId) { var config = { 'accesstoken': _appUtils2.default.generateRandomString(32), 'filesizelimit': 200.0 }, elementInstance = { uuid: _appUtils2.default.generateInstanceId(32), trackId: 0, element_key: consoleElementKey, config: JSON.stringify(config), name: 'Debug Console', last_updated: new Date().getTime(), updatedBy: userId, configLastUpdated: new Date().getTime(), isStreamViewer: false, isDebugConsole: true, isManager: false, isNetwork: false, registryId: registryId, rebuild: false, rootHostAccess: false, logSize: 50, iofog_uuid: fogInstanceId, volumeMappings: '{"volumemappings": []}' }; return _elementInstance2.default.create(elementInstance); } }, { key: 'deleteElementInstancesByInstanceIdAndElementKey', value: function deleteElementInstancesByInstanceIdAndElementKey(instanceId, elementKey) { return _elementInstance2.default.destroy({ where: { iofog_uuid: instanceId, element_key: elementKey } }); } }, { key: 'deleteDebugConsoleInstances', value: function deleteDebugConsoleInstances(instanceId) { return _elementInstance2.default.destroy({ where: { $and: [{ element_key: { $lt: 5 } }, { name: { $like: '%Debug Console' } }, { iofog_uuid: instanceId }] } }); } }, { key: 'deleteStreamViewerInstances', value: function deleteStreamViewerInstances(instanceId) { return _elementInstance2.default.destroy({ where: { $and: [{ element_key: { $lt: 5 } }, { name: { $like: '%Stream Viewer' } }, { iofog_uuid: instanceId }] } }); } }, { key: 'deleteNetworkElements', value: function deleteNetworkElements(networkElementId1, networkElementId2) { return _elementInstance2.default.destroy({ where: { $or: [{ uuid: networkElementId1 }, { uuid: networkElementId2 }] } }); } }, { key: 'deleteNetworkElement', value: function deleteNetworkElement(elementId) { var deleteQuery = ' \ DELETE FROM element_instance \ WHERE UUID IN( \ SELECT networkElementId1 \ FROM network_pairing \ WHERE elementId1 = "' + elementId + '" \ ) \ OR UUID IN( \ SELECT networkElementId2 \ FROM network_pairing \ WHERE elementId1 = "' + elementId + '" \ ) \ '; return _sequelize2.default.query(deleteQuery); } }, { key: 'deleteByElementUUID', value: function deleteByElementUUID(instanceId) { return _elementInstance2.default.destroy({ where: { uuid: instanceId } }); } }, { key: 'deleteByElementUUIDs', value: function deleteByElementUUIDs(instanceIds) { return _elementInstance2.default.destroy({ where: { uuid: instanceIds } }); } }, { key: 'findRealElementInstanceByTrackId', value: function findRealElementInstanceByTrackId(trackId) { return _elementInstance2.default.findAll({ where: { trackId: trackId, isStreamViewer: false, isDebugConsole: false, isManager: false, isNetwork: false }, include: [{ model: _element2.default, as: 'element', attributes: ['id', 'name', 'category', 'containerImage', 'publisher'] }] }); } }, { key: 'findIntraTrackByUuids', value: function findIntraTrackByUuids(uuids) { var query = 'select DISTINCT(ei.uuid) as elementid, ei.name as elementname, e.name as elementtypename from element_instance ' + ' ei join element e on e.id = ei.element_key where ei.uuid in (:uuids)'; return _sequelize2.default.query(query, { replacements: { uuids: uuids }, type: _sequelize2.default.QueryTypes.SELECT }); } }, { key: 'findExtraTrackByUuids', value: function findExtraTrackByUuids(uuids) { var query = 'select DISTINCT(ei.uuid) as elementid, ei.name as elementname, e.name as elementtypename, ei.track_id as trackid, t.name as trackname ' + ' from element_instance ei join element e on e.id = ei.element_key join data_tracks t on t.id = ei.track_id where ei.uuid in (:uuids)'; return _sequelize2.default.query(query, { replacements: { uuids: uuids }, type: _sequelize2.default.QueryTypes.SELECT }); } }, { key: 'findOtherTrackDetailByUuids', value: function findOtherTrackDetailByUuids(uuids) { var query = 'select DISTINCT(ei.uuid) as elementid, ei.name as elementname, e.name as elementtypename, ei.track_id as trackid, t.name as trackname, ' + ' ei.iofog_uuid as instanceId, f.name as instanceName from element_instance ei join element e on e.id = ei.element_key join data_tracks t ' + ' on t.id = ei.track_id join iofogs f on ei.iofog_uuid = f.uuid where ei.UUID in (:uuids)'; return _sequelize2.default.query(query, { replacements: { uuids: uuids }, type: _sequelize2.default.QueryTypes.SELECT }); } }, { key: 'getElementInstanceDetails', value: function getElementInstanceDetails(trackId) { var query = 'select ' + 'ei.UUID as uuid, ' + 'ei.name as elementInstanceName, ' + 'ei.config as config, ' + 'ei.iofog_uuid as fogInstanceId, ' + 'ei.root_host_access as rootHostAccess, ' + 'ei.log_size as logSize, ' + 'ei.volume_mappings as volumeMappings, ' + 'ei.is_stream_viewer as isStreamViewer, ' + 'ei.is_debug_console as isDebugConsole, ' + 'ei.element_key as elementKey, ' + 'e.name as elementName, ' + 'e.picture as elementPicture, ' + 'f.DaemonStatus as daemonStatus ' + 'from element_instance ei ' + 'inner join element e ' + 'on ei.element_key = e.id ' + 'left join iofogs f ' + 'on ei.iofog_uuid = f.UUID ' + 'where ei.track_id = ' + trackId + ' AND e.publisher != "SYSTEM"'; return _sequelize2.default.query(query, { type: _sequelize2.default.QueryTypes.SELECT }); } }, { key: 'getElementInstanceProperties', value: function getElementInstanceProperties(uuid) { var query = 'select ei.UUID as uuid, ' + 'ei.element_key as elementKey, ' + 'ei.name as elementInstanceName, ' + 'ei.config as elementInstanceConfig, ' + 'ei.iofog_uuid as fogInstanceId, ' + 'ei.root_host_access as rootHostAccess, ' + 'ei.log_size as logSize, ' + 'ei.rebuild as rebuild, ' + 'ei.volume_mappings as volumeMappings, ' + 'e.* ' + 'from element_instance ei ' + 'left join element e ' + 'on ei.element_key = e.id ' + 'left join iofogs f ' + 'on f.UUID = ei.iofog_uuid ' + 'where ei.UUID in (:uuid)'; return _sequelize2.default.query(query, { replacements: { uuid: uuid }, type: _sequelize2.default.QueryTypes.SELECT }); } }, { key: 'getElementInstanceRoute', value: function getElementInstanceRoute(uuid) { var query = 'select ei.name as elementInstanceName, ei.track_id as trackId, ei.iofog_uuid as fogInstanceId, ' + 'e.name as elementName, t.name as trackName from element_instance ei ' + 'inner join element e on ei.element_key = e.id ' + 'inner join data_tracks t on ei.track_id = t.ID ' + 'where ei.UUID in (:uuid)'; return _sequelize2.default.query(query, { replacements: { uuid: uuid }, type: _sequelize2.default.QueryTypes.SELECT }); } }, { key: 'getDataTrackDetails', value: function getDataTrackDetails(uuid) { var query = 'select t.instance_id as instanceId, t.is_activated as isActivated from element_instance ei ' + 'left join data_tracks t on ei.track_id = t.ID where ei.UUID in (:uuid)'; return _sequelize2.default.query(query, { replacements: { uuid: uuid }, type: _sequelize2.default.QueryTypes.SELECT }); } }]); return ElementInstanceManager; }(_baseManager2.default); var instance = new ElementInstanceManager(); exports.default = instance;