logstash-filter-geoip 0.1.0 → 0.1.1

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.
checksums.yaml CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZjNjMDZhOTg1OTNhNmU5NTI2YzlhYzkyYzJlZDY4MThhZDA0ZDRkNQ==
5
- data.tar.gz: !binary |-
6
- NjgzN2Q5YWU1ODgxOWNmMjEwZjVjZjcwMWY4ODIxN2I5M2I5MGQ4Zg==
2
+ SHA1:
3
+ metadata.gz: 1548c53dbe378404cbfafb95dffcd9dea2d80cd0
4
+ data.tar.gz: 76b5caebae33493e7f362a2c1c0e8820c7e85b27
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- MDVmMjY0NmE5MmM3NTI2YWJhYTYzNzY4Nzc0YWY3NDAzMWYzZWVmYzNhYjll
10
- NjdjODViZGIwOTgxZWMzZmZhYjFiZDU3YmU4NmQ0ZGZlZTU4ZTY0OThiM2Jk
11
- YTMxNzVkZWY0YmFiMDIxYjhhM2YxZWZmMGZkMGU4MzdlMzU1MGE=
12
- data.tar.gz: !binary |-
13
- NDk1NjhmOWMzNWMxMTc3OTNlYzY0MGU1Zjc3M2Q4MjY0NmQyNjRkNTRkMTE2
14
- M2ZjYzY4OWE2NDdhMWNiMzc2OGViNGU1ODNjOTRkYzcwMjg0ZDI4YzlhOTky
15
- OGU1OTlhZTQwODFhYjNmYjQzODU2MDI3MzA5M2M3NDExM2FmMTM=
6
+ metadata.gz: 50c2c34f8e2998e2b6493e8b6dc17de4db704a83fc3733319f812633dc339a096400e890d999d79691265210a1df6da83892d3532cf2117caacdee0e403ddd2d
7
+ data.tar.gz: 247798863c8a963e0dcd2bcde39aae3730cb11c0d90aa25fde37e8fcb32243722fa8b0bcbe7a6679ab1b92fb65196cbaa5c51c547c3bc4ae9083e09467d63e7e
data/Gemfile CHANGED
@@ -1,4 +1,3 @@
1
- source 'http://rubygems.org'
2
- gem 'rake'
3
- gem 'gem_publisher'
4
- gem 'archive-tar-minitar'
1
+ source 'https://rubygems.org'
2
+ gemspec
3
+ gem "logstash", :github => "elasticsearch/logstash", :branch => "1.5"
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright (c) 2012-2014 Elasticsearch <http://www.elasticsearch.org>
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/Rakefile CHANGED
@@ -6,3 +6,4 @@ task :default do
6
6
  system("rake -T")
7
7
  end
8
8
 
9
+ require "logstash/devutils/rake"
@@ -6,18 +6,18 @@ require "tempfile"
6
6
  # The GeoIP filter adds information about the geographical location of IP addresses,
7
7
  # based on data from the Maxmind database.
8
8
  #
9
- # Starting with version 1.3.0 of Logstash, a [geoip][location] field is created if
9
+ # Starting with version 1.3.0 of Logstash, a `[geoip][location]` field is created if
10
10
  # the GeoIP lookup returns a latitude and longitude. The field is stored in
11
- # [GeoJSON](http://geojson.org/geojson-spec.html) format. Additionally,
11
+ # http://geojson.org/geojson-spec.html[GeoJSON] format. Additionally,
12
12
  # the default Elasticsearch template provided with the
13
- # [elasticsearch output](../outputs/elasticsearch.html)
14
- # maps the [geoip][location] field to a
15
- # [geo_point](http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html).
13
+ # http://www.elasticsearch.org/guide/en/logstash/current/output/elasticsearch.html[elasticsearch output]
14
+ # maps the `[geoip][location]` field to a
15
+ # http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/mapping-geo-point-type.html[geo_point].
16
16
  #
17
- # As this field is a geo\_point _and_ it is still valid GeoJSON, you get
17
+ # As this field is a `geo_point` _and_ it is still valid GeoJSON, you get
18
18
  # the awesomeness of Elasticsearch's geospatial query, facet and filter functions
19
19
  # and the flexibility of having GeoJSON for all other applications (like Kibana's
20
- # [bettermap panel](https://github.com/elasticsearch/kibana/tree/master/src/app/panels/bettermap)).
20
+ # http://www.elasticsearch.org/guide/en/kibana/current/_bettermap.html[bettermap panel]).
21
21
  #
22
22
  # Logstash releases ship with the GeoLiteCity database made available from
23
23
  # Maxmind with a CCA-ShareAlike 3.0 license. For more details on GeoLite, see
@@ -26,8 +26,6 @@ class LogStash::Filters::GeoIP < LogStash::Filters::Base
26
26
  config_name "geoip"
