logstash-output-treasure_data 0.9.2 → 1.0.0.pre1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3712df2d7d14d7849433f8e6411093df9d694c64
4
- data.tar.gz: 1c886ecf4d3b728f2bb4248c124fe42ed474de3f
3
+ metadata.gz: 1c3ff3748f4a47764ad43b4dca3f864f1b50f93b
4
+ data.tar.gz: 6bd09e966b142576773092f4d301598c5da15404
5
5
  SHA512:
6
- metadata.gz: 082c619cec077b8426b4aabfabab2802e2f12001b0b3ca1773704209cd1dbabf98610b821847d1731697d526520080e7449b6668932be3d4489a83a18548bc20
7
- data.tar.gz: da8a0361e01b1badd4feacfd5a78ed1b81c271181a4b3981572aaa828333bbfe4614d8c61914fb2e700f3398b4f9183eb02a5e9f2f74b746b35375a0e8b41921
6
+ metadata.gz: 82344fc02835f4a311dc33b39b7a837d3e0add9c3f1a8ad2e826013c44ff6274e6427f89b4901aeaa3df2d1ff8bd694ae186602a642d48b491a3293ba40f94e7
7
+ data.tar.gz: c13901a2a622a6d9cd8908f1113a03f8ef0210c4b73679f8106c6a9d7b4a3289d0b370f79755bcbe617c1e1967489fbd3413da21c94cd60737a975760f2a4193
@@ -6,27 +6,18 @@ require "stud/buffer"
6
6
 
7
7
  require "td-client"
8
8
  require "msgpack"
9
- require "uuid"
10
9
 
10
+ require "securerandom"
11
11
  require "stringio"
12
12
  require "zlib"
13
13
 
14
14
  # Logstash output plugin to send data to Treasure Data service.
15
15
 
16
- class LogStash::Event
17
- def to_msgpack(packer=nil)
18
- # LogStash objects (ex: LogStash::Timestamp) are impossible to serialize by msgpack
19
- begin
20
- @data.reject{|a,b| a == TIMESTAMP }.to_msgpack
21
- rescue ArgumentError, NoMethodError
22
- LogStash::Json.load(LogStash::Json.dump(@data)).to_msgpack
23
- end
24
- end
25
- end
26
-
27
16
  class LogStash::Outputs::TreasureData < LogStash::Outputs::Base
28
17
  include Stud::Buffer
29
18
 
19
+ concurrency :shared if self.respond_to?(:concurrency)
20
+
30
21
  config_name "treasure_data"
31
22
 
32
23
  IMPORT_SIZE_LIMIT = 32 * 1024 * 1024
@@ -58,12 +49,11 @@ class LogStash::Outputs::TreasureData < LogStash::Outputs::Base
58
49
  def register
59
50
  @empty_gz_data = TreasureData::API.create_empty_gz_data
60
51
  @user_agent = "logstash-output-treasure_data: #{VERSION}".freeze
61
- @uuid = UUID.new
62
52
 
63
53
  TreasureData::API.validate_database_name(@database)
64
54
  TreasureData::API.validate_table_name(@table)
65
55
 
