fog-controller
Version:
Fog Controller project @ iotracks.com
477 lines (440 loc) • 17.9 kB
JavaScript
'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;