logstash-codec-lineeof 0.1.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 +7 -0
- data/.gitignore +3 -0
- data/Gemfile +2 -0
- data/LICENSE +13 -0
- data/Rakefile +7 -0
- data/lib/logstash/codecs/lineeof.rb +61 -0
- data/logstash-codec-lineeof.gemspec +27 -0
- data/spec/codecs/lineeof_spec.rb +67 -0
- metadata +87 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 098a38756136c401d608c5b490615ccbec1d97b9
|
4
|
+
data.tar.gz: f6494f73ab63c8748e1a01439b205c6296daa779
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 8e72f6ef34e30231afbae0e52e15831e1aca92787f90b2fca4474226811285dc2156804bcc7f5726f60fd6d93c67ee6f250d926c8214d69d7fad9310d31c8057
|
7
|
+
data.tar.gz: f328da1975307c4517ab8b9eb6dfe3c9f742e5951a89b001ba4349a2c53aedb0c55d31621be37e6bcdf1445c5cc5fc15692788e9484e476b3c6985da201a0a46
|
data/.gitignore
ADDED
data/Gemfile
ADDED
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
ADDED
@@ -0,0 +1,61 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logstash/codecs/base"
|
3
|
+
require "logstash/util/charset"
|
4
|
+
|
5
|
+
# Line-oriented text data with EOF(end of file) recognition.
|
6
|
+
#
|
7
|
+
# Decoding behavior: Only whole line events will be emitted.
|
8
|
+
#
|
9
|
+
# Encoding behavior: Each event will be emitted with a trailing newline.
|
10
|
+
class LogStash::Codecs::LineEOF < LogStash::Codecs::Base
|
11
|
+
config_name "lineeof"
|
12
|
+
|
13
|
+
# Set the desired text format for encoding.
|
14
|
+
config :format, :validate => :string
|
15
|
+
|
16
|
+
# The character encoding used in this input. Examples include "UTF-8"
|
17
|
+
# and "cp1252"
|
18
|
+
#
|
19
|
+
# This setting is useful if your log files are in Latin-1 (aka cp1252)
|
20
|
+
# or in another character set other than UTF-8.
|
21
|
+
#
|
22
|
+
# This only affects "plain" format logs since json is UTF-8 already.
|
23
|
+
config :charset, :validate => ::Encoding.name_list, :default => "UTF-8"
|
24
|
+
|
25
|
+
public
|
26
|
+
def register
|
27
|
+
require "logstash/util/buftok"
|
28
|
+
@buffer = FileWatch::BufferedTokenizer.new
|
29
|
+
@converter = LogStash::Util::Charset.new(@charset)
|
30
|
+
@converter.logger = @logger
|
31
|
+
end
|
32
|
+
|
33
|
+
public
|
34
|
+
def decode(data)
|
35
|
+
lines = @buffer.extract(data)
|
36
|
+
lines.each_with_index do |line, index|
|
37
|
+
event = LogStash::Event.new("message" => @converter.convert(line))
|
38
|
+
#if end of file is reached?
|
39
|
+
event.tag("eof") if index == lines.size - 1 && data.length < 32768
|
40
|
+
yield event
|
41
|
+
end
|
42
|
+
end # def decode
|
43
|
+
|
44
|
+
public
|
45
|
+
def flush(&block)
|
46
|
+
remainder = @buffer.flush
|
47
|
+
if !remainder.empty?
|
48
|
+
block.call(LogStash::Event.new({"message" => remainder}))
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
public
|
53
|
+
def encode(data)
|
54
|
+
if data.is_a? LogStash::Event and @format
|
55
|
+
@on_event.call(data.sprintf(@format) + "\n")
|
56
|
+
else
|
57
|
+
@on_event.call(data.to_s + "\n")
|
58
|
+
end
|
59
|
+
end # def encode
|
60
|
+
|
61
|
+
end # class LogStash::Codecs::Plain
|
@@ -0,0 +1,27 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
|
3
|
+
s.name = 'logstash-codec-lineeof'
|
4
|
+
s.version = '0.1.0'
|
5
|
+
s.licenses = ['Apache License (2.0)']
|
6
|
+
s.summary = "Line-oriented text data with EOF(end of file) recognition."
|
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
|
+
s.authors = ["Signify"]
|
9
|
+
s.email = 'dietmar@signifydata.com'
|
10
|
+
s.homepage = "http://www.signifydata.com"
|
11
|
+
s.require_paths = ["lib"]
|
12
|
+
|
13
|
+
# Files
|
14
|
+
s.files = `git ls-files`.split($\)
|
15
|
+
|
16
|
+
# Tests
|
17
|
+
s.test_files = s.files.grep(%r{^(test|spec|features)/})
|
18
|
+
|
19
|
+
# Special flag to let us know this is actually a logstash plugin
|
20
|
+
s.metadata = { "logstash_plugin" => "true", "logstash_group" => "codec" }
|
21
|
+
|
22
|
+
# Gem dependencies
|
23
|
+
s.add_runtime_dependency 'logstash-core', '>= 1.4.0', '< 2.0.0'
|
24
|
+
|
25
|
+
s.add_development_dependency 'logstash-devutils'
|
26
|
+
end
|
27
|
+
|
@@ -0,0 +1,67 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require "logstash/devutils/rspec/spec_helper"
|
4
|
+
require "logstash/codecs/line"
|
5
|
+
require "logstash/event"
|
6
|
+
|
7
|
+
describe LogStash::Codecs::Line do
|
8
|
+
subject do
|
9
|
+
next LogStash::Codecs::Line.new
|
10
|
+
end
|
11
|
+
|
12
|
+
context "#encode" do
|
13
|
+
let (:event) {LogStash::Event.new({"message" => "hello world", "host" => "test"})}
|
14
|
+
|
15
|
+
it "should return a default date formatted line" do
|
16
|
+
expect(subject).to receive(:on_event).once.and_call_original
|
17
|
+
subject.on_event do |e, d|
|
18
|
+
insist {d} == event.to_s + "\n"
|
19
|
+
end
|
20
|
+
subject.encode(event)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should respect the supplied format" do
|
24
|
+
format = "%{host}"
|
25
|
+
subject.format = format
|
26
|
+
expect(subject).to receive(:on_event).once.and_call_original
|
27
|
+
subject.on_event do |e, d|
|
28
|
+
insist {d} == event.sprintf(format) + "\n"
|
29
|
+
end
|
30
|
+
subject.encode(event)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "#decode" do
|
35
|
+
it "should return an event from an ascii string" do
|
36
|
+
decoded = false
|
37
|
+
subject.decode("hello world\n") do |e|
|
38
|
+
decoded = true
|
39
|
+
insist { e.is_a?(LogStash::Event) }
|
40
|
+
insist { e["message"] } == "hello world"
|
41
|
+
end
|
42
|
+
insist { decoded } == true
|
43
|
+
end
|
44
|
+
|
45
|
+
it "should return an event from a valid utf-8 string" do
|
46
|
+
subject.decode("München\n") do |e|
|
47
|
+
insist { e.is_a?(LogStash::Event) }
|
48
|
+
insist { e["message"] } == "München"
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
context "#flush" do
|
54
|
+
it "should convert charsets" do
|
55
|
+
garbage = [0xD0].pack("C")
|
56
|
+
subject.decode(garbage) do |e|
|
57
|
+
fail "Should not get here."
|
58
|
+
end
|
59
|
+
count = 0
|
60
|
+
subject.flush do |event|
|
61
|
+
count += 1
|
62
|
+
insist { event["message"].encoding } == Encoding::UTF_8
|
63
|
+
end
|
64
|
+
insist { count } == 1
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
metadata
ADDED
@@ -0,0 +1,87 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: logstash-codec-lineeof
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Signify
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-25 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
requirement: !ruby/object:Gem::Requirement
|
15
|
+
requirements:
|
16
|
+
- - '>='
|
17
|
+
- !ruby/object:Gem::Version
|
18
|
+
version: 1.4.0
|
19
|
+
- - <
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 2.0.0
|
22
|
+
name: logstash-core
|
23
|
+
prerelease: false
|
24
|
+
type: :runtime
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: 1.4.0
|
30
|
+
- - <
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 2.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
requirement: !ruby/object:Gem::Requirement
|
35
|
+
requirements:
|
36
|
+
- - '>='
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: '0'
|
39
|
+
name: logstash-devutils
|
40
|
+
prerelease: false
|
41
|
+
type: :development
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - '>='
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
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
|
48
|
+
email: dietmar@signifydata.com
|
49
|
+
executables: []
|
50
|
+
extensions: []
|
51
|
+
extra_rdoc_files: []
|
52
|
+
files:
|
53
|
+
- .gitignore
|
54
|
+
- Gemfile
|
55
|
+
- LICENSE
|
56
|
+
- Rakefile
|
57
|
+
- lib/logstash/codecs/lineeof.rb
|
58
|
+
- logstash-codec-lineeof.gemspec
|
59
|
+
- spec/codecs/lineeof_spec.rb
|
60
|
+
homepage: http://www.signifydata.com
|
61
|
+
licenses:
|
62
|
+
- Apache License (2.0)
|
63
|
+
metadata:
|
64
|
+
logstash_plugin: 'true'
|
65
|
+
logstash_group: codec
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options: []
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - '>='
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
version: '0'
|
75
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - '>='
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '0'
|
80
|
+
requirements: []
|
81
|
+
rubyforge_project:
|
82
|
+
rubygems_version: 2.1.9
|
83
|
+
signing_key:
|
84
|
+
specification_version: 4
|
85
|
+
summary: Line-oriented text data with EOF(end of file) recognition.
|
86
|
+
test_files:
|
87
|
+
- spec/codecs/lineeof_spec.rb
|