Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c0c5389
fix(bug) fixed system microservices (HAL, bluetooth) launch (EWC-413)…
Railag Dec 12, 2018
45f07d6
fix(bug) added registry email validation (EWC-418)
epankou Dec 13, 2018
c0c2b19
test(core) unit tests for iofog-controller (EWC-382) (#426)
Railag Dec 13, 2018
6f488b5
test(core) unit tests for flow & diagnostics controllers, updated pos…
Railag Dec 13, 2018
a11cf4b
bug(fix) CLI diagnostics: Incorrect error message is displayed when u…
alexandershpak Dec 13, 2018
8075b4d
test(core) unit tests for catalog, controller and agent controllers (…
Railag Dec 14, 2018
076f96b
bug(fix) CLI diagnostics ftp: Incorrect error message is displayed wh…
alexandershpak Dec 14, 2018
a94fba7
Merge branch 'master' into develop
dbusel Dec 14, 2018
20212a1
Merge branch 'master' into develop
Dec 14, 2018
fc18405
Merge branch 'master' into develop
Dec 14, 2018
e1eeea5
Update package.json
dbusel Dec 14, 2018
3933a0a
remove automated release
dbusel Dec 17, 2018
146c10f
bug(fix) strace feature bug (EWC-421)
epankou Dec 17, 2018
6d352f1
bug(fix) fixed deprecation warnings (EWC-422) (#438)
Railag Dec 17, 2018
c67e4fc
bug(fix) CLI diagnostics ftp: invalid microservice uuid
alexandershpak Dec 17, 2018
2156553
bug(fix) CLI diagnostics ftp: invalid microservice id (update) (#440)
alexandershpak Dec 17, 2018
f5ecca1
bug(fix) iofog agent API: core network containers are returned when f…
epankou Dec 19, 2018
9e808bf
test(core) unit tests progress for agent & access-token services (EWC…
Railag Dec 19, 2018
a515d9b
feat(npm-scripts): npm scripts improvements (EWC-358 EWC-430)
mchepelev Dec 19, 2018
e7cc6a2
bug(fix): microservices are shown after deleting user, new error message
alexandershpak Dec 19, 2018
569eb84
feat(microservice): update change tracking on delete port mapping (#445)
mchepelev Dec 20, 2018
c941360
version 1.0.31
Railag Dec 20, 2018
90fc143
Merge branch 'release' into develop
dbusel Dec 20, 2018
4acf22b
1.0.31 Release (#448)
Railag Dec 20, 2018
484c4c2
Merge branch 'release' into develop
dbusel Dec 20, 2018
30b9796
Epankou/bug network containers not removed ewc 424 (#450)
epankou Dec 20, 2018
f2d4d91
test(core) unit tests for agent service progress (EWC-383) (#452)
Railag Dec 21, 2018
8c0c354
fix(cli): fix bug with generating access token for user in cli (#453)
mchepelev Dec 21, 2018
b033d9f
Merge branch 'release' into develop
dbusel Dec 21, 2018
63186d1
test(core) unit tests for agent-service (EWC-383) (#455)
Railag Dec 22, 2018
a304b99
bug(fix) fixed deprecated warning about Buffer constructor (EWC-422)
Railag Dec 22, 2018
5dad1a1
test(core) unit tests for catalog service (EWC-383) (#458)
Railag Dec 26, 2018
9ab8218
Maksimchepelev/bugs (#457)
mchepelev Dec 26, 2018
8274ead
Maksimchepelev/bugs (#459)
mchepelev Dec 27, 2018
d51abc5
test(core) unit tests for change-tracking service (EWC-383) (#460)
Railag Dec 27, 2018
8ce03d2
version 1.0.32 (#461)
Railag Dec 27, 2018
daf6824
Merge branch 'release' into develop
dbusel Dec 27, 2018
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