logstash-codec-thrift 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 +1 -0
- data/Gemfile +2 -0
- data/README.md +43 -0
- data/Rakefile +7 -0
- data/lib/logstash/codecs/thrift-event.rb +32 -0
- data/lib/logstash/codecs/thrift.rb +109 -0
- data/lib/thrift/event.thrift +6 -0
- data/logstash-codec-thrift.gemspec +29 -0
- metadata +103 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: ee6ee6cc8ec8d720b7910442c5ed7dc8a440742c
|
4
|
+
data.tar.gz: b02e5490937476c9eb152c2fcd78b0e6c7b8c89d
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 6a418f2bf9254f31b4160305dfec168c3689135f1b300183524623f99743ea7c343669306f8d0fa4f24307f4686314bfb7a8f28fb53bf1e886b786f610bac434
|
7
|
+
data.tar.gz: 22e46011821616d46eea3de80bb7165dcd454bf58ddcc2ec47f09de3b0a3974ca056b31ccad8d27826d439193fc46cb051f92f2b5e261e1db37c4dc4385ed32b
|
data/.gitignore
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
Gemfile.lock
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# Logstash Codec Thrift
|
2
|
+
|
3
|
+
## Install
|
4
|
+
|
5
|
+
$ ./bin/plugin install logstash-codec-thrift
|
6
|
+
|
7
|
+
## Usage
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
input {
|
11
|
+
zeromq {
|
12
|
+
codec => thrift {
|
13
|
+
classname => "example_thrift_class"
|
14
|
+
file => "/path/to/your/thrift/gen/ruby/example_thrift_class_types.rb"
|
15
|
+
protocol_factory => "JsonProtocolFactory" # optional, defalut: BinaryProtocolFactory
|
16
|
+
}
|
17
|
+
}
|
18
|
+
}
|
19
|
+
```
|
20
|
+
|
21
|
+
## Install dependencies
|
22
|
+
|
23
|
+
Install jruby:
|
24
|
+
|
25
|
+
$ brew install jruby
|
26
|
+
|
27
|
+
Install jruby bundler:
|
28
|
+
|
29
|
+
$ jruby -S gem install bundler
|
30
|
+
|
31
|
+
Install plugin dependencies:
|
32
|
+
|
33
|
+
$ jruby -S bundler install
|
34
|
+
|
35
|
+
## Build & Install
|
36
|
+
|
37
|
+
Build Gem:
|
38
|
+
|
39
|
+
$ gem build logstash-codec-thrift.gemspec
|
40
|
+
|
41
|
+
Install Gem:
|
42
|
+
|
43
|
+
$ ./bin/plugin install /your/local/plugin/logstash-codec-thrift.gem
|
data/Rakefile
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
#
|
2
|
+
# Autogenerated by Thrift Compiler (0.9.2)
|
3
|
+
#
|
4
|
+
# DO NOT EDIT UNLESS YOU ARE SURE THAT YOU KNOW WHAT YOU ARE DOING
|
5
|
+
#
|
6
|
+
|
7
|
+
require 'thrift'
|
8
|
+
|
9
|
+
class ThriftEvent
|
10
|
+
include ::Thrift::Struct, ::Thrift::Struct_Union
|
11
|
+
TIMESTAMP = 1
|
12
|
+
VERSION = 2
|
13
|
+
HOST = 3
|
14
|
+
MESSAGE = 4
|
15
|
+
|
16
|
+
FIELDS = {
|
17
|
+
TIMESTAMP => {:type => ::Thrift::Types::STRING, :name => 'timestamp'},
|
18
|
+
VERSION => {:type => ::Thrift::Types::STRING, :name => 'version'},
|
19
|
+
HOST => {:type => ::Thrift::Types::STRING, :name => 'host', :optional => true},
|
20
|
+
MESSAGE => {:type => ::Thrift::Types::STRING, :name => 'message', :optional => true}
|
21
|
+
}
|
22
|
+
|
23
|
+
def struct_fields; FIELDS; end
|
24
|
+
|
25
|
+
def validate
|
26
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field timestamp is unset!') unless @timestamp
|
27
|
+
raise ::Thrift::ProtocolException.new(::Thrift::ProtocolException::UNKNOWN, 'Required field version is unset!') unless @version
|
28
|
+
end
|
29
|
+
|
30
|
+
::Thrift::Struct.generate_accessors self
|
31
|
+
end
|
32
|
+
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require "logger"
|
3
|
+
require "logstash/codecs/base"
|
4
|
+
require "logstash/namespace"
|
5
|
+
require "logstash/timestamp"
|
6
|
+
require "thrift"
|
7
|
+
require "logstash/codecs/thrift-event"
|
8
|
+
|
9
|
+
# Read serialized Thrift records as Logstash events
|
10
|
+
#
|
11
|
+
# This plugin is used to serialize Logstash events as
|
12
|
+
# Thrift objects, as well as deserializing Thrift objects into
|
13
|
+
# Logstash events.
|
14
|
+
#
|
15
|
+
# ==== Encoding
|
16
|
+
#
|
17
|
+
# This codec is for serializing individual Logstash events as Thrift.
|
18
|
+
#
|
19
|
+
#
|
20
|
+
# ==== Decoding
|
21
|
+
#
|
22
|
+
# This codec is for deserializing individual Thrift serialized objects as Logstash events.
|
23
|
+
#
|
24
|
+
#
|
25
|
+
# ==== Usage
|
26
|
+
# Example usage with 0mq input.
|
27
|
+
#
|
28
|
+
# [source,ruby]
|
29
|
+
# ----------------------------------
|
30
|
+
# input {
|
31
|
+
# zeromq {
|
32
|
+
# codec => thrift {
|
33
|
+
# classname => "example_class"
|
34
|
+
# file => "~/example_class.rb"
|
35
|
+
# protocol_factory => "JsonProtocolFactory"
|
36
|
+
# }
|
37
|
+
# }
|
38
|
+
# }
|
39
|
+
# filter {
|
40
|
+
# ...
|
41
|
+
# }
|
42
|
+
# output {
|
43
|
+
# ...
|
44
|
+
# }
|
45
|
+
# ----------------------------------
|
46
|
+
class LogStash::Codecs::Thrift < LogStash::Codecs::Base
|
47
|
+
|
48
|
+
config_name "thrift"
|
49
|
+
|
50
|
+
# class name to serialize/deserialize against
|
51
|
+
config :classname, :validate => :string, :required => true
|
52
|
+
|
53
|
+
# file defining @classname
|
54
|
+
config :file, :validate => :string, :required => true
|
55
|
+
|
56
|
+
# protocol factory to use for serialization/deserialization
|
57
|
+
#
|
58
|
+
# see http://www.rubydoc.info/gems/thrift/latest/Thrift/Serializer for more info
|
59
|
+
config :protocol_factory, :validate => :string, :required => false, :default => "BinaryProtocolFactory"
|
60
|
+
|
61
|
+
public
|
62
|
+
def register
|
63
|
+
@logger.info("Initializing logstash thrift codec for class: " + @classname)
|
64
|
+
require @file
|
65
|
+
@clazz = Object.const_get(@classname.capitalize)
|
66
|
+
@protocolFactory = Thrift.const_get(@protocol_factory)
|
67
|
+
@logger.info("Done initializing logstash thrift codec!")
|
68
|
+
end
|
69
|
+
|
70
|
+
public
|
71
|
+
def decode(data)
|
72
|
+
deserializer = Thrift::Deserializer.new(@protocolFactory.new)
|
73
|
+
yield LogStash::Event.new(as_hash(deserializer.deserialize(@clazz.new, data)))
|
74
|
+
end
|
75
|
+
|
76
|
+
public
|
77
|
+
def encode(event)
|
78
|
+
serializer = Thrift::Serializer.new(@protocolFactory.new)
|
79
|
+
thriftEvent = ThriftEvent.new
|
80
|
+
thriftEvent.timestamp = event["@timestamp"].to_s
|
81
|
+
thriftEvent.version = event["@version"]
|
82
|
+
thriftEvent.host = event["host"]
|
83
|
+
thriftEvent.message = event["message"]
|
84
|
+
@on_event.call(event, serializer.serialize(thriftEvent))
|
85
|
+
end
|
86
|
+
|
87
|
+
private
|
88
|
+
def as_hash(obj)
|
89
|
+
hash = {}
|
90
|
+
obj.instance_variables.each { |var|
|
91
|
+
key = var.to_s.delete("@")
|
92
|
+
value = obj.instance_variable_get(var)
|
93
|
+
if value.is_a?(Array)
|
94
|
+
hash[key] = []
|
95
|
+
value.each do |elem|
|
96
|
+
if elem.is_a?(Array) || elem.is_a?(Object)
|
97
|
+
hash[key].push(as_hash(elem))
|
98
|
+
else
|
99
|
+
hash[key].push(elem)
|
100
|
+
end
|
101
|
+
end
|
102
|
+
else
|
103
|
+
hash[key] = value
|
104
|
+
end
|
105
|
+
}
|
106
|
+
hash
|
107
|
+
end
|
108
|
+
|
109
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
Gem::Specification.new do |s|
|
2
|
+
|
3
|
+
s.name = 'logstash-codec-thrift'
|
4
|
+
s.version = '0.1.0'
|
5
|
+
s.licenses = ['Apache License (2.0)']
|
6
|
+
s.summary = "This example input streams a string at a definable interval."
|
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 = ["Active Agent AG"]
|
9
|
+
s.email = 'dev@active-agent.com'
|
10
|
+
s.homepage = "http://active-agent.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
|
+
s.add_runtime_dependency 'thrift'
|
25
|
+
|
26
|
+
s.add_development_dependency 'logstash-devutils', '>= 0.0.15'
|
27
|
+
|
28
|
+
|
29
|
+
end
|
metadata
ADDED
@@ -0,0 +1,103 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: logstash-codec-thrift
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Active Agent AG
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2015-08-19 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: logstash-core
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.4.0
|
20
|
+
- - "<"
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 2.0.0
|
23
|
+
type: :runtime
|
24
|
+
prerelease: false
|
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
|
+
name: thrift
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - ">="
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '0'
|
40
|
+
type: :runtime
|
41
|
+
prerelease: false
|
42
|
+
version_requirements: !ruby/object:Gem::Requirement
|
43
|
+
requirements:
|
44
|
+
- - ">="
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '0'
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: logstash-devutils
|
49
|
+
requirement: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: 0.0.15
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
requirements:
|
58
|
+
- - ">="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.0.15
|
61
|
+
description: This gem is a logstash plugin required to be installed on top of the
|
62
|
+
Logstash core pipeline using $LS_HOME/bin/plugin install gemname. This gem is not
|
63
|
+
a stand-alone program
|
64
|
+
email: dev@active-agent.com
|
65
|
+
executables: []
|
66
|
+
extensions: []
|
67
|
+
extra_rdoc_files: []
|
68
|
+
files:
|
69
|
+
- ".gitignore"
|
70
|
+
- Gemfile
|
71
|
+
- README.md
|
72
|
+
- Rakefile
|
73
|
+
- lib/logstash/codecs/thrift-event.rb
|
74
|
+
- lib/logstash/codecs/thrift.rb
|
75
|
+
- lib/thrift/event.thrift
|
76
|
+
- logstash-codec-thrift.gemspec
|
77
|
+
homepage: http://active-agent.com
|
78
|
+
licenses:
|
79
|
+
- Apache License (2.0)
|
80
|
+
metadata:
|
81
|
+
logstash_plugin: 'true'
|
82
|
+
logstash_group: codec
|
83
|
+
post_install_message:
|
84
|
+
rdoc_options: []
|
85
|
+
require_paths:
|
86
|
+
- lib
|
87
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
88
|
+
requirements:
|
89
|
+
- - ">="
|
90
|
+
- !ruby/object:Gem::Version
|
91
|
+
version: '0'
|
92
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
requirements: []
|
98
|
+
rubyforge_project:
|
99
|
+
rubygems_version: 2.4.5
|
100
|
+
signing_key:
|
101
|
+
specification_version: 4
|
102
|
+
summary: This example input streams a string at a definable interval.
|
103
|
+
test_files: []
|