logstash-output-google_bigquery 2.0.3 → 2.0.6

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: 872d8260b8414aac2be0a457bd42ce98392373bc
4
- data.tar.gz: 6bca379ed332084d90d358c54b50bca7b1939419
3
+ metadata.gz: 34a141fe1a35f5b762787fc94ba8e33b80af5fee
4
+ data.tar.gz: 22c6ada4627fd4c6d8f6c02f2e1830e823caf6f9
5
5
  SHA512:
6
- metadata.gz: 175bea2712feac1c5eede53a9f70e29f46abcbb176ff137d39af8cfcaa6037ae89b7157848dc261e8ba18a2bca514488f61f76b1c9dae4a6a04145f1dee92000
7
- data.tar.gz: 20bf02602e61780f7446a4cfca7f1098555c9fac39a13284d7b62f279c9971b2fa225971b2366b036ad444a4cc5488479d04f960b935a52b87c3b172c02c9b66
6
+ metadata.gz: 2c53eb5b412d72b15a3d0195f03a1e5f27d99ff12a2004fe472f33f1c0ea3fd3996e3507e1b04eefe200d2c5d55a2048363ae69a936b19290784aba51527e033
7
+ data.tar.gz: ae98407e1aa2807796f374b6b0ec50ba073570ad35367085a5984242fefe0aad40745adaab803ac5bd1ef3fa4a5b33b4ef2df07c2f92fc1d6761fea7ff503ab0
data/CHANGELOG.md CHANGED
@@ -1,3 +1,10 @@
1
+ # 2.0.6
2
+ - Pin version of gems whose latest releases only work with ruby 2.x
3
+
4
+ # 2.0.5
5
+ - Depend on logstash-core-plugin-api instead of logstash-core, removing the need to mass update plugins on major releases of logstash
6
+ # 2.0.4
7
+ - New dependency requirements for logstash-core for the 5.0 release
1
8
  ## 2.0.3
2
9
  - Add support for specifying schema as a hash
3
10
  - Bubble up error message that BQ returns on an error
data/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2012–2015 Elasticsearch <http://www.elastic.co>
1
+ Copyright (c) 2012–2016 Elasticsearch <http://www.elastic.co>
2
2
 
3
3
  Licensed under the Apache License, Version 2.0 (the "License");
4
4
  you may not use this file except in compliance with the License.
data/README.md CHANGED
@@ -1,7 +1,6 @@
1
1
  # Logstash Plugin
2
2
 
