Project

jgeoip

0.01
No commit activity in last 3 years
No release in over 3 years
This gem wraps maxminds original java library, which should make things faster than using other pure ruby libraries.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Fast JRuby GeoIP Extension

This jRuby extension will help you with all your GeoIP needs in JRuby. It is pretty small and simple right now but will surely grow up soon. You can easily use it with the free GeoIP Library from maxmind.com aswell as the commercial one.

example

City Lookup

p JGeoIP.new('/opt/MaxMind/GeoLiteCity.dat').city('github.com')

# => {:city=>"San Francisco", :postal_code=>"94110", :country_code=>"US", :country_name=>"United States", :region=>"CA",  :latitude=>37.74839782714844, :longitude=>37.74839782714844, :dma_code=>807, :area_code=>415, :metro_code=>807}

Will return a Location object with all the result properties and a #to_hash method

Organization/ISP Lookup

p JGeoIP.new('/opt/MaxMind/GeoIPISP.dat').org('github.com')

Will return a string holding the organization/isp name

Distance between two locations (km)

p1 = @geo.city('github.com')
p2 = @geo.city('facebook.com')

p p1.distance(p2)
# => 46.25354059751858

speed?

There is a benchmark script included, so you'll be able to check it yourself. We compared it to the GeoIP gem so far (because geoip-c won't compile with jRuby). Results are promising:

JGeoIP

JGeoIP (>=0.1.5):
  0.285000   0.000000   0.285000 (  0.286000)
JGeoIP (old non extension version, <0.1.5):
  1.047000   0.000000   1.047000 (  1.048000)    

Others

pure ruby GeoIP (jRuby):
 35.614000   0.000000  35.614000 ( 35.614000)
geoip-c (MRI 1.9.3-p0):
  1.140000   0.000000   1.140000 (  1.145224)
pure ruby GeoIP (MRI 1.9.3-p0):
  30.060000  16.420000  46.480000 ( 60.940723)        

Cool, eh?

Please note that we did a warmup to give the JIT a chance. The benchmark does 100k lookups. Those results are Java 7, jruby-1.6.5 based. Looking forward to 1.7.0.

TODO

  • integrate the other lookup methods: so far we're just able to do city lookups
  • check all the license related stuff: the maxmind lib is LGPL, which would be okay for me