From 5304b0d8d156de3f62fe700fa6800a1be9abbc73 Mon Sep 17 00:00:00 2001 From: Adam Ierymenko Date: Thu, 22 Oct 2015 09:09:15 -0700 Subject: Rename index.js so process is distinguishable. --- cluster-geo/cluster-geo.exe | 2 +- cluster-geo/cluster-geo/cluster-geo.js | 94 ++++++++++++++++++++++++++++++++++ cluster-geo/cluster-geo/index.js | 94 ---------------------------------- cluster-geo/cluster-geo/package.json | 2 +- 4 files changed, 96 insertions(+), 96 deletions(-) create mode 100644 cluster-geo/cluster-geo/cluster-geo.js delete mode 100644 cluster-geo/cluster-geo/index.js diff --git a/cluster-geo/cluster-geo.exe b/cluster-geo/cluster-geo.exe index ae720610..20bc487a 100755 --- a/cluster-geo/cluster-geo.exe +++ b/cluster-geo/cluster-geo.exe @@ -10,4 +10,4 @@ fi cd cluster-geo -exec node index.js +exec node cluster-geo.js diff --git a/cluster-geo/cluster-geo/cluster-geo.js b/cluster-geo/cluster-geo/cluster-geo.js new file mode 100644 index 00000000..0e903ade --- /dev/null +++ b/cluster-geo/cluster-geo/cluster-geo.js @@ -0,0 +1,94 @@ +// +// GeoIP lookup service +// + +// GeoIP cache TTL in ms +var CACHE_TTL = (60 * 60 * 24 * 60 * 1000); // 60 days + +var config = require(__dirname + '/config.js'); + +if (!config.maxmind) { + console.error('FATAL: only MaxMind GeoIP2 is currently supported and is not configured in config.js'); + process.exit(1); +} +var geo = require('geoip2ws')(config.maxmind); + +var cache = require('levelup')(__dirname + '/cache.leveldb'); + +function lookup(ip,callback) +{ + cache.get(ip,function(err,cachedEntryJson) { + if ((!err)&&(cachedEntryJson)) { + try { + var cachedEntry = JSON.parse(cachedEntryJson.toString()); + if (cachedEntry) { + var ts = cachedEntry.ts; + var r = cachedEntry.r; + if ((ts)&&(r)) { + if ((Date.now() - ts) < CACHE_TTL) { + r._cached = true; + return callback(null,r); + } + } + } + } catch (e) {} + } + + geo(ip,function(err,result) { + if (err) + return callback(err,null); + if ((!result)||(!result.location)) + return callback(new Error('null result'),null); + + cache.put(ip,JSON.stringify({ + ts: Date.now(), + r: result + }),function(err) { + if (err) + console.error('Error saving to cache: '+err); + return callback(null,result); + }); + }); + }); +}; + +var linebuf = ''; +process.stdin.on('readable',function() { + var chunk; + while (null !== (chunk = process.stdin.read())) { + for(var i=0;i 0) { + var ip = linebuf; + lookup(ip,function(err,result) { + if ((err)||(!result)||(!result.location)) { + return process.stdout.write(ip+',0,0,0,0,0,0\n'); + } else { + var lat = parseFloat(result.location.latitude); + var lon = parseFloat(result.location.longitude); + + // Convert to X,Y,Z coordinates from Earth's origin, Earth-as-sphere approximation. + var latRadians = lat * 0.01745329251994; // PI / 180 + var lonRadians = lon * 0.01745329251994; // PI / 180 + var cosLat = Math.cos(latRadians); + var x = Math.round((-6371.0) * cosLat * Math.cos(lonRadians)); // 6371 == Earth's approximate radius in kilometers + var y = Math.round(6371.0 * Math.sin(latRadians)); + var z = Math.round(6371.0 * cosLat * Math.sin(lonRadians)); + + return process.stdout.write(ip+',1,'+lat+','+lon+','+x+','+y+','+z+'\n'); + } + }); + } + linebuf = ''; + } else { + linebuf += String.fromCharCode(c); + } + } + } +}); + +process.stdin.on('end',function() { + cache.close(); + process.exit(0); +}); diff --git a/cluster-geo/cluster-geo/index.js b/cluster-geo/cluster-geo/index.js deleted file mode 100644 index 0e903ade..00000000 --- a/cluster-geo/cluster-geo/index.js +++ /dev/null @@ -1,94 +0,0 @@ -// -// GeoIP lookup service -// - -// GeoIP cache TTL in ms -var CACHE_TTL = (60 * 60 * 24 * 60 * 1000); // 60 days - -var config = require(__dirname + '/config.js'); - -if (!config.maxmind) { - console.error('FATAL: only MaxMind GeoIP2 is currently supported and is not configured in config.js'); - process.exit(1); -} -var geo = require('geoip2ws')(config.maxmind); - -var cache = require('levelup')(__dirname + '/cache.leveldb'); - -function lookup(ip,callback) -{ - cache.get(ip,function(err,cachedEntryJson) { - if ((!err)&&(cachedEntryJson)) { - try { - var cachedEntry = JSON.parse(cachedEntryJson.toString()); - if (cachedEntry) { - var ts = cachedEntry.ts; - var r = cachedEntry.r; - if ((ts)&&(r)) { - if ((Date.now() - ts) < CACHE_TTL) { - r._cached = true; - return callback(null,r); - } - } - } - } catch (e) {} - } - - geo(ip,function(err,result) { - if (err) - return callback(err,null); - if ((!result)||(!result.location)) - return callback(new Error('null result'),null); - - cache.put(ip,JSON.stringify({ - ts: Date.now(), - r: result - }),function(err) { - if (err) - console.error('Error saving to cache: '+err); - return callback(null,result); - }); - }); - }); -}; - -var linebuf = ''; -process.stdin.on('readable',function() { - var chunk; - while (null !== (chunk = process.stdin.read())) { - for(var i=0;i 0) { - var ip = linebuf; - lookup(ip,function(err,result) { - if ((err)||(!result)||(!result.location)) { - return process.stdout.write(ip+',0,0,0,0,0,0\n'); - } else { - var lat = parseFloat(result.location.latitude); - var lon = parseFloat(result.location.longitude); - - // Convert to X,Y,Z coordinates from Earth's origin, Earth-as-sphere approximation. - var latRadians = lat * 0.01745329251994; // PI / 180 - var lonRadians = lon * 0.01745329251994; // PI / 180 - var cosLat = Math.cos(latRadians); - var x = Math.round((-6371.0) * cosLat * Math.cos(lonRadians)); // 6371 == Earth's approximate radius in kilometers - var y = Math.round(6371.0 * Math.sin(latRadians)); - var z = Math.round(6371.0 * cosLat * Math.sin(lonRadians)); - - return process.stdout.write(ip+',1,'+lat+','+lon+','+x+','+y+','+z+'\n'); - } - }); - } - linebuf = ''; - } else { - linebuf += String.fromCharCode(c); - } - } - } -}); - -process.stdin.on('end',function() { - cache.close(); - process.exit(0); -}); diff --git a/cluster-geo/cluster-geo/package.json b/cluster-geo/cluster-geo/package.json index 1927197e..4cd1ce00 100644 --- a/cluster-geo/cluster-geo/package.json +++ b/cluster-geo/cluster-geo/package.json @@ -2,7 +2,7 @@ "name": "cluster-geo", "version": "1.0.0", "description": "Cluster GEO-IP Query Service", - "main": "index.js", + "main": "cluster-geo.js", "scripts": { "test": "echo \"Error: no test specified\" && exit 1" }, -- cgit v1.2.3