3
- [![Build
4
- Status](http://build-eu-00.elastic.co/view/LS%20Plugins/view/LS%20Outputs/job/logstash-plugin-output-google_bigquery-unit/badge/icon)](http://build-eu-00.elastic.co/view/LS%20Plugins/view/LS%20Outputs/job/logstash-plugin-output-google_bigquery-unit/)
3
+ [![Travis Build Status](https://travis-ci.org/logstash-plugins/logstash-output-google_bigquery.svg)](https://travis-ci.org/logstash-plugins/logstash-output-google_bigquery)
5
4
 
6
5
  This is a plugin for [Logstash](https://github.com/elastic/logstash).
7
6
 
@@ -56,7 +55,12 @@ gem "logstash-filter-awesome", :path => "/your/local/logstash-filter-awesome"
56
55
  ```
57
56
  - Install plugin
58
57
  ```sh
58
+ # Logstash 2.3 and higher
59
+ bin/logstash-plugin install --no-verify
60
+
61
+ # Prior to Logstash 2.3
59
62
  bin/plugin install --no-verify
63
+
60
64
  ```
61
65
  - Run Logstash with your plugin
62
66
  ```sh
@@ -74,7 +78,12 @@ gem build logstash-filter-awesome.gemspec
74
78
  ```
75
79
  - Install the plugin from the Logstash home
76
80
  ```sh
77
- bin/plugin install /your/local/plugin/logstash-filter-awesome.gem
81
+ # Logstash 2.3 and higher
82
+ bin/logstash-plugin install --no-verify
83
+
84
+ # Prior to Logstash 2.3
85
+ bin/plugin install --no-verify
86
+
78
87
  ```
79
88
  - Start Logstash and proceed to test the plugin
80
89
 
@@ -96,9 +96,13 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
96
96
  config :dataset, :validate => :string, :required => true
97
97
 
98
98
  # BigQuery table ID prefix to be used when creating new tables for log data.
99
- # Table name will be <table_prefix>_<date>
99
+ # Table name will be <table_prefix><table_separator><date>
100
100
  config :table_prefix, :validate => :string, :default => "logstash"
101
101
 
102
+ # BigQuery table separator to be added between the table_prefix and the
103
+ # date suffix.
104
+ config :table_separator, :validate => :string, :default => "_"
105
+
102
106
  # Schema for log data. It must follow this format:
103
107
  # <field1-name>:<field1-type>,<field2-name>:<field2-type>,...
104
108
  # Example: path:STRING,status:INTEGER,score:FLOAT
@@ -292,12 +296,20 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
292
296
  def initialize_deleter
293
297
  @uploader = Thread.new do
294
298
  @logger.debug("BQ: starting deleter")
299
+ Dir.glob(get_undated_path() + "*.bqjob").each do |fn|
300
+ job_id = File.open(fn, 'r') { |f| f.read }
301
+ filename = @temp_directory + File::SEPARATOR + File.basename(fn, ".bqjob")
302
+ @logger.debug("BQ: resuming job.",
303
+ :job_id => job_id,
304
+ :filename => filename)
305
+ @delete_queue << { "filename" => filename, "job_id" => job_id }
306
+ end
295
307
  while true
296
308
  delete_item = @delete_queue.pop
297
309
  job_id = delete_item["job_id"]
298
310
  filename = delete_item["filename"]
299
311
  job_status = get_job_status(job_id)
300
- case job_status["state"]
312
+ case job_status["status"]["state"]
301
313
  when "DONE"
302
314
  if job_status.has_key?("errorResult")
303
315
  @logger.error("BQ: job failed, please enable debug and check full "\
@@ -311,7 +323,8 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
311
323
  :job_id => job_id,
312
324
  :filename => filename,
313
325
  :job_status => job_status)
314
- File.delete(filename)
326
+ File.delete(filename) if File.exist?(filename)
327
+ File.delete(filename + ".bqjob") if File.exist?(filename + ".bqjob")
315
328
  end
316
329
  when "PENDING", "RUNNING"
317
330
  @logger.debug("BQ: job is not done, NOT deleting local file yet.",
@@ -320,12 +333,13 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
320
333
  :job_status => job_status)
321
334
  @delete_queue << delete_item
322
335
  else
323
- @logger.error("BQ: unknown job status, please enable debug and "\
324
- "check full response (probably the issue is an "\
325
- "incompatible schema). NOT deleting local file yet.",
336
+ @logger.error("BQ: unknown job status, NOT deleting local file yet.",
326
337
  :job_id => job_id,
327
338
  :filename => filename,
328
339
  :job_status => job_status)
340
+ File.open(filename + ".err", 'w') do |file|
341
+ file.write(LogStash::Json.dump(job_status))
342
+ end
329
343
  end
330
344
 
331
345
  sleep @deleter_interval_secs
@@ -367,6 +381,7 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
367
381
  if File.size(filename) > 0
368
382
  job_id = upload_object(filename)
369
383
  @delete_queue << { "filename" => filename, "job_id" => job_id }
384
+ File.open(filename + ".bqjob", 'w') { |file| file.write(job_id) }
370
385
  else
371
386
  @logger.debug("BQ: skipping empty file.")
372
387
  @logger.debug("BQ: delete local temporary file ",
@@ -490,6 +505,12 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
490
505
  @client.authorization = service_account.authorize
491
506
  end
492
507
 
508
+ def raise_if_error(response)
509
+ if response.has_key?("error")
510
+ raise response["error"]["message"]
511
+ end
512
+ end
513
+
493
514
  ##
494
515
  # Uploads a local file to the configured bucket.
495
516
  def get_job_status(job_id)
@@ -505,13 +526,10 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
505
526
  @logger.debug("BQ: successfully invoked API.",
506
527
  :response => response)
507
528
 
508
- if response.has_key?("error")
509
- raise response["error"]
510
- end
529
+ raise_if_error(response)
511
530
 
512
531
  # Successful invocation
513
- contents = response["status"]
514
- return contents
532
+ return response
515
533
  rescue => e
516
534
  @logger.error("BQ: failed to check status", :exception => e)
517
535
  # TODO(rdc): limit retries?
@@ -524,7 +542,7 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
524
542
  # Uploads a local file to the configured bucket.
525
543
  def upload_object(filename)
526
544
  begin
527
- table_id = @table_prefix + "_" + get_date_pattern(filename)
545
+ table_id = @table_prefix + @table_separator + get_date_pattern(filename)
528
546
  # BQ does not accept anything other than alphanumeric and _
529
547
  # Ref: https://developers.google.com/bigquery/browser-tool-quickstart?hl=en
530
548
  table_id.tr!(':-','_')
@@ -557,7 +575,12 @@ class LogStash::Outputs::GoogleBigQuery < LogStash::Outputs::Base
557
575
  },
558
576
  :media => media)
559
577
 
560
- job_id = LogStash::Json.load(insert_result.response.body)["jobReference"]["jobId"]
578
+ media.close()
579
+ response_body = LogStash::Json.load(insert_result.response.body)
580
+
581
+ raise_if_error(response_body)
582
+
583
+ job_id = response_body["jobReference"]["jobId"]
561
584
  @logger.debug("BQ: multipart insert",
562
585
  :job_id => job_id)
563
586
  return job_id
@@ -1,10 +1,10 @@
1
1
  Gem::Specification.new do |s|
2
2
 
3
3
  s.name = 'logstash-output-google_bigquery'
4
- s.version = '2.0.3'
4
+ s.version = '2.0.6'
5
5
  s.licenses = ['Apache License (2.0)']
6
6
  s.summary = "Plugin to upload log events to Google BigQuery (BQ)"
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"
7
+ s.description = "This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program"
8
8
  s.authors = ["Elastic"]
9
9
  s.email = 'info@elastic.co'
10
10
  s.homepage = "http://www.elastic.co/guide/en/logstash/current/index.html"
@@ -20,8 +20,8 @@ Gem::Specification.new do |s|
20
20
  s.metadata = { "logstash_plugin" => "true", "logstash_group" => "output" }
21
21
 
22
22
  # Gem dependencies
23
- s.add_runtime_dependency "logstash-core", ">= 2.0.0.beta2", "< 3.0.0"
24
- s.add_runtime_dependency 'google-api-client'
23
+ s.add_runtime_dependency "logstash-core-plugin-api", "~> 1.0"
24
+ s.add_runtime_dependency 'google-api-client', "~> 0.8.7" # version 0.9.x needs ruby 2.x
25
25
 
26
26
  s.add_development_dependency 'logstash-devutils'
27
27
  end
metadata CHANGED
@@ -1,53 +1,47 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: logstash-output-google_bigquery
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.3
4
+ version: 2.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Elastic
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-01-04 00:00:00.000000000 Z
11
+ date: 2016-09-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - '>='
16
+ - - "~>"
17
17
  - !ruby/object:Gem::Version
18
- version: 2.0.0.beta2
19
- - - <
20
- - !ruby/object:Gem::Version
21
- version: 3.0.0
22
- name: logstash-core
18
+ version: '1.0'
19
+ name: logstash-core-plugin-api
23
20
  prerelease: false
24
21
  type: :runtime
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - '>='
28
- - !ruby/object:Gem::Version
29
- version: 2.0.0.beta2
30
- - - <
24
+ - - "~>"
31
25
  - !ruby/object:Gem::Version
32
- version: 3.0.0
26
+ version: '1.0'
33
27
  - !ruby/object:Gem::Dependency
34
28
  requirement: !ruby/object:Gem::Requirement
35
29
  requirements:
36
- - - '>='
30
+ - - "~>"
37
31
  - !ruby/object:Gem::Version
38
- version: '0'
32
+ version: 0.8.7
39
33
  name: google-api-client
40
34
  prerelease: false
41
35
  type: :runtime
42
36
  version_requirements: !ruby/object:Gem::Requirement
43
37
  requirements:
44
- - - '>='
38
+ - - "~>"
45
39
  - !ruby/object:Gem::Version
46
- version: '0'
40
+ version: 0.8.7
47
41
  - !ruby/object:Gem::Dependency
48
42
  requirement: !ruby/object:Gem::Requirement
49
43
  requirements:
50
- - - '>='
44
+ - - ">="
51
45
  - !ruby/object:Gem::Version
52
46
  version: '0'
53
47
  name: logstash-devutils
@@ -55,10 +49,10 @@ dependencies:
55
49
  type: :development
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
51
  requirements:
58
- - - '>='
52
+ - - ">="
59
53
  - !ruby/object:Gem::Version
60
54
  version: '0'
61
- 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
55
+ description: This gem is a Logstash plugin required to be installed on top of the Logstash core pipeline using $LS_HOME/bin/logstash-plugin install gemname. This gem is not a stand-alone program
62
56
  email: info@elastic.co
63
57
  executables: []
64
58
  extensions: []
@@ -85,17 +79,17 @@ require_paths:
85
79
  - lib
86
80
  required_ruby_version: !ruby/object:Gem::Requirement
87
81
  requirements:
88
- - - '>='
82
+ - - ">="
89
83
  - !ruby/object:Gem::Version
90
84
  version: '0'
91
85
  required_rubygems_version: !ruby/object:Gem::Requirement
92
86
  requirements:
93
- - - '>='
87
+ - - ">="
94
88
  - !ruby/object:Gem::Version
95
89
  version: '0'
96
90
  requirements: []
97
91
  rubyforge_project:
98
- rubygems_version: 2.4.5
92
+ rubygems_version: 2.4.8
99
93
  signing_key:
100
94
  specification_version: 4
101
95
  summary: Plugin to upload log events to Google BigQuery (BQ)