logstash-output-file 4.1.2 → 4.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0031f28c479fb5916b1cb21c53b4e1f0438716d05eb58d910383992dd767b0fa
4
- data.tar.gz: 9cb1ffa71455af5af93349a6e437548155451887ef72c4a5c9361d863987ef70
3
+ metadata.gz: f1c0a72039a31511cef581ab157dc78e8e545b16fb9e1301d8628f9ab77492c6
4
+ data.tar.gz: c86ee9d1049b8caa50ec3d6089a4fa8ac958bb16e8f4b6294c3e51a7795c23e2
5
5
  SHA512:
6
- metadata.gz: b36b0dbc3be1c59f45295079358cc36c875e4234cd6bbc927432f9408ed9a8ab8bc8a77584fc910f83eeea120c4f1fe38617f72831358d174ce872e6ecf6ab48
7
- data.tar.gz: 7b92b2bddf002098e4790aaf6f4eff582486e349ecd989189641b11a9182ba424b1d669b676d72f9f758f74258bbb5720c9ef20b840e67b4308a96cf390ad1f4
6
+ metadata.gz: c9d25f9bb1d42e83c2843592001b4d5670004a0b26bf30a14e05ae46b530ccd23e4fdd69527b937bc14d98235e5280b97247c586f8b12d6444583e9c68c13951
7
+ data.tar.gz: 02d594fa1aa927b877f7495954029ae568bd4fcf6080331fa89cbc2919b063f8ffb7471334889a238822711e5fd5e5138e422e59858be720d41cf9d81fb560a7
data/CHANGELOG.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## 4.2.0
2
+ - New `write_behavior` feature. Value can be "append" (default) or
3
+ "overwrite". If "append", events will be appended to the end of the file.
4
+ If "overwrite", the file will only contain the last event written.
5
+
1
6
  ## 4.1.2
2
7
  - Update gemspec summary
3
8
 
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
2
  require "logstash/namespace"
3
3
  require "logstash/outputs/base"
4
+ require "flores/random"
4
5
  require "logstash/errors"
5
6
  require "zlib"
6
7
 
@@ -64,6 +65,16 @@ class LogStash::Outputs::File < LogStash::Outputs::Base
64
65
  # Example: `"file_mode" => 0640`
65
66
  config :file_mode, :validate => :number, :default => -1
66
67
 
68
+
69
+ # How should the file be written?
70
+ #
71
+ # If `append`, the file will be opened for appending and each new event will
72
+ # be written at the end of the file.
73
+ #
74
+ # If `overwrite`, the file will be truncated before writing and only the most
75
+ # recent event will appear in the file.
76
+ config :write_behavior, :validate => [ "overwrite", "append" ], :default => "append"
77
+
67
78
  default :codec, "json_lines"
68
79
 
69
80
  public
@@ -123,7 +134,14 @@ class LogStash::Outputs::File < LogStash::Outputs::Base
123
134
  @io_mutex.synchronize do
124
135
  encoded_by_path.each do |path,chunks|
125
136
  fd = open(path)
126
- chunks.each {|chunk| fd.write(chunk) }
137
+ if @write_behavior == "overwrite"
138
+ fd.truncate(0)
139
+ fd.seek(0, IO::SEEK_SET)
140
+ fd.write(chunks.last)
141
+ else
142
+ # append to the file
143
+ chunks.each {|chunk| fd.write(chunk) }
144
+ end
127
145
  fd.flush
128
146
  end
129
147
 
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-output-file'
4
- s.version = '4.1.2'
4
+ s.version = '4.2.0'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Writes events to files on disk"
7
7
  s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
@@ -25,5 +25,6 @@ Gem::Specification.new do |s|
25
25
  s.add_runtime_dependency 'logstash-codec-line'
26
26
 
27
27
  s.add_development_dependency 'logstash-devutils'
28
+ s.add_development_dependency 'flores'
28
29
  s.add_development_dependency 'logstash-input-generator'
29
30
  end
@@ -2,6 +2,7 @@
2
2
  require "logstash/devutils/rspec/spec_helper"
3
3
  require "logstash/outputs/file"
4
4
  require "logstash/codecs/line"
5
+ require "logstash/codecs/json_lines"
5
6
  require "logstash/event"
6
7
  require "logstash/json"
7
8
  require "stud/temporary"
@@ -111,6 +112,49 @@ describe LogStash::Outputs::File do
111
112
 
112
113
  describe "receiving events" do
113
114
 
115
+ context "when write_behavior => 'overwrite'" do
116
+ let(:tmp) { Stud::Temporary.pathname }
117
+ let(:config) {
118
+ {
119
+ "write_behavior" => "overwrite",
120
+ "path" => tmp,
121
+ "codec" => LogStash::Codecs::JSONLines.new
122
+ }
123
+ }
124
+ let(:output) { LogStash::Outputs::File.new(config) }
125
+
126
+ let(:count) { Flores::Random.integer(1..10) }
127
+ let(:events) do
128
+ Flores::Random.iterations(1..10).collect do |i|
129
+ LogStash::Event.new("value" => i)
130
+ end
131
+ end
132
+
133
+ before do
134
+ output.register
135
+ end
136
+
137
+ after do
138
+ File.unlink(tmp) if File.exist?(tmp)
139
+ end
140
+
141
+ it "should write only the last event of a batch" do
142
+ output.multi_receive(events)
143
+ result = LogStash::Json.load(File.read(tmp))
144
+ expect(result["value"]).to be == events.last.get("value")
145
+ end
146
+
147
+ context "the file" do
148
+ it "should only contain the last event received" do
149
+ events.each do |event|
150
+ output.multi_receive([event])
151
+ result = LogStash::Json.load(File.read(tmp))
152
+ expect(result["value"]).to be == event.get("value")
153
+ end
154
+ end
155
+ end
156
+ end
157
+
114
158
  context "when the output file is deleted" do
115
159
 
116
160
  let(:temp_file) { Tempfile.new('logstash-spec-output-file_deleted') }
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-file
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.1.2
4
+ version: 4.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-07 00:00:00.000000000 Z
11
+ date: 2017-11-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
@@ -72,6 +72,20 @@ dependencies:
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
74
  version: '0'
75
+ - !ruby/object:Gem::Dependency
76
+ requirement: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ name: flores
82
+ prerelease: false
83
+ type: :development
84
+ version_requirements: !ruby/object:Gem::Requirement
85
+ requirements:
86
+ - - ">="
87
+ - !ruby/object:Gem::Version
88
+ version: '0'
75
89
  - !ruby/object:Gem::Dependency
76
90
  requirement: !ruby/object:Gem::Requirement
77
91
  requirements:
@@ -126,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
126
140
  version: '0'
127
141
  requirements: []
128
142
  rubyforge_project:
129
- rubygems_version: 2.6.11
143
+ rubygems_version: 2.6.13
130
144
  signing_key:
131
145
  specification_version: 4
132
146
  summary: Writes events to files on disk