logstash-output-file 4.1.2 → 4.2.0

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,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