logstash-output-file 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
- MjllMjc2MzAwYzI3NGE1MzMxNjU4MzY4NWUxNDI4MTU5ZjZhNDM5OA==
5
- data.tar.gz: !binary |-
6
- NDNlNjY4N2E5NzZhYWZiNzU2ZTFhNDk3MDllOWUxOTY0MWFkN2FjYw==
2
+ SHA1:
3
+ metadata.gz: a1fa1cc00c32419d9b7d6335913705b6ffe0c673
4
+ data.tar.gz: 75abc303447f376a214762c8640c4fb5826c3830
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NzllNWZkMTAwN2RhNjAwZTUxYjA2YzUyYzRkMjIzOWM4OWMzZTQ3NWRjZjk3
10
- OGUxOWQyZjk4NmY5ZmMzMWM3MGFkZjdjYTU2YWVmNmNlMzQzOTE4YjQzMmE2
11
- OGMwMWUyODRjMGVmMThiNjk1Mzc3OWY4MjAwYTdjMmVjY2JmYjg=
12
- data.tar.gz: !binary |-
13
- NWIyNGE1MTI0MDEwOTMzNzRhY2JmN2E2Y2E0MDE2ODlkMTA4MTNiMmU5MmUx
14
- MGZiODAwOGVjODczODJlNDMxOTZiZmU0MjBhNTM3OWQ0NWY2MDg4ZjcyMWNl
15
- OWFiZGUyM2MzZGNhMDhjYjIxZjYxYmI0YWU4M2UwOWFmNzI5Yzg=
6
+ metadata.gz: 78343ff70e99a692d5a7a53fbf5ad33b63d1207a1a15dbcd690bc8036cb5a77d56ff3f227bffa32a52d8fa5705e0b2f383415bd33dddc6a2dad4066a2d08052b
7
+ data.tar.gz: 4b54dc359fa1b42b176d8ad45fdb2eee2c0e304563a1d52a80a82d958e70857f9b84103b99718a9a8fee0050a48a3a292dc451499cda6de62c09ac9c95e1e85f
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/Rakefile CHANGED
@@ -4,3 +4,4 @@ task :default do
4
4
  system("rake -T")
5
5
  end
6
6
 
7
+ require "logstash/devutils/rake"
@@ -12,15 +12,15 @@ class LogStash::Outputs::File < LogStash::Outputs::Base
12
12
  milestone 2
13
13
 
14
14
  # The path to the file to write. Event fields can be used here,
15
- # like "/var/log/logstash/%{host}/%{application}"
15
+ # like `/var/log/logstash/%{host}/%{application}`
16
16
  # One may also utilize the path option for date-based log
17
17
  # rotation via the joda time format. This will use the event
18
18
  # timestamp.
19
- # E.g.: path => "./test-%{+YYYY-MM-dd}.txt" to create
20
- # ./test-2013-05-29.txt
19
+ # E.g.: `path => "./test-%{+YYYY-MM-dd}.txt"` to create
20
+ # `./test-2013-05-29.txt`
21
21
  #
22
22
  # If you use an absolute path you cannot start with a dynamic string.
23
- # E.g: /%{myfield}/, /test-%{myfield}/ are not valid paths
23
+ # E.g: `/%{myfield}/`, `/test-%{myfield}/` are not valid paths
24
24
  config :path, :validate => :string, :required => true
25
25
 
26
26
  # The maximum size of file to write. When the file exceeds this
@@ -32,7 +32,7 @@ class LogStash::Outputs::File < LogStash::Outputs::Base
32
32
  config :max_size, :validate => :string
33
33
 
34
34
  # The format to use when writing events to the file. This value
35
- # supports any string and can include %{name} and other dynamic
35
+ # supports any string and can include `%{name}` and other dynamic
36
36
  # strings.
37
37
  #
38
38
  # If this setting is omitted, the full json representation of the
@@ -1,13 +1,13 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-output-file'
4
- s.version = '0.1.0'
4
+ s.version = '0.1.1'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "This output will write events to files on disk"
7
- s.description = "This output will write events to files on disk"
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,11 +17,12 @@ 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" => "output" }
20
+ s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
21
21
 