27
27
  milestone 3
28
28
 
29
- VERSION='0.1.0'
30
-
31
29
  # The path to the GeoIP database file which Logstash should use. Country, City, ASN, ISP
32
30
  # and organization databases are supported.
33
31
  #
@@ -53,12 +51,12 @@ class LogStash::Filters::GeoIP < LogStash::Filters::Base
53
51
  # This can be useful, for example, if you have `src\_ip` and `dst\_ip` fields and
54
52
  # would like the GeoIP information of both IPs.
55
53
  #
56
- # If you save the data to a target field other than "geoip" and want to use the
57
- # geo\_point related functions in Elasticsearch, you need to alter the template
54
+ # If you save the data to a target field other than `geoip` and want to use the
55
+ # `geo\_point` related functions in Elasticsearch, you need to alter the template
58
56
  # provided with the Elasticsearch output and configure the output to use the
59
57
  # new template.
60
58
  #
61
- # Even if you don't use the geo\_point mapping, the [target][location] field
59
+ # Even if you don't use the `geo\_point` mapping, the `[target][location]` field
62
60
  # is still valid GeoJSON.
63
61
  config :target, :validate => :string, :default => 'geoip'
64
62
 
@@ -66,7 +64,7 @@ class LogStash::Filters::GeoIP < LogStash::Filters::Base
66
64
  def register
67
65
  require "geoip"
68
66
  if @database.nil?
69
- @database = ::Dir.glob(::File.expand_path("../../../vendor/", ::File.dirname(__FILE__))+"/GeoLiteCity*.dat").first
67
+ @database = ::Dir.glob(::File.join(::File.expand_path("../../../vendor/", ::File.dirname(__FILE__)),"GeoLiteCity*.dat")).first
70
68
  if !File.exists?(@database)
71
69
  raise "You must specify 'database => ...' in your geoip filter (I looked for '#{@database}'"
72
70
  end
@@ -1,13 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-filter-geoip'
4
- s.version = '0.1.0'
4
+ s.version = '0.1.1'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "$summary"
7
- s.description = "$description"
7
+ s.description = "This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program"
8
8
  s.authors = ["Elasticsearch"]
9
- s.email = 'richard.pijnenburg@elasticsearch.com'
10
- s.homepage = "http://logstash.net/"
9
+ s.email = 'info@elasticsearch.com'
10
+ s.homepage = "http://www.elasticsearch.org/guide/en/logstash/current/index.html"
11
11
  s.require_paths = ["lib"]
12
12
 
13
13
  # Files
@@ -17,12 +17,13 @@ Gem::Specification.new do |s|
17
17
  s.test_files = s.files.grep(%r{^(test|spec|features)/})
18
18
 
19
19
  # Special flag to let us know this is actually a logstash plugin
20
- s.metadata = { "logstash_plugin" => "true", "group" => "filter" }
20
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "filter" }
21
21
 
22
22
  # Gem dependencies
23
23
  s.add_runtime_dependency 'logstash', '>= 1.4.0', '< 2.0.0'
24
24
 
25
25
  s.add_runtime_dependency 'geoip', ['>= 1.3.2']
26
26
 
27
+ s.add_development_dependency 'logstash-devutils'
27
28
  end
28
29
 
@@ -1,4 +1,4 @@
1
- require "spec_helper"
1
+ require "logstash/devutils/rspec/spec_helper"
2
2
  require "logstash/filters/geoip"
3
3
 
4
4
  describe LogStash::Filters::GeoIP do
@@ -94,11 +94,12 @@ describe LogStash::Filters::GeoIP do
94
94
  end
95
95
 
96
96
  describe "correct encodings with ASN db" do
97
+ asndb = ::Dir.glob(::File.expand_path("../../vendor/", ::File.dirname(__FILE__))+"/GeoIPASNum*.dat").first
97
98
  config <<-CONFIG
98
99
  filter {
99
100
  geoip {
100
101
  source => "ip"
101
- database => "vendor/geoip/GeoIPASNum.dat"
102
+ database => "#{asndb}"
102
103
  }
103
104
  }
104
105
  CONFIG
metadata CHANGED
@@ -1,89 +1,102 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-filter-geoip
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elasticsearch
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-11-02 00:00:00.000000000 Z
11
+ date: 2014-11-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstash
15
- requirement: !ruby/object:Gem::Requirement
15
+ version_requirements: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ! '>='
17
+ - - '>='
18
18
  - !ruby/object:Gem::Version
19
19
  version: 1.4.0
20
20
  - - <
21
21
  - !ruby/object:Gem::Version
22
22
  version: 2.0.0
23
- type: :runtime
24
- prerelease: false
25
- version_requirements: !ruby/object:Gem::Requirement
23
+ requirement: !ruby/object:Gem::Requirement
26
24
  requirements:
