forked from raycmorgan/node-geoip
-
Notifications
You must be signed in to change notification settings - Fork 0
/
geo-lookup.js
49 lines (42 loc) · 1.53 KB
/
geo-lookup.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
var assert = require('assert');
var t1=+new Date;
var geoip = require('../lib/geoip');
var t2=+new Date;
if(process.argv.length > 2) {
console.dir(geoip.lookup(process.argv[2]));
var t3 = +new Date;
console.log("Startup: %dms, exec: %dms", t2-t1, t3-t2);
process.exit();
}
var n=30000;
var f=[], nf=[];
var ts = +new Date();
for(var i=0; i<n; i++) {
if(i%2==0)
ip = Math.round(Math.random()*0xff000000 + 0xffffff);
else
ip = "2001:" +
Math.round(Math.random()*0xffff).toString(16) + ":" +
Math.round(Math.random()*0xffff).toString(16) + ":" +
Math.round(Math.random()*0xffff).toString(16) + ":" +
Math.round(Math.random()*0xffff).toString(16) + ":" +
Math.round(Math.random()*0xffff).toString(16) + ":" +
Math.round(Math.random()*0xffff).toString(16) + ":" +
Math.round(Math.random()*0xffff).toString(16) + "";
r = geoip.lookup(ip);
if(r === null) {
nf.push(ip);
continue;
}
f.push([ip, r]);
assert.ok(geoip.cmp(ip, r.range[0]) >= 0 , "Problem with " + geoip.pretty(ip) + " < " + geoip.pretty(r.range[0]));
assert.ok(geoip.cmp(ip, r.range[1]) <= 0 , "Problem with " + geoip.pretty(ip) + " > " + geoip.pretty(r.range[1]));
}
var te = +new Date();
/*
f.forEach(function(ip) {
console.log("%s bw %s & %s is %s", geoip.pretty(ip[0]), geoip.pretty(ip[1].range[0]), geoip.pretty(ip[1].range[1]), ip[1].country);
});
*/
console.log("Found %d (%d/%d) ips in %dms (%s ip/s) (%sμs/ip)", n, f.length, nf.length, te-ts, (n*1000/(te-ts)).toFixed(3), ((te-ts)*1000/n).toFixed(0));
console.log("Took %d ms to startup", t2-t1);