22
22
  # Gem dependencies
23
23
  s.add_runtime_dependency 'logstash', '>= 1.4.0', '< 2.0.0'
24
24
  s.add_runtime_dependency 'logstash-input-generator'
25
25
 
26
+ s.add_development_dependency 'logstash-devutils'
26
27
  end
27
28
 
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
- require "spec_helper"
2
+ require "logstash/devutils/rspec/spec_helper"
3
3
  require "logstash/outputs/file"
4
4
  require "logstash/event"
5
5
  require "logstash/json"
metadata CHANGED
@@ -1,51 +1,65 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-file
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-06 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
- name: logstash
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
- - - ! '>='
16
+ - - '>='
18
17
  - !ruby/object:Gem::Version
19
18
  version: 1.4.0
20
19
  - - <
21
20
  - !ruby/object:Gem::Version
22
21
  version: 2.0.0
23
- type: :runtime
22
+ name: logstash
24
23
  prerelease: false
24
+ type: :runtime
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
- - - ! '>='
27
+ - - '>='
28
28
  - !ruby/object:Gem::Version
29
29
  version: 1.4.0
30
30
  - - <
31
31
  - !ruby/object:Gem::Version
32
32
  version: 2.0.0
33
33
  - !ruby/object:Gem::Dependency
34
- name: logstash-input-generator
35
34
  requirement: !ruby/object:Gem::Requirement
36
35
  requirements:
37
- - - ! '>='
36
+ - - '>='
38
37
  - !ruby/object:Gem::Version
39
38
  version: '0'
39
+ name: logstash-input-generator
40
+ prerelease: false
40
41
  type: :runtime
42
+ version_requirements: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - '>='
45
+ - !ruby/object:Gem::Version
46
+ version: '0'
47
+ - !ruby/object:Gem::Dependency
48
+ requirement: !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - '>='
51
+ - !ruby/object:Gem::Version
52
+ version: '0'
53
+ name: logstash-devutils
41
54
  prerelease: false
55
+ type: :development
42
56
  version_requirements: !ruby/object:Gem::Requirement
43
57
  requirements:
44
- - - ! '>='
58
+ - - '>='
45
59
  - !ruby/object:Gem::Version
46
60
  version: '0'
47
- description: This output will write events to files on disk
48
- email: richard.pijnenburg@elasticsearch.com
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: []
@@ -56,33 +70,31 @@ files:
56
70
  - Rakefile
57
71
  - lib/logstash/outputs/file.rb
58
72
  - logstash-output-file.gemspec
59
- - rakelib/publish.rake
60
- - rakelib/vendor.rake
61
73
  - spec/outputs/file_spec.rb
62
- homepage: http://logstash.net/
74
+ homepage: http://www.elasticsearch.org/guide/en/logstash/current/index.html
63
75
  licenses:
64
76
  - Apache License (2.0)
65
77
  metadata:
66
78
  logstash_plugin: 'true'
67
- group: output
68
- post_install_message:
79
+ logstash_group: output
80
+ post_install_message:
69
81
  rdoc_options: []
70
82
  require_paths:
71
83
  - lib
72
84
  required_ruby_version: !ruby/object:Gem::Requirement
73
85
  requirements:
74
- - - ! '>='
86
+ - - '>='
75
87
  - !ruby/object:Gem::Version
76
88
  version: '0'
77
89
  required_rubygems_version: !ruby/object:Gem::Requirement
78
90
  requirements:
79
- - - ! '>='
91
+ - - '>='
80
92
  - !ruby/object:Gem::Version
81
93
  version: '0'
82
94
  requirements: []
83
- rubyforge_project:
84
- rubygems_version: 2.4.1
85
- signing_key:
95
+ rubyforge_project:
96
+ rubygems_version: 2.1.9
97
+ signing_key:
86
98
  specification_version: 4
87
99
  summary: This output will write events to files on disk
88
100
  test_files:
data/rakelib/publish.rake DELETED
@@ -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
-
data/rakelib/vendor.rake DELETED
@@ -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