27
- - - ! '>='
25
+ - - '>='
28
26
  - !ruby/object:Gem::Version
29
27
  version: 1.4.0
30
28
  - - <
31
29
  - !ruby/object:Gem::Version
32
30
  version: 2.0.0
31
+ prerelease: false
32
+ type: :runtime
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: geoip
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - '>='
38
+ - !ruby/object:Gem::Version
39
+ version: 1.3.2
35
40
  requirement: !ruby/object:Gem::Requirement
36
41
  requirements:
37
- - - ! '>='
42
+ - - '>='
38
43
  - !ruby/object:Gem::Version
39
44
  version: 1.3.2
40
- type: :runtime
41
45
  prerelease: false
46
+ type: :runtime
47
+ - !ruby/object:Gem::Dependency
48
+ name: logstash-devutils
42
49
  version_requirements: !ruby/object:Gem::Requirement
43
50
  requirements:
44
- - - ! '>='
51
+ - - '>='
45
52
  - !ruby/object:Gem::Version
46
- version: 1.3.2
47
- description: $description
48
- email: richard.pijnenburg@elasticsearch.com
53
+ version: '0'
54
+ requirement: !ruby/object:Gem::Requirement
55
+ requirements:
56
+ - - '>='
57
+ - !ruby/object:Gem::Version
58
+ version: '0'
59
+ prerelease: false
60
+ type: :development
61
+ description: This gem is a logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not a stand-alone program
62
+ email: info@elasticsearch.com
49
63
  executables: []
50
64
  extensions: []
51
65
  extra_rdoc_files: []
52
66
  files:
53
67
  - .gitignore
54
68
  - Gemfile
69
+ - LICENSE
55
70
  - Rakefile
56
71
  - lib/logstash/filters/geoip.rb
57
72
  - logstash-filter-geoip.gemspec
58
- - rakelib/publish.rake
59
- - rakelib/vendor.rake
60
73
  - spec/filters/geoip_spec.rb
61
74
  - vendor/GeoIPASNum-2014-02-12.dat
62
75
  - vendor/GeoLiteCity-2013-01-18.dat
63
- homepage: http://logstash.net/
76
+ homepage: http://www.elasticsearch.org/guide/en/logstash/current/index.html
64
77
  licenses:
65
78
  - Apache License (2.0)
66
79
  metadata:
67
80
  logstash_plugin: 'true'
68
- group: filter
69
- post_install_message:
81
+ logstash_group: filter
82
+ post_install_message:
70
83
  rdoc_options: []
71
84
  require_paths:
72
85
  - lib
73
86
  required_ruby_version: !ruby/object:Gem::Requirement
74
87
  requirements:
75
- - - ! '>='
88
+ - - '>='
76
89
  - !ruby/object:Gem::Version
77
90
  version: '0'
78
91
  required_rubygems_version: !ruby/object:Gem::Requirement
79
92
  requirements:
80
- - - ! '>='
93
+ - - '>='
81
94
  - !ruby/object:Gem::Version
82
95
  version: '0'
83
96
  requirements: []
84
- rubyforge_project:
85
- rubygems_version: 2.4.1
86
- signing_key:
97
+ rubyforge_project:
98
+ rubygems_version: 2.4.4
99
+ signing_key:
87
100
  specification_version: 4
88
101
  summary: $summary
89
102
  test_files:
