fluent-plugin-ilm_hbase 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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: d56ffa36dcbb7c9502a25a7ecc176c6c57ae29f4
4
+ data.tar.gz: f4db2bbfbe8506080b5c0589795172f7ce09a18f
5
+ SHA512:
6
+ metadata.gz: 50f3c3b36fafdf998b552f586edb167c16e59bd1dd85a40fcd89f15f1e34283d31ec3b41f06aeac64e1188653aeffa34c720060624f96eb7771dad5831454132
7
+ data.tar.gz: 81d10b73c64ea7c249e097ea28659adb9d1e8d8dc028e44aaf829d72c3bb003ef274b4b83c0f7c01e35a8214b0a7e03cd3253acd7d22ad2daaca8c3599f5f492
@@ -0,0 +1,127 @@
1
+ require "fluent/plugin/ilm_hbase/version"
2
+
3
+ module Fluent
4
+ module Plugin
5
+ class IlmHbaseOutput < Fluent::BufferedOutput
6
+ Fluent::Plugin.register_output('ilm_hbase', self)
7
+
8
+ def initialize
9
+ super
10
+ require 'massive_record'
11
+ end
12
+
13
+ # Format dates with ISO 8606 by default
14
+ # # http://www.w3.org/TR/NOTE-datetime
15
+ config_param :time_format, :string, :default => '%Y-%m-%dT%H:%M:%S.%L%:z'
16
+
17
+ include SetTagKeyMixin
18
+ config_set_default :include_tag_key, false
19
+ config_set_default :tag_key, nil
20
+
21
+ include SetTimeKeyMixin
22
+ config_set_default :include_time_key, false
23
+ config_set_default :time_key, nil
24
+
25
+
26
+ config_param :include_custom_timestamp, :bool, :default=>false
27
+ config_param :custom_time_stamp_key, :string, :default => nil
28
+ config_param :tag_column_name, :string, :default => nil
29
+ config_param :time_column_name, :string, :default => nil
30
+ config_param :fields_to_columns_mapping, :string
31
+ config_param :hbase_host, :string, :default => 'localhost'
32
+ config_param :hbase_port, :integer, :default => 9090
33
+ config_param :hbase_table, :string
34
+
35
+ def configure(conf)
36
+ super
37
+
38
+ @fields_to_columns = @fields_to_columns_mapping.split(",").map { |src_to_dst|
39
+ src_to_dst.split("=>")
40
+ }
41
+ @mapping = Hash[*@fields_to_columns.flatten]
42
+ end
43
+
44
+ def start
45
+ super
46
+
47
+ @conn = MassiveRecord::Wrapper::Connection.new(:host => @hbase_host, :port => @hbase_port)
48
+ @table = MassiveRecord::Wrapper::Table.new(@conn, @hbase_table.intern)
49
+
50
+ unless @table.exists?
51
+ columns = ([@tag_column_name, @time_column_name] + @mapping.values).reject(&:nil?)
52
+ column_families = columns.map {|column_family_with_column|
53
+ column_family, column = column_family_with_column.split(":")
54
+
55
+ if column.nil? or column_family.nil?
56
+ raise <<MESSAGE
57
+ Unexpected format for column name: #{column_family_with_column}
58
+ Each destination column in the 'record_to_columns_mapping' option
59
+ must be specified in the format of \"column_family:column\".
60
+ Are you sure you included ':' in column names?
61
+ MESSAGE
62
+ end
63
+
64
+ column_family.intern
65
+ }
66
+ column_families.uniq!
67
+
68
+ @table.create_column_families(column_families)
69
+ @table.save
70
+ end
71
+ end
72
+
73
+ def format(tag, time, record)
74
+ row_values = {}
75
+
76
+ row_values[@tag_column_name] = tag unless @tag_column_name.nil?
77
+ row_values[@time_column_name] = time unless @time_column_name.nil?
78
+
79
+ @fields_to_columns.each {|field,column|
80
+
81
+ next if field.nil? or column.nil?
82
+
83
+ components = field.split(".")
84
+ value = record
85
+ for c in components
86
+ value = value[c]
87
+
88
+ break if value.nil?
89
+ end
90
+
91
+ row_values[column] = value
92
+ }
93
+
94
+ row_values.to_msgpack
95
+ end
96
+
97
+ def write(chunk)
98
+ customtime = 0
99
+ chunk.msgpack_each{|row_values|
100
+ row_values.each {|column_family_and_column, value|
101
+ if column_family_and_column == @custom_time_stamp_key
102
+ customtime = value.to_i
103
+ end
104
+
105
+ }
106
+
107
+ }
108
+
109
+ chunk.msgpack_each {|row_values|
110
+ event = {}
111
+
112
+ row_values.each {|column_family_and_column, value|
113
+ column_family, column = column_family_and_column.split(":")
114
+
115
+ (event[column_family.intern] ||= {}).update({column => value})
116
+ }
117
+
118
+ row = MassiveRecord::Wrapper::Row.new
119
+ row.id = customtime
120
+ row.values = event
121
+ row.table = @table
122
+ row.save
123
+ }
124
+ end
125
+ end
126
+ end
127
+ end
metadata ADDED
@@ -0,0 +1,87 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-ilm_hbase
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - testman
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-06-28 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ description: '"test gem"'
56
+ email:
57
+ - test@rubygems.org
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - lib/fluent/plugin/out-ilm_hbase.rb
63
+ homepage: http://rubygems.org/gems/fluent-plugin-ilm_hbase
64
+ licenses:
65
+ - MIT
66
+ metadata: {}
67
+ post_install_message:
68
+ rdoc_options: []
69
+ require_paths:
70
+ - lib
71
+ required_ruby_version: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ required_rubygems_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ requirements: []
82
+ rubyforge_project:
83
+ rubygems_version: 2.4.8
84
+ signing_key:
85
+ specification_version: 4
86
+ summary: '"modified hbase output plugin"'
87
+ test_files: []