rapnc
Version:
Node client for RAP 1.0
94 lines (85 loc) • 2.89 kB
JavaScript
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;