Skip to content

Instantly share code, notes, and snippets.

@joohee
Created May 2, 2014 06:01
Show Gist options
  • Save joohee/d18ff6e2434a46d22e2f to your computer and use it in GitHub Desktop.
Save joohee/d18ff6e2434a46d22e2f to your computer and use it in GitHub Desktop.
app.js
var exec = require('child_process'),
fs = require('fs'),
readline = require('readline')
stream = require('stream'),
AWS = require('aws-sdk'),
domain = require('domain'),
crypto = require('crypto')
var env = require('./env.json')
var instream = fs.createReadStream(env.query_result_filename);
var outstream = new stream;
outstream.readable = true;
outstream.writable = true;
AWS.config.loadFromPath('./aws-credential.json');
console.log(AWS.config);
var s3bucket = new AWS.S3({params: {Bucket: 'tucket'});
// error handling
var dm = domain.create();
dm.run(function(){});
var rl = readline.createInterface({
input: instream,
output: outstream,
terminal: false
});
var surveyResultNow = new Date();
var surveyResultDir = surveyResultNow.getFullYear() + pad(surveyResultNow.getMonth() + 1);
var surveyResultSubDir = pad(surveyResultNow.getDate());
rl.on('line', function(line) {
console.log(line);
var p = exec.spawn('casperjs', ['amchart.js', line]);
p.stdout.on('data', function(data) {
console.log("after casperjs... data: " + data.toString());
});
p.on('exit', UploadS3.bind(this));
function UploadS3() {
var filenames = [
{dir:"result/"+surveyResultDir+"/"+surveyResultSubDir,
surveyId:line,
extension:'png'
}
];
filenames.forEach(function(filename) {
var fname = filename.dir+'/'+filename.surveyId+'.'+filename.extension;
var hash = crypto.createHash('sha256').update(filename.surveyId).digest('hex');
var uploadname = filename.dir+'/'+hash+'.'+filename.extension;
console.log("origin filename: " + fname);
console.log("upload filename: " + uploadname);
try {
var data = fs.readFileSync(fname);
console.log('add to s3...');
s3bucket.createBucket(function() {
var d = {
Key: uploadname,
Body: data,
ContentType: "image/png",
ACL: 'public-read'
};
s3bucket.client.putObject(d, function(err, res) {
if (err) {
console.log("Error uploading data: ", err);
} else {
console.log("Successfully uploaded data to " + d.Bucket + "/" + d.Key);
}
});
});
} catch (e) {
console.log("error: " + e);
}
});
}
});
function pad(number) {
var r = String(number);
if ( r.length === 1 ) {
r = '0' + r;
}
return r;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment