vrfs-774: fixed max_mind_geo loading

This commit is contained in:
Jonathan Kolyer 2013-11-02 22:07:16 -05:00
parent 418f5b5109
commit 6513293969
4 changed files with 52 additions and 49 deletions

View File

@ -13,38 +13,26 @@ module JamRuby
MaxMindGeo.transaction do
cols = [:startIpNum, :endIpNum, :country, :region, :city, :latitude, :longitude]
MaxMindGeo.delete_all
CSV.foreach(file, :encoding => 'ISO-8859-1') do |startIpNum,endIpNum,country,region,city,postalCode,latitude,longitude,dmaCode,areaCode|
next if startIpNum == 'startIpNum'
mmg = MaxMindGeo.new
mmg.ip_start = startIpNum
mmg.ip_end = endIpNum
mmg.country = MaxMindIsp.strip_quotes(country)
mmg.region = MaxMindIsp.strip_quotes(region)
mmg.city = MaxMindIsp.strip_quotes(city)
mmg.lat = latitude
mmg.lng = longitude
mmg.save!
File.open(file, 'r:ISO-8859-1') do |io|
MaxMindGeo.pg_copy_from(io, :map => {
'startIpNum' => 'ip_start',
'endIpNum' => 'ip_end',
'country' => 'country',
'region' => 'region',
'city' => 'city',
'latitude' => 'lat',
'longitude' => 'lng'},
:columns => cols) do |row|
row[0] = row[0]
row[1] = row[1]
row[2] = MaxMindIsp.strip_quotes(row[2])
row[3] = MaxMindIsp.strip_quotes(row[3])
row[4] = MaxMindIsp.strip_quotes(row[4])
row.delete_at(5)
row.delete_at(-1) if 8 <= row.count
row.delete_at(-1) if 8 <= row.count
end
end
# File.open(file, 'r:ISO-8859-1') do |io|
# MaxMindGeo.pg_copy_from(io, :map => {
# 'startIpNum' => 'ip_start',
# 'endIpNum' => 'ip_end',
# 'country' => 'country',
# 'region' => 'region',
# 'city' => 'city',
# 'latitude' => 'lat',
# 'longitude' => 'lng'},
# :columns => cols) do |row|
# # byebug
# row[0] = row[0]
# row[1] = row[1]
# row[2] = MaxMindIsp.strip_quotes(row[2])
# row[3] = MaxMindIsp.strip_quotes(row[3])
# row[4] = MaxMindIsp.strip_quotes(row[4])
# row[5] = row[5]
# row[6] = row[6]
# end
# end
end
User.find_each { |usr| usr.update_lat_lng }
end

View File

@ -976,11 +976,12 @@ module JamRuby
yn = false
if provides_location? # ip_addy argument ignored in this case
query = {:city => self.city}
query[:state] = self.state unless self.state.blank?
query[:region] = self.state unless self.state.blank?
query[:country] = self.country unless self.country.blank?
geo = MaxMindGeo.where(query).limit(1).first
self.update_attributes({:lat => geo.lat, :lng => geo.lng})
yn = true
if geo = MaxMindGeo.where(query).limit(1).first
self.update_attributes({:lat => geo.lat, :lng => geo.lng})
yn = true
end
elsif ip_addy
if geo = MaxMindGeo.where(['ip_start >= ? AND ip_end <= ?',ip_addy,ip_addy]).limit(1).first
self.update_attributes({:lat => geo.lat, :lng => geo.lng})

View File

@ -127,4 +127,15 @@ FactoryGirl.define do
factory :crash_dump, :class => JamRuby::CrashDump do
end
factory :geocoder, :class => JamRuby::MaxMindGeo do
country 'US'
region 'NC'
city 'Apex'
ip_start '1.0.0.0'
ip_end '1.1.1.1.'
lat 35.73265
lng -78.85029
end
end

View File

@ -10,30 +10,33 @@ describe MaxMindGeo do
before do
# content_for_file('0.116.0.0,0.119.255.255,"AT","","","",47.3333,13.3333,,
# 1.0.0.0,1.0.0.255,"AU","","","",-27.0000,133.0000,,
# 1.0.1.0,1.0.1.255,"CN","07","Fuzhou","",26.0614,119.3061,,'.encode(Encoding::ISO_8859_1))
content_for_file('startIpNum,endIpNum,country,region,city,postalCode,latitude,longitude,dmaCode,areaCode
0.116.0.0,0.119.255.255,"AT","","","",47.3333,13.3333,,
0.116.0.0,0.119.255.255,"AT","","","",47.3333,13.3333,123,123
1.0.0.0,1.0.0.255,"AU","","","",-27.0000,133.0000,,
1.0.1.0,1.0.1.255,"CN","07","Fuzhou","",26.0614,119.3061,,'.encode(Encoding::ISO_8859_1))
MaxMindGeo.import_from_max_mind(GEO_CSV)
end
let(:first) { MaxMindGeo.find_by_ip_start('0.116.0.0') }
let(:second) { MaxMindGeo.find_by_ip_start('1.0.0.0') }
let(:third) { MaxMindGeo.find_by_ip_start('1.0.1.0') }
it { MaxMindGeo.count.should == 3 }
it { first.country.should == 'AT' }
it { first.ip_start.should == '0.116.0.0' }
it { first.ip_end.should == '0.119.255.255' }
# let(:first) { MaxMindGeo.find_by_ip_start('0.116.0.0') }
# let(:second) { MaxMindGeo.find_by_ip_start('1.0.0.0') }
# let(:third) { MaxMindGeo.find_by_ip_start('1.0.1.0') }
it { second.country.should == 'AU' }
it { second.ip_start.should == '1.0.0.0' }
it { second.ip_end.should == '1.0.0.255' }
# it { first.country.should == 'AT' }
# it { first.ip_start.should == '0.116.0.0' }
# it { first.ip_end.should == '0.119.255.255' }
it { third.country.should == 'CN' }
it { third.ip_start.should == '1.0.1.0' }
it { third.ip_end.should == '1.0.1.255' }
# it { second.country.should == 'AU' }
# it { second.ip_start.should == '1.0.0.0' }
# it { second.ip_end.should == '1.0.0.255' }
# it { third.country.should == 'CN' }
# it { third.ip_start.should == '1.0.1.0' }
# it { third.ip_end.should == '1.0.1.255' }
end