UNPKG

rapnc

Version:

Node client for RAP 1.0

94 lines (85 loc) 2.89 kB
var http = require('http'); var config = require('../config.json'); var fs = require('fs'); var path = require('path'); var program = require('commander'); var helper = require('../helpers'); var logger = helper.logger; var ajax = helper.ajax; var prefix = config.prefix || '/nodeclient'; var pullHost = config.pull_host || 'rap.alibaba-inc.com'; var pullPort = config.pull_port || 80; function getRapProjectData(projectId, callback) { ajax({ host: pullHost, port: pullPort, path: prefix + '/pulling/' + projectId, method: 'get' }, function(err, data) { if (err) { callback(err); return; } data = data.trim(); callback(null, data); }); } function handle(argv) { program .usage('pull PROJECT_ID [options]') .option('--host [host]', 'host of Pull Service Server') .option('--port [port]', 'port of Pull Service Server') .parse(argv); if (argv.length < 4 || argv.indexOf('-h') != -1 || argv.indexOf('--help') != -1) { program.help(); process.exit(); } pullHost = program.host || pullHost; pullPort = program.port || pullPort; var projectId = argv[3]; if (!/^\d+$/.test(projectId)) { logger.error('PROJECT_ID should be integer', 'pull'); return; } var cacheDir = path.join(__dirname, '../cache/projects/'); var targetFile = path.join(cacheDir, projectId + '.json'); var displayFileName = targetFile//'RAP/cache/projects/' + projectId + '.json'; logger.log('') logger.log('pulling ' + projectId.green + ' from ' + (pullHost + (pullPort == '80' ? '' : (':' + pullPort))).green + ' to ' + displayFileName, 'pull'); getRapProjectData(projectId, function(err, data) { if (err) { logger.error('HOST: ' + pullHost + ', PORT: ' + pullPort + ', MSG: ' + err, 'pull'); logger.log('') return; } if (!data) { logger.warn('pulling null data', 'pull'); return; } var obj; try { obj = JSON.parse(data); } catch(e) { logger.error('pulled data is not valid json: ' + data, 'pull'); return; } if (obj.code && obj.code == 500) { logger.error('' + obj.msg, 'pull') logger.log(''); return; } try { fs.writeFileSync(targetFile, JSON.stringify(obj, null, 4)); } catch (e) { logger.error('writing file ' + displayFileName + ' error: ' + e, 'pull'); logger.error('if permission denied, please `sudo` ', 'pull'); return; } //logger.ok('writing json to file ' + displayFileName, 'pull'); logger.ok('done!', 'pull'); logger.log('') }) } exports.handle = handle;