66
- client_opts = {
56
+ @client_opts = {
67
57
  ssl: @use_ssl,
68
58
  http_proxy: @http_proxy,
69
59
  user_agent: @user_agent,
@@ -72,7 +62,6 @@ class LogStash::Outputs::TreasureData < LogStash::Outputs::Base
72
62
  read_timeout: @read_timeout,
73
63
  send_timeout: @send_timeout
74
64
  }
75
- @client = TreasureData::Client.new(@apikey.value, client_opts)
76
65
 
77
66
  buffer_initialize(
78
67
  max_items: @flush_size,
@@ -83,15 +72,16 @@ class LogStash::Outputs::TreasureData < LogStash::Outputs::Base
83
72
 
84
73
  public
85
74
  def receive(event)
75
+ # Logstash::Output::Base#multi_receive(events) calls this method by `events.each{|event| receive(event) }`
86
76
  record = event.clone
87
77
  @logger.debug "receive a event"
88
78
 
89
- record['time'] ||= (record.timestamp.to_i || Time.now.to_i)
79
+ record.set('time', record.timestamp.to_i || Time.now.to_i) unless record.get('time')
90
80
  if record.to_hash.size > RECORD_KEYS_LIMIT
91
81
  raise "Too many number of keys (#{record.keys.size} keys)"
92
82
  end
93
83
 
94
- row = record.to_msgpack
84
+ row = convert_to_msgpack(record)
95
85
  if row.bytesize > RECORD_SIZE_LIMIT
96
86
  raise "Too large record (#{row.bytesize} bytes with keys:#{record.keys.join(',')})"
97
87
  end
@@ -100,12 +90,18 @@ class LogStash::Outputs::TreasureData < LogStash::Outputs::Base
100
90
  @logger.debug "buffered a event"
101
91
  end
102
92
 
93
+ def convert_to_msgpack(record)
94
+ record.to_hash.to_msgpack
95
+ rescue ArgumentError, NoMethodError
96
+ LogStash::Json.load(LogStash::Json.dump(record.to_hash)).to_msgpack
97
+ end
98
+
103
99
  public
104
100
  def flush(events, teardown = false)
105
101
  @logger.debug "flushing #{events} events (may include chunk uuid)"
106
102
  return if events.size < 1
107
103
  if UUID_FORMAT !~ events.first
108
- new_uuid = @uuid.generate
104
+ new_uuid = SecureRandom.uuid
109
105
  @logger.debug "adding chunk uuid #{new_uuid}"
110
106
  events.unshift new_uuid
111
107
  end
@@ -122,15 +118,16 @@ class LogStash::Outputs::TreasureData < LogStash::Outputs::Base
122
118
  f.finish
123
119
  }
124
120
  data = io.string
121
+ client = TreasureData::Client.new(@apikey.value, @client_opts)
125
122
  @logger.debug "sending gzipped chunk #{uuid}, #{data.bytesize} bytes"
126
123
  begin
127
- @client.import(@database, @table, "msgpack.gz", data, data.bytesize, uuid)
124
+ client.import(@database, @table, "msgpack.gz", data, data.bytesize, uuid)
128
125
 
129
126
  rescue TreasureData::NotFoundError => e
130
127
  raise unless @auto_create_table
131
128
 
132
129
  @logger.info "creating missing table #{@table} on database #{@database} for chunk #{uuid}"
133
- ensure_table_exists(@client, @database, @table)
130
+ ensure_table_exists(client, @database, @table)
134
131
  @logger.info "retrying upload chunk #{uuid}"
135
132
  retry
136
133
  end
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'logstash-output-treasure_data'
3
- s.version = "0.9.2"
3
+ s.version = "1.0.0.pre1"
4
4
  s.licenses = ["Apache License (2.0)"]
5
5
  s.summary = "Logstash plugin to store data into Treasure Data service."
6
6
  s.description = "This gem is a logstash plugin to store data from logstash to Treasure Data service. This gem is not a stand-alone program."
@@ -18,10 +18,9 @@ Gem::Specification.new do |s|
18
18
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
19
19
 
20
20
  # Gem dependencies
21
- s.add_runtime_dependency "logstash-core", ">= 2.0.0", "< 3.0.0"
21
+ s.add_runtime_dependency "logstash-core-plugin-api", ">= 1.60", "<= 2.99"
22
22
  s.add_runtime_dependency "logstash-codec-plain"
23
- s.add_runtime_dependency "msgpack", "~> 0.7.4"
24
- s.add_runtime_dependency "td-client", "~> 0.8.78"
25
- s.add_runtime_dependency "uuid", "~> 2.3"
23
+ s.add_runtime_dependency "msgpack", "~> 1.0"
24
+ s.add_runtime_dependency "td-client", "~> 1.0"
26
25
  s.add_development_dependency "logstash-devutils"
27
26
  end
metadata CHANGED
@@ -1,107 +1,92 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-treasure_data
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.2
4
+ version: 1.0.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Satoshi Tagomori
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-25 00:00:00.000000000 Z
11
+ date: 2017-05-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: logstash-core
15
14
  requirement: !ruby/object:Gem::Requirement
16
15
  requirements:
17
16
  - - ">="
18
17
  - !ruby/object:Gem::Version
19
- version: 2.0.0
20
- - - "<"
18
+ version: '1.60'
19
+ - - "<="
21
20
  - !ruby/object:Gem::Version
22
- version: 3.0.0
23
- type: :runtime
21
+ version: '2.99'
22
+ name: logstash-core-plugin-api
24
23
  prerelease: false
24
+ type: :runtime
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - ">="
28
28
  - !ruby/object:Gem::Version
29
- version: 2.0.0
30
- - - "<"
29
+ version: '1.60'
30
+ - - "<="
31
31
  - !ruby/object:Gem::Version
32
- version: 3.0.0
32
+ version: '2.99'
33
33
  - !ruby/object:Gem::Dependency
34
- name: logstash-codec-plain
35
34
  requirement: !ruby/object:Gem::Requirement
36
35
  requirements:
37
36
  - - ">="
38
37
  - !ruby/object:Gem::Version
39
38
  version: '0'
40
- type: :runtime
39
+ name: logstash-codec-plain
41
40
  prerelease: false
41
+ type: :runtime
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - ">="
45
45
  - !ruby/object:Gem::Version
46
46
  version: '0'
47
47
  - !ruby/object:Gem::Dependency
48
- name: msgpack
49
48
  requirement: !ruby/object:Gem::Requirement
50
49
  requirements:
51
50
  - - "~>"
52
51
  - !ruby/object:Gem::Version
53
- version: 0.7.4
54
- type: :runtime
52
+ version: '1.0'
53
+ name: msgpack
55
54
  prerelease: false
56
- version_requirements: !ruby/object:Gem::Requirement
57
- requirements:
58
- - - "~>"
59
- - !ruby/object:Gem::Version
60
- version: 0.7.4
61
- - !ruby/object:Gem::Dependency
62
- name: td-client
63
- requirement: !ruby/object:Gem::Requirement
64
- requirements:
65
- - - "~>"
66
- - !ruby/object:Gem::Version
67
- version: 0.8.78
68
55
  type: :runtime
69
- prerelease: false
70
56
  version_requirements: !ruby/object:Gem::Requirement
71
57
  requirements:
72
58
  - - "~>"
73
59
  - !ruby/object:Gem::Version
74
- version: 0.8.78
60
+ version: '1.0'
75
61
  - !ruby/object:Gem::Dependency
76
- name: uuid
77
62
  requirement: !ruby/object:Gem::Requirement
78
63
  requirements:
79
64
  - - "~>"
80
65
  - !ruby/object:Gem::Version
81
- version: '2.3'
82
- type: :runtime
66
+ version: '1.0'
67
+ name: td-client
83
68
  prerelease: false
69
+ type: :runtime
84
70
  version_requirements: !ruby/object:Gem::Requirement
85
71
  requirements:
86
72
  - - "~>"
87
73
  - !ruby/object:Gem::Version
88
- version: '2.3'
74
+ version: '1.0'
89
75
  - !ruby/object:Gem::Dependency
90
- name: logstash-devutils
91
76
  requirement: !ruby/object:Gem::Requirement
92
77
  requirements:
93
78
  - - ">="
94
79
  - !ruby/object:Gem::Version
95
80
  version: '0'
96
- type: :development
81
+ name: logstash-devutils
97
82
  prerelease: false
83
+ type: :development
98
84
  version_requirements: !ruby/object:Gem::Requirement
99
85
  requirements:
100
86
  - - ">="
101
87
  - !ruby/object:Gem::Version
102
88
  version: '0'
103
- description: This gem is a logstash plugin to store data from logstash to Treasure
104
- Data service. This gem is not a stand-alone program.
89
+ description: This gem is a logstash plugin to store data from logstash to Treasure Data service. This gem is not a stand-alone program.
105
90
  email: tagomoris@gmail.com
106
91
  executables: []
107
92
  extensions: []
@@ -123,7 +108,7 @@ licenses:
123
108
  metadata:
124
109
  logstash_plugin: 'true'
125
110
  logstash_group: output
126
- post_install_message:
111
+ post_install_message:
127
112
  rdoc_options: []
128
113
  require_paths:
129
114
  - lib
@@ -134,15 +119,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
134
119
  version: '0'
135
120
  required_rubygems_version: !ruby/object:Gem::Requirement
136
121
  requirements:
137
- - - ">="
122
+ - - ">"
138
123
  - !ruby/object:Gem::Version
139
- version: '0'
124
+ version: 1.3.1
140
125
  requirements: []
141
- rubyforge_project:
142
- rubygems_version: 2.5.1
143
- signing_key:
126
+ rubyforge_project:
127
+ rubygems_version: 2.4.8
128
+ signing_key:
144
129
  specification_version: 4
145
130
  summary: Logstash plugin to store data into Treasure Data service.
146
131
  test_files:
147
132
  - spec/outputs/treasure_data_spec.rb
148
- has_rdoc: