fluent-plugin-avro_deluxe 0.0.1

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.
Files changed (3) hide show
  1. checksums.yaml +7 -0
  2. data/lib/formatter_avro.rb +79 -0
  3. metadata +43 -0
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: a0e4f8b9b1274e6614a9b34371662de4b32f6aae
4
+ data.tar.gz: 0d19cb5cfd89d1f1a102bb8e238bd7bc42d08a4f
5
+ SHA512:
6
+ metadata.gz: 4f648bf32dec3de55670c3cdc50995adedb630618a12c25dc2ef541db3a51f9d66462a204a0d5fe4d5933d10fb37f8f22c0ded5c85ddfcba5f023afeb5d3627a
7
+ data.tar.gz: 0c6f5d903bc9a862b99e00835af656c8bb714485b537ca2c471dfb585d85a6f06d6d7917fc366b68c391a223060257e8486f48c9dba5d1123074a50d9154bc40
@@ -0,0 +1,79 @@
1
+ require 'avro'
2
+ require 'schema_registry'
3
+ # https://github.com/revpoint/logstash-codec-avro_schema_registry/blob/master/lib/logstash/codecs/avro_schema_registry.rb
4
+ module Fluent
5
+ module TextFormatter
6
+ class AvroFormatter < Formatter
7
+ Fluent::Plugin.register_formatter('avro', self)
8
+
9
+ config_param :schema_file, :string, :default => nil
10
+ config_param :schema_json, :string, :default => nil
11
+ config_param :schema_url, :string, :default => nil
12
+ config_param :schema_subject, :string, :default => nil
13
+ config_param :schema_version, :string, :default => nil
14
+ # this stuff is needed if you're using a schema registry
15
+ # config_param :schema_version, :string, :default => nil
16
+ config_param :schema_id, :string, :default => nil
17
+ def configure(conf)
18
+ super
19
+ if !@schema_file.nil? then
20
+ raise Fluent::ConfigError "schema_file specified but schema_json already set" if !@schema_json.nil?
21
+ @schema_json = File.read(@schema_file)
22
+ end
23
+ if !@schema_url.nil? then
24
+ raise Fluent::ConfigError "schema_url specified but schema_json already set" if !@schema_json.nil?
25
+ client = SchemaRegistry::Client.new(
26
+ @schema_url,
27
+ '',
28
+ '',
29
+ SchemaRegistry::Client.connection_options(
30
+ client_certificate: '/etc/td-agent/ssl/avro_client.crt',
31
+ client_key: '/etc/td-agent/ssl/avro_client.key',
32
+ ca_certificate: "/etc/td-agent/ssl/avro_ca.pem",
33
+ verify_mode: :verify_peer
34
+ )
35
+ )
36
+ subject = client.subject(@schema_subject)
37
+ schema = subject.version(@schema_version)
38
+ @schema_json = schema.schema
39
+ @schema_id = schema.id
40
+ # puts "id:#{@schema_id} #{@schema_json}"
41
+ # body = Net::HTTP.get(URI.parse(@schema_url))
42
+ # data = JSON.parse(body)
43
+ # @schema_version = data['version']
44
+ # @schema_id = data['id']
45
+ # @schema_json = JSON.parse(data['schema']).to_json
46
+ end
47
+ puts "formatter_avro initializing with schema id #{@schema_id} json: #{@schema_json}"
48
+ @schema = Avro::Schema.parse(@schema_json)
49
+ end
50
+
51
+ def format(tag, time, record)
52
+ # <hack offender="rolabrie@cisco.com" technical_debt>
53
+ # We needed tags to be an array to satisfy the avro schema
54
+ # fluentd 0.12 doesn't support array type for record object attribs
55
+ # so instead of writing a whole new formatter plugin to handle this
56
+ # we're just clobbering it here -- therefore tags must be set
57
+ # which we are doing inside 990_transform.conf
58
+
59
+ record['tags'] = (record['tags'] || '').split(',')
60
+ # </hack>
61
+
62
+ # uncomment this when troubleshooting
63
+ # puts "formatter_avro handling type:#{record['type']} kafka_topic:#{record['kafka_topic']} payload:\n#{record['payload']}"
64
+ magic_byte = 0
65
+ dw = Avro::IO::DatumWriter.new(@schema)
66
+ buffer = StringIO.new
67
+ if @schema_url
68
+ # this only matters if using a schema registry
69
+ buffer.write(magic_byte.chr)
70
+ buffer.write([@schema_id].pack("I>"))
71
+ end
72
+ encoder = Avro::IO::BinaryEncoder.new(buffer)
73
+ eh = record.to_hash
74
+ dw.write(eh, encoder)
75
+ buffer.string
76
+ end
77
+ end
78
+ end
79
+ end
metadata ADDED
@@ -0,0 +1,43 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: fluent-plugin-avro_deluxe
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Robert Labrie
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-10-25 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: Fluentd avro formnatter - Do not use this unsupported module
14
+ email: rolabrie@cisco.com
15
+ executables: []
16
+ extensions: []
17
+ extra_rdoc_files: []
18
+ files:
19
+ - lib/formatter_avro.rb
20
+ homepage:
21
+ licenses: []
22
+ metadata: {}
23
+ post_install_message:
24
+ rdoc_options: []
25
+ require_paths:
26
+ - lib
27
+ required_ruby_version: !ruby/object:Gem::Requirement
28
+ requirements:
29
+ - - ">="
30
+ - !ruby/object:Gem::Version
31
+ version: '0'
32
+ required_rubygems_version: !ruby/object:Gem::Requirement
33
+ requirements:
34
+ - - ">="
35
+ - !ruby/object:Gem::Version
36
+ version: '0'
37
+ requirements: []
38
+ rubyforge_project:
39
+ rubygems_version: 2.5.1
40
+ signing_key:
41
+ specification_version: 3
42
+ summary: Do not use this unsupported module
43
+ test_files: []