X-Git-Url: https://osm.etsi.org/gitweb/?p=osm%2FUI.git;a=blobdiff_plain;f=skyquake%2Fplugins%2Fcomposer%2Fapi%2Fcomposer.js;h=f9f05916437fd001aab3d3d3c68cc37c555696a0;hp=ce128609c9f5bdd0434e2310eb631c53c1f61799;hb=e1c7c12af6f1d5f6fc69329251e47f2abf7fd4f1;hpb=4e7b00465d087292dc6127bc892a5fa3a64365b6 diff --git a/skyquake/plugins/composer/api/composer.js b/skyquake/plugins/composer/api/composer.js index ce128609c..f9f059164 100644 --- a/skyquake/plugins/composer/api/composer.js +++ b/skyquake/plugins/composer/api/composer.js @@ -29,6 +29,7 @@ var PackageFileHandler = require('./packageFileHandler.js'); var Composer = {}; var FileManager = {}; +var PackageManager = {}; var DataCenters = {}; // Catalog module methods Composer.get = function(req) { @@ -272,7 +273,7 @@ Composer.create = function(req) { }); }); }; -Composer.update = function(req) { +Composer.updateSave = function(req) { var api_server = req.query['api_server']; var catalogType = req.params.catalogType; var id = req.params.id; @@ -301,9 +302,9 @@ Composer.update = function(req) { } }); }); -}; +} -Composer.upload = function(req) { +PackageManager.upload = function(req) { console.log(' Uploading file', req.file.originalname, 'as', req.file.filename); var api_server = req.query['api_server']; // dev_download_server is for testing purposes. @@ -312,7 +313,7 @@ Composer.upload = function(req) { var download_host = req.query['dev_download_server']; if (!download_host) { - download_host = req.protocol + '://' + req.headers.host; + download_host = req.protocol + '://' + req.get('host');//req.api_server + ':' + utils.getPortForProtocol(req.protocol); } return new Promise(function(resolve, reject) { @@ -341,7 +342,7 @@ Composer.upload = function(req) { // Add a status checker on the transaction and then to delete the file later PackageFileHandler.checkCreatePackageStatusAndHandleFile(req, data['transaction_id']); - + // Return status to composer UI to update the status. resolve({ statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, @@ -349,7 +350,7 @@ Composer.upload = function(req) { }); }).catch(function(error) { var res = {}; - console.log('Problem with Composer.upload', error); + console.log('Problem with PackageManager.upload', error); res.statusCode = error.statusCode || 500; res.errorMessage = { error: 'Failed to upload package ' + req.file.originalname + '. Error: ' + error @@ -358,21 +359,27 @@ Composer.upload = function(req) { }); }); }; -Composer.addFile = function(req) { - console.log(' Uploading file', req.file.originalname, 'as', req.file.filename); + +PackageManager.update = function(req) { + console.log(' Updating file', req.file.originalname, 'as', req.file.filename); var api_server = req.query['api_server']; + // dev_download_server is for testing purposes. + // It is the direct IP address of the Node server where the + // package will be hosted. var download_host = req.query['dev_download_server']; - var package_id = req.query['package_id']; - var package_type = req.query['package_type'].toUpperCase(); - var package_path = req.query['package_path']; + if (!download_host) { - download_host = req.protocol + '://' + req.headers.host; + download_host = req.protocol + '://' + req.get('host');//api_server + ':' + utils.getPortForProtocol(req.protocol); + } + var input = { + 'external-url': download_host + '/composer/update/' + req.file.filename, + 'package-type': 'VNFD', + 'package-id': uuid() } - return new Promise(function(resolve, reject) { Promise.all([ rp({ - uri: utils.confdPort(api_server) + '/api/operations/package-file-add', + uri: utils.confdPort(api_server) + '/api/operations/package-update', method: 'POST', headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, { 'Authorization': req.get('Authorization') @@ -382,17 +389,17 @@ Composer.addFile = function(req) { resolveWithFullResponse: true, json: true, body: { - input: { - 'external-url': download_host + '/composer/upload/' + req.query['package_id'] + '/' + req.file.filename, - 'package-type': package_type, - 'package-id': package_id, - 'package-path': package_path + '/' + req.file.filename - } + input: input } }) ]).then(function(result) { var data = {}; data['transaction_id'] = result[0].body['output']['transaction-id']; + + // Add a status checker on the transaction and then to delete the file later + PackageFileHandler.checkCreatePackageStatusAndHandleFile(req, data['transaction_id'], true); + + // Return status to composer UI to update the status. resolve({ statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, data: data @@ -407,9 +414,9 @@ Composer.addFile = function(req) { reject(res); }); }); -} +}; -Composer.exportPackage = function(req) { +PackageManager.export = function(req) { // /api/operations/package-export var api_server = req.query['api_server']; return new Promise(function(resolve, reject) { @@ -434,7 +441,7 @@ Composer.exportPackage = function(req) { }); }).catch(function(error) { var res = {}; - console.log('Problem with Composer.exportPackage', error); + console.log('Problem with PackageManager.export', error); res.statusCode = error.statusCode || 500; res.errorMessage = { error: error @@ -444,6 +451,124 @@ Composer.exportPackage = function(req) { }); } +PackageManager.copy = function(req) { + // /api/operations/package-copy + var api_server = req.query['api_server']; + return new Promise(function(resolve, reject) { + Promise.all([ + rp({ + uri: utils.confdPort(api_server) + '/api/operations/package-copy', + method: 'POST', + headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, { + 'Authorization': req.get('Authorization') + }), + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + resolveWithFullResponse: true, + json: true, + body: { "input": req.body} + }) + ]).then(function(result) { + var data = {}; + resolve({ + statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, + data: result[0].body + }); + }).catch(function(error) { + var res = {}; + console.log('Problem with PackageManager.copy', error); + res.statusCode = error.statusCode || 500; + res.errorMessage = { + error: error + }; + reject(res); + }); + }); +} + +PackageManager.getJobStatus = function(req) { + var api_server = req.query["api_server"]; + var uri = utils.confdPort(api_server); + var url = '/api/operational/copy-jobs'; + var id = req.params['id']; + return new Promise(function(resolve, reject) { + request({ + url: uri + url + '?deep', + method: 'GET', + headers: _.extend({}, constants.HTTP_HEADERS.accept.data, { + 'Authorization': req.get('Authorization') + }), + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + }, function(error, response, body) { + if (utils.validateResponse('restconfAPI.streams', error, response, body, resolve, reject)) { + var data = JSON.parse(response.body)['rw-pkg-mgmt:copy-jobs']; + var returnData = []; + data && data.job.map(function(d) { + if(d['transaction-id'] == id) { + returnData.push(d) + } + }) + resolve({ + statusCode: response.statusCode, + data: returnData + }) + }; + }) + }) +} + +FileManager.addFile = function(req) { + console.log(' Uploading file', req.file.originalname, 'as', req.file.filename); + var api_server = req.query['api_server']; + var download_host = req.query['dev_download_server']; + var package_id = req.query['package_id']; + var package_type = req.query['package_type'].toUpperCase(); + var package_path = req.query['package_path']; + if (!download_host) { + download_host = req.protocol + '://' + req.get('host');//api_server + ':' + utils.getPortForProtocol(req.protocol); + } + var input = { + 'external-url': download_host + '/composer/upload/' + req.query['package_id'] + '/' + req.file.filename, + 'package-type': package_type, + 'package-id': package_id, + 'package-path': package_path + '/' + req.file.filename + } + return new Promise(function(resolve, reject) { + Promise.all([ + rp({ + uri: utils.confdPort(api_server) + '/api/operations/package-file-add', + method: 'POST', + headers: _.extend({}, constants.HTTP_HEADERS.accept.collection, { + 'Authorization': req.get('Authorization') + }), + forever: constants.FOREVER_ON, + rejectUnauthorized: false, + resolveWithFullResponse: true, + json: true, + body: { + input: input + } + }) + ]).then(function(result) { + var data = {}; + data['transaction_id'] = result[0].body['output']['task-id']; + resolve({ + statusCode: constants.HTTP_RESPONSE_CODES.SUCCESS.OK, + data: data + }); + }).catch(function(error) { + var res = {}; + console.log('Problem with Composer.upload', error); + res.statusCode = error.statusCode || 500; + res.errorMessage = { + error: 'Failed to upload package ' + req.file.originalname + '. Error: ' + error + }; + reject(res); + }); + }); +} + FileManager.get = function(req) { var api_server = req.query['api_server']; var type = req.query['package_type'] && req.query['package_type'].toUpperCase(); @@ -553,6 +678,9 @@ FileManager.get = function(req) { data: data.body }); } + }).catch(function(err) { + console.log('Failed to retrieve FileManager.list') + resolve(err); }) } }) @@ -592,5 +720,6 @@ FileManager.job = function(req) { } module.exports = { Composer:Composer, - FileManager: FileManager + FileManager: FileManager, + PackageManager: PackageManager };