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 +4 -4
- data/CHANGELOG.md +5 -0
- data/lib/logstash/outputs/file.rb +19 -1
- data/logstash-output-file.gemspec +2 -1
- data/spec/outputs/file_spec.rb +44 -0
- metadata +17 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1c0a72039a31511cef581ab157dc78e8e545b16fb9e1301d8628f9ab77492c6
|
4
|
+
data.tar.gz: c86ee9d1049b8caa50ec3d6089a4fa8ac958bb16e8f4b6294c3e51a7795c23e2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c9d25f9bb1d42e83c2843592001b4d5670004a0b26bf30a14e05ae46b530ccd23e4fdd69527b937bc14d98235e5280b97247c586f8b12d6444583e9c68c13951
|
7
|
+
data.tar.gz: 02d594fa1aa927b877f7495954029ae568bd4fcf6080331fa89cbc2919b063f8ffb7471334889a238822711e5fd5e5138e422e59858be720d41cf9d81fb560a7
|
data/CHANGELOG.md
CHANGED
@@ -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
|
-
|
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.
|
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
|
data/spec/outputs/file_spec.rb
CHANGED
@@ -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.
|
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-
|
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.
|
143
|
+
rubygems_version: 2.6.13
|
130
144
|
signing_key:
|
131
145
|
specification_version: 4
|
132
146
|
summary: Writes events to files on disk
|