Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "iofogcontroller",
"version": "1.0.31",
"version": "1.0.32",
"description": "ioFog Controller project for Eclipse IoFog @ iofog.org \\nCopyright (c) 2018 Edgeworx, Inc.",
"main": "./src/main.js",
"author": "Saeid Baghbidi",
Expand Down
4 changes: 2 additions & 2 deletions src/cli/catalog.js
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,11 @@ class Catalog extends BaseCLIHandler {
group: [constants.CMD]
},
{
name: 'file', alias: 'f', type: String, description: 'Catalog item settings JSON file',
name: 'file', alias: 'f', type: String, description: 'Path to catalog item settings JSON file',
group: [constants.CMD_ADD, constants.CMD_UPDATE]
},
{
name: 'item-id', alias: 'i', type: String, description: 'Catalog item ID',
name: 'item-id', alias: 'i', type: Number, description: 'Catalog item ID',
group: [constants.CMD_UPDATE, constants.CMD_REMOVE, constants.CMD_INFO]
},
{
Expand Down
4 changes: 2 additions & 2 deletions src/cli/flow.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,11 +37,11 @@ class Flow extends BaseCLIHandler {
},
{
name: 'file', alias: 'f', type: String,
description: 'Application flow settings JSON file',
description: 'Path to application flow settings JSON file',
group: [constants.CMD_ADD, constants.CMD_UPDATE]
},
{
name: 'flow-id', alias: 'i', type: String,
name: 'flow-id', alias: 'i', type: Number,
description: 'Application flow ID',
group: [constants.CMD_UPDATE, constants.CMD_REMOVE, constants.CMD_INFO]
},
Expand Down
2 changes: 1 addition & 1 deletion src/cli/iofog.js
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,7 @@ class IOFog extends BaseCLIHandler {
group: [constants.CMD]},
{
name: 'file', alias: 'f', type: String,
description: 'ioFog settings JSON file',
description: 'Path to ioFog settings JSON file',
group: [constants.CMD_ADD, constants.CMD_UPDATE]
},
{
Expand Down
2 changes: 1 addition & 1 deletion src/cli/microservice.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ class Microservice extends BaseCLIHandler {
group: [constants.CMD]
},
{
name: 'file', alias: 'f', type: String, description: 'Microservice settings JSON file',
name: 'file', alias: 'f', type: String, description: 'Path to microservice settings JSON file',
group: [constants.CMD_ADD, constants.CMD_UPDATE]
},
{
Expand Down
1 change: 1 addition & 0 deletions src/helpers/app-helper.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
const crypto = require('crypto');
const Errors = require('./errors');

const logger = require('../logger');
const fs = require('fs');
const Config = require('../config');
const path = require('path');
Expand Down
3 changes: 2 additions & 1 deletion src/helpers/error-messages.js
Original file line number Diff line number Diff line change
Expand Up @@ -72,5 +72,6 @@ module.exports = {
INVALID_INTERNAL_PORT: 'Internal parsing error. Please provide valid internal port.',
INVALID_ROUTE: 'Route parsing error. Please provide valid route.'
},
CONNECTOR_IS_IN_USE: 'You can\'t delete connector, because it is used for routing now.'
CONNECTOR_IS_IN_USE: 'You can\'t delete connector, because it is used for routing now.',
INVALID_VERSION_COMMAND: 'Can\'t {} version now.'
};
8 changes: 4 additions & 4 deletions src/sequelize/managers/iofog-provision-key-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@
*
*/

const BaseManager = require('../managers/base-manager')
const BaseManager = require('../managers/base-manager');
const models = require('./../models');
const FogProvisionKey = models.FogProvisionKey
const FogProvisionKey = models.FogProvisionKey;

class FogProvisionKeyManager extends BaseManager {
getEntity() {
return FogProvisionKey
}
}

const instance = new FogProvisionKeyManager()
module.exports = instance
const instance = new FogProvisionKeyManager();
module.exports = instance;
8 changes: 4 additions & 4 deletions src/sequelize/managers/iofog-version-command-manager.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,15 +11,15 @@
*
*/

const BaseManager = require('../managers/base-manager')
const BaseManager = require('../managers/base-manager');
const models = require('./../models');
const FogVersionCommand = models.FogVersionCommand
const FogVersionCommand = models.FogVersionCommand;

class FogVersionCommandManager extends BaseManager {
getEntity() {
return FogVersionCommand
}
}

const instance = new FogVersionCommandManager()
module.exports = instance
const instance = new FogVersionCommandManager();
module.exports = instance;
10 changes: 6 additions & 4 deletions src/services/agent-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,8 @@ const formidable = require('formidable');
const Sequelize = require('sequelize');
const Op = Sequelize.Op;

const IncomingForm = formidable.IncomingForm;

const agentProvision = async function (provisionData, transaction) {

await Validator.validate(provisionData, Validator.schemas.agentProvision);
Expand Down Expand Up @@ -129,7 +131,7 @@ const updateAgentConfig = async function (updateData, fog, transaction) {

const getAgentConfigChanges = async function (fog, transaction) {

const changeTracking = await ChangeTrackingService.getByFogId(fog.uuid, transaction);
const changeTracking = await ChangeTrackingService.getByIoFogUuid(fog.uuid, transaction);
if (!changeTracking) {
throw new Errors.NotFoundError(ErrorMessages.INVALID_NODE_ID)
}
Expand Down Expand Up @@ -398,16 +400,16 @@ const putImageSnapshot = async function (req, fog, transaction) {
throw new Errors.ValidationError(ErrorMessages.INVALID_CONTENT_TYPE);
}

const form = new formidable.IncomingForm(opts);
const form = new IncomingForm(opts);
form.uploadDir = path.join(appRoot, '../') + 'data';
if (!fs.existsSync(form.uploadDir)) {
fs.mkdirSync(form.uploadDir);
}
await saveSnapShot(req, form,fog, transaction);
await _saveSnapShot(req, form, fog, transaction);
return {};
};

const saveSnapShot = function (req, form, fog, transaction) {
const _saveSnapShot = function (req, form, fog, transaction) {
return new Promise((resolve, reject) => {
form.parse(req, async function (error, fields, files) {
const file = files['upstream'];
Expand Down
194 changes: 93 additions & 101 deletions src/services/catalog-service.js
Original file line number Diff line number Diff line change
Expand Up @@ -20,11 +20,11 @@ const CatalogItemImageManager = require('../sequelize/managers/catalog-item-imag
const CatalogItemInputTypeManager = require('../sequelize/managers/catalog-item-input-type-manager');
const CatalogItemOutputTypeManager = require('../sequelize/managers/catalog-item-output-type-manager');
const Op = require('sequelize').Op;
const validator = require('../schemas/index');
const Validator = require('../schemas/index');
const RegistryManager = require('../sequelize/managers/registry-manager');

const createCatalogItem = async function (data, user, transaction) {
await validator.validate(data, validator.schemas.catalogItemCreate);
await Validator.validate(data, Validator.schemas.catalogItemCreate);
await _checkForDuplicateName(data.name, {userId: user.id}, transaction);
await _checkForRestrictedPublisher(data.publisher);
const catalogItem = await _createCatalogItem(data, user, transaction);
Expand All @@ -38,7 +38,7 @@ const createCatalogItem = async function (data, user, transaction) {
};

const updateCatalogItem = async function (id, data, user, isCLI, transaction) {
await validator.validate(data, validator.schemas.catalogItemUpdate);
await Validator.validate(data, Validator.schemas.catalogItemUpdate);

const where = isCLI
? {id: id}
Expand All @@ -50,76 +50,6 @@ const updateCatalogItem = async function (id, data, user, isCLI, transaction) {
await _updateCatalogItemIOTypes(data, where, transaction);
};

const _updateCatalogItem = async function (data, where, transaction) {
let catalogItem = {
name: data.name,
description: data.description,
category: data.category,
configExample: data.configExample,
publisher: data.publisher,
diskRequired: data.diskRequired,
ramRequired: data.ramRequired,
picture: data.picture,
isPublic: data.isPublic,
registryId: data.registryId
};

catalogItem = AppHelper.deleteUndefinedFields(catalogItem);
if (!catalogItem || AppHelper.isEmpty(catalogItem)) {
return
}
const registry = await RegistryManager.findOne({id: data.registryId}, transaction);
if (!registry) {
throw new Errors.NotFoundError(AppHelper.formatMessage(ErrorMessages.INVALID_REGISTRY_ID, data.registryId));
}

const item = await _checkIfItemExists(where, transaction);
await _checkForDuplicateName(data.name, item, transaction);
await CatalogItemManager.update(where, catalogItem, transaction);
};

const _updateCatalogItemImages = async function (data, transaction) {
if (data.images) {
for (let image of data.images) {
switch (image.fogTypeId) {
case 1:
await CatalogItemImageManager.updateOrCreate({
catalogItemId: data.id,
fogTypeId: 1
}, image, transaction);
break;
case 2:
await CatalogItemImageManager.updateOrCreate({
catalogItemId: data.id,
fogTypeId: 2
}, image, transaction);
break;
}
}
}
};

const _updateCatalogItemIOTypes = async function (data, where, transaction) {
if (data.inputType && data.inputType.length != 0) {
let inputType = {
catalogItemId: data.id,
infoType: data.inputType.infoType,
infoFormat: data.inputType.infoFormat
};
inputType = AppHelper.deleteUndefinedFields(inputType);
await CatalogItemInputTypeManager.updateOrCreate({catalogItemId: data.id}, inputType, transaction);
}
if (data.outputType && data.outputType.length !== 0) {
let outputType = {
catalogItemId: data.id,
infoType: data.outputType.infoType,
infoFormat: data.outputType.infoFormat
};
outputType = AppHelper.deleteUndefinedFields(outputType);
await CatalogItemOutputTypeManager.updateOrCreate({catalogItemId: data.id}, outputType, transaction);
}
};

const listCatalogItems = async function (user, isCLI, transaction) {
const where = isCLI
? {category: {[Op.ne]: 'SYSTEM'}}
Expand Down Expand Up @@ -162,6 +92,37 @@ const deleteCatalogItem = async function (id, user, isCLI, transaction) {
return affectedRows;
};

async function getNetworkCatalogItem(transaction) {
return await CatalogItemManager.findOne({
name: 'Networking Tool',
category: 'SYSTEM',
publisher: 'Eclipse ioFog',
registry_id: 1,
user_id: null
}, transaction)
}

async function getBluetoothCatalogItem(transaction) {
return await CatalogItemManager.findOne({
name: 'RESTBlue',
category: 'SYSTEM',
publisher: 'Eclipse ioFog',
registry_id: 1,
user_id: null
}, transaction)
}

async function getHalCatalogItem(transaction) {
return await CatalogItemManager.findOne({
name: 'HAL',
category: 'SYSTEM',
publisher: 'Eclipse ioFog',
registry_id: 1,
user_id: null
}, transaction)
}


const _checkForDuplicateName = async function (name, item, transaction) {
if (name) {
const where = item.id
Expand All @@ -175,7 +136,7 @@ const _checkForDuplicateName = async function (name, item, transaction) {
}
};

const _checkForRestrictedPublisher = async function(publisher) {
const _checkForRestrictedPublisher = async function (publisher) {
if (publisher === 'Eclipse ioFog') {
throw new Errors.ValidationError(ErrorMessages.RESTRICTED_PUBLISHER);
}
Expand Down Expand Up @@ -267,35 +228,66 @@ const _createCatalogItemOutputType = async function (data, catalogItem, transact
return await CatalogItemOutputTypeManager.create(catalogItemOutputType, transaction);
};

async function getNetworkCatalogItem(transaction) {
return await CatalogItemManager.findOne({
name: 'Networking Tool',
category: 'SYSTEM',
publisher: 'Eclipse ioFog',
registry_id: 1,
user_id: null
}, transaction)
}

async function getBluetoothCatalogItem(transaction) {
return await CatalogItemManager.findOne({
name: 'RESTBlue',
category: 'SYSTEM',
publisher: 'Eclipse ioFog',
registry_id: 1,
user_id: null
}, transaction)
}
const _updateCatalogItem = async function (data, where, transaction) {
let catalogItem = {
name: data.name,
description: data.description,
category: data.category,
configExample: data.configExample,
publisher: data.publisher,
diskRequired: data.diskRequired,
ramRequired: data.ramRequired,
picture: data.picture,
isPublic: data.isPublic,
registryId: data.registryId
};

async function getHalCatalogItem(transaction) {
return await CatalogItemManager.findOne({
name: 'HAL',
category: 'SYSTEM',
publisher: 'Eclipse ioFog',
registry_id: 1,
user_id: null
}, transaction)
}
catalogItem = AppHelper.deleteUndefinedFields(catalogItem);
if (!catalogItem || AppHelper.isEmpty(catalogItem)) {
return
}
const registry = await RegistryManager.findOne({id: data.registryId}, transaction);
if (!registry) {
throw new Errors.NotFoundError(AppHelper.formatMessage(ErrorMessages.INVALID_REGISTRY_ID, data.registryId));
}

const item = await _checkIfItemExists(where, transaction);
await _checkForDuplicateName(data.name, item, transaction);
await CatalogItemManager.update(where, catalogItem, transaction);
};

const _updateCatalogItemImages = async function (data, transaction) {
if (data.images) {
for (const image of data.images) {
await CatalogItemImageManager.updateOrCreate({
catalogItemId: data.id,
fogTypeId: image.fogTypeId
}, image, transaction);
}
}
};

const _updateCatalogItemIOTypes = async function (data, where, transaction) {
if (data.inputType && data.inputType.length !== 0) {
let inputType = {
catalogItemId: data.id,
infoType: data.inputType.infoType,
infoFormat: data.inputType.infoFormat
};
inputType = AppHelper.deleteUndefinedFields(inputType);
await CatalogItemInputTypeManager.updateOrCreate({catalogItemId: data.id}, inputType, transaction);
}
if (data.outputType && data.outputType.length !== 0) {
let outputType = {
catalogItemId: data.id,
infoType: data.outputType.infoType,
infoFormat: data.outputType.infoFormat
};
outputType = AppHelper.deleteUndefinedFields(outputType);
await CatalogItemOutputTypeManager.updateOrCreate({catalogItemId: data.id}, outputType, transaction);
}
};

module.exports = {
createCatalogItem: TransactionDecorator.generateTransaction(createCatalogItem),
Expand Down
Loading