geo-lookup.js 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. var assert = require('assert');
  2. var t1 =+ new Date();
  3. var geoip = require('../lib/geoip');
  4. var t2 =+ new Date();
  5. if (process.argv.length > 2) {
  6. console.dir(geoip.lookup(process.argv[2]));
  7. var t3 =+ new Date();
  8. console.log('Startup: %dms, exec: %dms', t2 - t1, t3 - t2);
  9. process.exit();
  10. }
  11. var f = [];
  12. var ip;
  13. var n = 30000;
  14. var nf = [];
  15. var r;
  16. var ts =+ new Date();
  17. for (var i = 0; i < n; i++) {
  18. if ((i % 2) === 0) {
  19. ip = Math.round((Math.random() * 0xff000000)+ 0xffffff);
  20. } else {
  21. ip = '2001:' +
  22. Math.round(Math.random()*0xffff).toString(16) + ':' +
  23. Math.round(Math.random()*0xffff).toString(16) + ':' +
  24. Math.round(Math.random()*0xffff).toString(16) + ':' +
  25. Math.round(Math.random()*0xffff).toString(16) + ':' +
  26. Math.round(Math.random()*0xffff).toString(16) + ':' +
  27. Math.round(Math.random()*0xffff).toString(16) + ':' +
  28. Math.round(Math.random()*0xffff).toString(16) + '';
  29. }
  30. r = geoip.lookup(ip);
  31. if (r === null) {
  32. nf.push(ip);
  33. continue;
  34. }
  35. f.push([ip, r]);
  36. assert.ok(geoip.cmp(ip, r.range[0]) >= 0 , 'Problem with ' + geoip.pretty(ip) + ' < ' + geoip.pretty(r.range[0]));
  37. assert.ok(geoip.cmp(ip, r.range[1]) <= 0 , 'Problem with ' + geoip.pretty(ip) + ' > ' + geoip.pretty(r.range[1]));
  38. }
  39. var te =+ new Date();
  40. /*
  41. f.forEach(function(ip) {
  42. 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);
  43. });
  44. */
  45. 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));
  46. console.log("Took %d ms to startup", t2 - t1);