update from RIFT as of 696b75d2fe9fb046261b08c616f1bcf6c0b54a9b third try
[osm/UI.git] / skyquake / plugins / composer / api / packageFileHandler.js
1 var request = require('request');
2 var Promise = require('bluebird');
3 var rp = require('request-promise');
4 var utils = require('../../../framework/core/api_utils/utils.js');
5 var constants = require('../../../framework/core/api_utils/constants.js');
6 var fs = require('fs');
7 var _ = require('lodash');
8
9 var PackageFileHandler = {};
10
11 function deleteFile(filename) {
12 setTimeout(function() {
13 try {
14 fs.unlinkSync(constants.BASE_PACKAGE_UPLOAD_DESTINATION + '/' + filename);
15 } catch (e) {
16 console.log("file delete error", e);
17 }
18 }, constants.PACKAGE_FILE_DELETE_DELAY_MILLISECONDS);
19 };
20
21 function checkStatus(req, transactionId, jobType) {
22 var api_server = req.query["api_server"];
23 var uri = utils.confdPort(api_server);
24 var id = req.params['id'];
25 var jobName = jobType + '-jobs';
26 var url = utils.projectContextUrl(req, uri + '/api/operational/' + jobName + (transactionId ? '/job/' + transactionId : ''));
27 request({
28 url: url,
29 method: 'GET',
30 headers: _.extend({}, constants.HTTP_HEADERS.accept.data, {
31 'Authorization': req.session && req.session.authorization
32 }),
33 forever: constants.FOREVER_ON,
34 rejectUnauthorized: false
35 }, function(error, response, body) {
36 if (error) {
37 console.log('Error checking status for transaction', transactionId, '. Will delete file', req.file.filename, ' in ', constants.PACKAGE_FILE_DELETE_DELAY_MILLISECONDS ,' milliseconds');
38 deleteFile(req.file.filename);
39 } else {
40 var jsonStatus = null;
41 if (typeof body == 'string' || body instanceof String) {
42 try {jsonStatus = JSON.parse(body)['rw-pkg-mgmt:job'];} catch(e) {jsonStatus = {status: 'failure'}}
43 } else {
44 jsonStatus = body;
45 }
46
47 if (jsonStatus && jsonStatus.status && (jsonStatus.status == 'COMPLETED' || jsonStatus.status == 'FAILED')) {
48 console.log('Transaction ', transactionId, ' completed with status ', jsonStatus.status ,'. Will delete file', req.file.filename, ' in ', constants.PACKAGE_FILE_DELETE_DELAY_MILLISECONDS ,' milliseconds');
49 deleteFile(req.file.filename);
50 } else {
51 setTimeout(function() {
52 checkStatus(req, transactionId, jobType);
53 }, constants.PACKAGE_FILE_ONBOARD_TRANSACTION_STATUS_CHECK_DELAY_MILLISECONDS);
54 }
55 }
56 });
57 };
58
59 PackageFileHandler.checkCreatePackageStatusAndHandleFile = function(req, transactionId, jobType) {
60 checkStatus(req, transactionId, jobType);
61 };
62
63
64 module.exports = PackageFileHandler;