apache-log-geo 0.0.2 → 0.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (6) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +5 -4
  3. data/apache-log-geo +4 -1
  4. data/lib.rb +38 -7
  5. data/mmdb-lookup +4 -1
  6. metadata +10 -9
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d5f696d02b3eea816384b389250916a180e3b219ad52ecc01ad8fcc42ce664de
4
- data.tar.gz: 3b2c584d7cde234fd15918eca2826d4d674806d43bf8ea244b22022916b55dab
3
+ metadata.gz: b688bc33811dda59d01daba379846ea91eca0e7b2d125739f0e7f98c327985d6
4
+ data.tar.gz: 1e69c302666c3b5f38458af38f0a4094f82a9e12fe3f52bd1008a91cac4bae96
5
5
  SHA512:
6
- metadata.gz: 57bb8e647db969849aa7e341def0459ec28c0ccc7806e6cca6a5d6c63beb976bdd097621f6d4f66a8a65b7b780ab5a76653cf190fd83ceb99b3a1be2f96e81e5
7
- data.tar.gz: d3341602fb3df5c81af39f1dfcbdbf83576472bdc4bcc1208538db93497e6153f18c2afe50b73787524aa524d428e0a3c2e1310dc1b248e28b48fed5fd3109ff
6
+ metadata.gz: '0184047e4a91342815ddbf89dd4bf0cc2745b4aeb0f6ecb82416d498c9363f46566f0b423d16ac71c60d29f04accef9069ab12590542ecd553491956f96f29cc'
7
+ data.tar.gz: 3ce1c92a2d35de14ec126193b9196332cdba6a1b67ca173fceaf0483e346ddd7b1b655d9ab0e5c1277b98414e9c69ded4fe06a3500a1cc02c958c8aeaacef707
data/README.md CHANGED
@@ -17,11 +17,12 @@ key & install geoipupdate to fetch the db file.
17
17
 
18
18
  gem install apache-log-geo
19
19
 
20
- It uses a C extension [geoip2_c][], instead of the official maxmind-db
21
- gem, for in my local tests, the latter (in conjunction with the Ruby
22
- IO) is 9 (nine) times slower!
20
+ By default it uses the official maxmind-db gem, but if you also do
23
21
 
24
- [geoip2_c]: https://github.com/fluent-plugins-nursery/geoip2_c
22
+ gem install geoip2_c
23
+
24
+ the pkg will automatically load it in maxmind-db stead. geoip2_c is a
25
+ C extension that works *much* faster.
25
26
 
26
27
  ## Usage
27
28
 
data/apache-log-geo CHANGED
@@ -45,8 +45,11 @@ OptionParser.new do |o|
45
45
  o.on("--sub regexp", "subdivisions") { |v| opt[:query][:subdivisions] = v }
46
46
  end.parse!
47
47
 
48
+ errx 2, "no db adaptors found" unless (db_adapter = db_adapter_load)
49
+
48
50
  begin
49
- geo = GeoDB.new opt[:db]
51
+ warnx "db_adapter: #{db_adapter}" if $DEBUG
52
+ geo = db_adapter.new opt[:db]
50
53
  rescue
51
54
  errx 2, $!
52
55
  end
data/lib.rb CHANGED
@@ -274,15 +274,11 @@ module ApacheLogGeo
274
274
  }
275
275
  end
276
276
 
277
- require 'geoip2'
278
-
279
- class ApacheLogGeo::GeoDB
280
- def initialize path
281
- @db = GeoIP2::Database.new path
282
- end
277
+ class ApacheLogGeo::DB
278
+ def lookup _ip; raise 'not implemented'; end
283
279
 
284
280
  def get ip
285
- r = @db.lookup ip rescue nil
281
+ r = lookup ip
286
282
  return nil unless r
287
283
 
288
284
  {
@@ -298,3 +294,38 @@ class ApacheLogGeo::GeoDB
298
294
  }
299
295
  end
300
296
  end
297
+
298
+ module ApacheLogGeo
299
+ def db_adapter_load
300
+ adapters = {
301
+ "geoip2" => {
302
+ klass: Geoip2_c,
303
+ gem: ['geoip2_c', '~> 0.3.3'] # can't specify it in .gemspec!
304
+ },
305
+ "maxmind/db" => { klass: Maxmind},
306
+ }
307
+ adapter = adapters.keys.detect do |k|
308
+ begin
309
+ gem(*adapters[k][:gem]) if adapters[k][:gem]
310
+ require k
311
+ rescue LoadError
312
+ next nil
313
+ end
314
+ k
315
+ end
316
+
317
+ adapters[adapter][:klass]
318
+ end
319
+ end
320
+
321
+ # Available adapters
322
+
323
+ class ApacheLogGeo::Geoip2_c < ApacheLogGeo::DB # a C extension
324
+ def initialize path; @db = GeoIP2::Database.new path; end
325
+ def lookup ip; @db.lookup ip rescue nil; end
326
+ end
327
+
328
+ class ApacheLogGeo::Maxmind < ApacheLogGeo::DB # a pure ruby implementation
329
+ def initialize path; @db = MaxMind::DB.new path, mode: MaxMind::DB::MODE_MEMORY; end
330
+ def lookup ip; @db.get ip rescue nil; end
331
+ end
data/mmdb-lookup CHANGED
@@ -57,8 +57,11 @@ OptionParser.new do |o|
57
57
  o.on("-f fmt", "output format: json, shell") { |v| opt[:fmt] = v }
58
58
  end.parse!
59
59
 
60
+ errx 2, "no db adaptors found" unless (db_adapter = db_adapter_load)
61
+
60
62
  begin
61
- geo = GeoDB.new opt[:db]
63
+ warnx "db_adapter: #{db_adapter}" if $DEBUG
64
+ geo = db_adapter.new opt[:db]
62
65
  rescue
63
66
  errx 2, $!
64
67
  end
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apache-log-geo
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Gromnitsky
8
8
  autorequire:
9
9
  bindir: "."
10
10
  cert_chain: []
11
- date: 2020-03-09 00:00:00.000000000 Z
11
+ date: 2020-03-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: geoip2_c
14
+ name: maxmind-db
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.3.3
19
+ version: 1.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.3.3
26
+ version: 1.1.0
27
27
  description: |
28
28
  An offline GeoIP CLI filter for Apache (common, combined) logs.
29
29
  It's like grep but with a knowledge about what data an ip
@@ -38,14 +38,15 @@ files:
38
38
  - "./apache-log-geo"
39
39
  - "./mmdb-lookup"
40
40
  - README.md
41
- - apache-log-geo
42
41
  - lib.rb
43
- - mmdb-lookup
44
42
  homepage: https://github.com/gromnitsky/apache-log-geo
45
43
  licenses:
46
44
  - MIT
47
45
  metadata: {}
48
- post_install_message:
46
+ post_install_message: |
47
+ *******************************************************************
48
+ Make sure to install geoip2_c ~> 0.3.3 gem for maximum performance!
49
+ *******************************************************************
49
50
  rdoc_options: []
50
51
  require_paths:
51
52
  - lib
@@ -53,7 +54,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
53
54
  requirements:
54
55
  - - ">="
55
56
  - !ruby/object:Gem::Version
56
- version: 2.3.0
57
+ version: 2.4.0
57
58
  required_rubygems_version: !ruby/object:Gem::Requirement
58
59
  requirements:
59
60
  - - ">="