Package Mananger
[osm/UI.git] / skyquake / plugins / composer / api / packageFileHandler.js
diff --git a/skyquake/plugins/composer/api/packageFileHandler.js b/skyquake/plugins/composer/api/packageFileHandler.js
new file mode 100644 (file)
index 0000000..f199610
--- /dev/null
@@ -0,0 +1,59 @@
+var request = require('request');
+var Promise = require('bluebird');
+var rp = require('request-promise');
+var utils = require('../../../framework/core/api_utils/utils.js');
+var constants = require('../../../framework/core/api_utils/constants.js');
+var fs = require('fs');
+var _ = require('lodash');
+
+PackageFileHandler = {};
+
+function deleteFile(filename) {
+       setTimeout(function() {
+               fs.unlinkSync(constants.BASE_PACKAGE_UPLOAD_DESTINATION + filename);
+       }, constants.PACKAGE_FILE_DELETE_DELAY_MILLISECONDS);
+};
+
+function checkStatus(req, transactionId) {
+       var upload_server = req.query['upload_server'];
+       var headers = _.extend({},
+        {
+            'Authorization': req.get('Authorization')
+        }
+    );
+       request({
+               url: upload_server + ':' + constants.PACKAGE_MANAGER_SERVER_PORT + '/api/upload/' + transactionId + '/state',
+               type: 'GET',
+               headers: headers,
+               forever: constants.FOREVER_ON,
+               rejectUnauthorized: false
+       }, function(error, response, body) {
+               if (error) {
+                       console.log('Error checking status for transaction', transactionId, '. Will delete file', req.file.filename, ' in ', constants.PACKAGE_FILE_DELETE_DELAY_MILLISECONDS ,' milliseconds');
+                       deleteFile(req.file.filename);
+               } else {
+                       var jsonStatus = null;
+                       if (typeof body == 'string' || body instanceof String) {
+                               jsonStatus = JSON.parse(body);
+                       } else {
+                               jsonStatus = body;
+                       }
+
+                       if (jsonStatus.status && (jsonStatus.status == 'success' || jsonStatus.status == 'failure')) {
+                               console.log('Transaction ', transactionId, ' completed with status ', jsonStatus.status ,'. Will delete file', req.file.filename, ' in ', constants.PACKAGE_FILE_DELETE_DELAY_MILLISECONDS ,' milliseconds');
+                               deleteFile(req.file.filename);
+                       } else {
+                               setTimeout(function() {
+                                       checkStatus(req, transactionId);
+                               }, constants.PACKAGE_FILE_ONBOARD_TRANSACTION_STATUS_CHECK_DELAY_MILLISECONDS);
+                       }
+               }
+       });
+};
+
+PackageFileHandler.checkCreatePackageStatusAndHandleFile = function(req, transactionId) {
+       checkStatus(req, transactionId);
+};
+
+
+module.exports = PackageFileHandler;
\ No newline at end of file