@@ -1,9 +0,0 @@
1
- require "gem_publisher"
2
-
3
- desc "Publish gem to RubyGems.org"
4
- task :publish_gem do |t|
5
- gem_file = Dir.glob(File.expand_path('../*.gemspec',File.dirname(__FILE__))).first
6
- gem = GemPublisher.publish_if_updated(gem_file, :rubygems)
7
- puts "Published #{gem}" if gem
8
- end
9
-
@@ -1,169 +0,0 @@
1
- require "net/http"
2
- require "uri"
3
- require "digest/sha1"
4
-
5
- def vendor(*args)
6
- return File.join("vendor", *args)
7
- end
8
-
9
- directory "vendor/" => ["vendor"] do |task, args|
10
- mkdir task.name
11
- end
12
-
13
- def fetch(url, sha1, output)
14
-
15
- puts "Downloading #{url}"
16
- actual_sha1 = download(url, output)
17
-
18
- if actual_sha1 != sha1
19
- fail "SHA1 does not match (expected '#{sha1}' but got '#{actual_sha1}')"
20
- end
21
- end # def fetch
22
-
23
- def file_fetch(url, sha1)
24
- filename = File.basename( URI(url).path )
25
- output = "vendor/#{filename}"
26
- task output => [ "vendor/" ] do
27
- begin
28
- actual_sha1 = file_sha1(output)
29
- if actual_sha1 != sha1
30
- fetch(url, sha1, output)
31
- end
32
- rescue Errno::ENOENT
33
- fetch(url, sha1, output)
34
- end
35
- end.invoke
36
-
37
- return output
38
- end
39
-
40
- def file_sha1(path)
41
- digest = Digest::SHA1.new
42
- fd = File.new(path, "r")
43
- while true
44
- begin
45
- digest << fd.sysread(16384)
46
- rescue EOFError
47
- break
48
- end
49
- end
50
- return digest.hexdigest
51
- ensure
52
- fd.close if fd
53
- end
54
-
55
- def download(url, output)
56
- uri = URI(url)
57
- digest = Digest::SHA1.new
58
- tmp = "#{output}.tmp"
59
- Net::HTTP.start(uri.host, uri.port, :use_ssl => (uri.scheme == "https")) do |http|
60
- request = Net::HTTP::Get.new(uri.path)
61
- http.request(request) do |response|
62
- fail "HTTP fetch failed for #{url}. #{response}" if [200, 301].include?(response.code)
63
- size = (response["content-length"].to_i || -1).to_f
64
- count = 0
65
- File.open(tmp, "w") do |fd|
66
- response.read_body do |chunk|
67
- fd.write(chunk)
68
- digest << chunk
69
- if size > 0 && $stdout.tty?
70
- count += chunk.bytesize
71
- $stdout.write(sprintf("\r%0.2f%%", count/size * 100))
72
- end
73
- end
74
- end
75
- $stdout.write("\r \r") if $stdout.tty?
76
- end
77
- end
78
-
79
- File.rename(tmp, output)
80
-
81
- return digest.hexdigest
82
- rescue SocketError => e
83
- puts "Failure while downloading #{url}: #{e}"
84
- raise
85
- ensure
86
- File.unlink(tmp) if File.exist?(tmp)
87
- end # def download
88
-
89
- def untar(tarball, &block)
90
- require "archive/tar/minitar"
91
- tgz = Zlib::GzipReader.new(File.open(tarball))
92
- # Pull out typesdb
93
- tar = Archive::Tar::Minitar::Input.open(tgz)
94
- tar.each do |entry|
95
- path = block.call(entry)
96
- next if path.nil?
97
- parent = File.dirname(path)
98
-
99
- mkdir_p parent unless File.directory?(parent)
100
-
101
- # Skip this file if the output file is the same size
102
- if entry.directory?
103
- mkdir path unless File.directory?(path)
104
- else
105
- entry_mode = entry.instance_eval { @mode } & 0777
106
- if File.exists?(path)
107
- stat = File.stat(path)
108
- # TODO(sissel): Submit a patch to archive-tar-minitar upstream to
109
- # expose headers in the entry.
110
- entry_size = entry.instance_eval { @size }
111
- # If file sizes are same, skip writing.
112
- next if stat.size == entry_size && (stat.mode & 0777) == entry_mode
113
- end
114
- puts "Extracting #{entry.full_name} from #{tarball} #{entry_mode.to_s(8)}"
115
- File.open(path, "w") do |fd|
116
- # eof? check lets us skip empty files. Necessary because the API provided by
117
- # Archive::Tar::Minitar::Reader::EntryStream only mostly acts like an
118
- # IO object. Something about empty files in this EntryStream causes
119
- # IO.copy_stream to throw "can't convert nil into String" on JRuby
120
- # TODO(sissel): File a bug about this.
121
- while !entry.eof?
122
- chunk = entry.read(16384)
123
- fd.write(chunk)
124
- end
125
- #IO.copy_stream(entry, fd)
126
- end
127
- File.chmod(entry_mode, path)
128
- end
129
- end
130
- tar.close
131
- File.unlink(tarball) if File.file?(tarball)
132
- end # def untar
133
-
134
- def ungz(file)
135
-
136
- outpath = file.gsub('.gz', '')
137
- tgz = Zlib::GzipReader.new(File.open(file))
138
- begin
139
- File.open(outpath, "w") do |out|
140
- IO::copy_stream(tgz, out)
141
- end
142
- File.unlink(file)
143
- rescue
144
- File.unlink(outpath) if File.file?(outpath)
145
- raise
146
- end
147
- tgz.close
148
- end
149
-
150
- desc "Process any vendor files required for this plugin"
151
- task "vendor" do |task, args|
152
-
153
- @files.each do |file|
154
- download = file_fetch(file['url'], file['sha1'])
155
- if download =~ /.tar.gz/
156
- prefix = download.gsub('.tar.gz', '').gsub('vendor/', '')
157
- untar(download) do |entry|
158
- if !file['files'].nil?
159
- next unless file['files'].include?(entry.full_name.gsub(prefix, ''))
160
- out = entry.full_name.split("/").last
161
- end
162
- File.join('vendor', out)
163
- end
164
- elsif download =~ /.gz/
165
- ungz(download)
166
- end
167
- end
168
-
169
- end