Skip to content

EmberAds/trifle

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

53 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Trifle

Build status Code Climate

Stores the GeoIP databases in Redis and gives it a simple way to lookup IPs and map them to countries/country codes.

Get your GeoIP country CSVs from http://www.maxmind.com/app/geolite.

Trifle supports both the IPV4 and IPV6 databases.

Why?

Loading the GeoIP databases from disk is slow, and doing that for every request is a pain. Trifle keeps your GeoIP database in memory and makes it easy to query.

Installation

Install the gem

gem install trifle

or add it to your Gemfile and bundle

gem "trifle"

Usage

Loading

# Initialize
trifle = Trifle.new(Redis.new)
# Load data from file
trifle.load filename: "file.csv"
# or files
trifle.load filenames: ["file1.csv", "file2.csv"]
# or directly as an array
trifle.load data: preloaded_array

Additionally you can specify your own Redis key to store the Trifle in:

trifle = Trifle.new(Redis.new, key: "foobar")

You can also load the Trifle from the command line:

trifle redis://127.0.0.1:6379/0 file1.csv file2.csv

Lookup

# Initialize
trifle = Trifle.new(Redis.new)

# Lookup for existing data
trifle.find "223.255.128.0"
# => ["HK", "Hong Kong"]

# Lookup for missing data
trifle.find "192.168.1.1"
# => nil

Release notes

  • 0.1.1 Made 1.8.7 compatible
  • 0.1.0 Handle lookup bug with no data defined
  • 0.0.9 Adds support for IPV6-style IPV4 addresses
  • 0.0.8 Fixed a search bug that created conflicts between IPv4 and IPv6 data
  • 0.0.7 Loading now happens into separate key, making loading possible without downtime
  • 0.0.6 Added a fix for invalid IPs
  • 0.0.5 Fixed bug when finding IPs at the edge of the data set
  • 0.0.4 Changed binary syntax
  • 0.0.3 Added a binary for loading Trifle from the command line
  • 0.0.2 Added support for custom Redis key
  • 0.0.1 First draft

Future releases

  • Allow for loading of more data than just country data
  • Split country data into separate Redis records

License

See LICENSE