fluent-plugin-honeycomb 0.4.0 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 3bbbf988b86bf83fcd88f058397137d50d10f2db
4
- data.tar.gz: cb223aaa156f2860648b464f98dc539ffdb873ea
3
+ metadata.gz: 90ab38aaf106e01ace1f186cf8622601bf94e0ca
4
+ data.tar.gz: 0f976da371561c9aac100a83c53c304435f8318d
5
5
  SHA512:
6
- metadata.gz: cfca8e30d8350af3587f054190d46c971885a55307af165476b6cb36ba0138fe80e654419d3ec273debd564db4d1662ac9619ccc9341f4337b55e79717a4a8ec
7
- data.tar.gz: 14610fbbc0f9b77f5b026a099d07b75ec8048cf26fa59017f7d5f21c53a2d32871098841e9ab30fafe0b5c6d2f8deedff5b27f55643071913f8394132c84510e
6
+ metadata.gz: 52b63188d32f34689f2a7de629b134c498d432bdda2a112c0eaba972d37889c3e165e4f25abcbc5ba0b074a1f39a9d70f185a5712b20c47695c7f5d08350cbc0
7
+ data.tar.gz: 7f69ca94ab060668c786697bf5da4a989061e13b6e3dec0bedcf031af0041bfc7845069a8b2864c2a8d6a1b5ef683f3f1fc984d45679fb2260c3f0eac146fcf9
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  [![Build Status](https://travis-ci.org/honeycombio/fluent-plugin-honeycomb.svg?branch=master)](https://travis-ci.org/honeycombio/fluent-plugin-honeycomb)
2
2
 
3
- Send your logs to [Honeycomb](https://honeycomb.io).
3
+ Send your logs to [Honeycomb](https://honeycomb.io). (For more information about using Honeycomb, see [our docs](https://honeycomb.io/docs/).)
4
4
 
5
5
  ## Getting started
6
6
 
@@ -58,5 +58,5 @@ Travis will automatically upload tagged releases to Rubygems. To release a new
58
58
  version, run
59
59
  ```
60
60
  bump patch --tag # Or bump minor --tag, etc.
61
- git push --tags
61
+ git push --follow-tags
62
62
  ```
@@ -1,7 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = 'fluent-plugin-honeycomb'
3
- spec.version = '0.4.0'
4
- spec.date = '2017-02-07'
3
+ spec.version = '0.4.1'
5
4
 
6
5
  spec.summary = "Fluentd output plugin for Honeycomb.io"
7
6
  spec.description = "Fluentd output plugin for Honeycomb.io"
@@ -22,10 +22,13 @@ module Fluent
22
22
  # 'conf' is a Hash that includes configuration parameters.
23
23
  # If the configuration is invalid, raise Fluent::ConfigError.
24
24
  def configure(conf)
25
+ # Apply sane defaults. These override the poor fluentd defaults, but not
26
+ # anything explicitly specified in the configuration.
27
+ conf["buffer_chunk_limit"] ||= "500k"
28
+ conf["flush_interval"] ||= "1s"
29
+ conf["max_retry_wait"] ||= "30s"
30
+ conf["retry_limit"] ||= 17
25
31
  super
26
-
27
- # You can also refer raw parameter via conf[name].
28
- @path = conf['path']
29
32
  end
30
33
 
31
34
  # This method is called when starting.
@@ -76,59 +79,69 @@ module Fluent
76
79
  })
77
80
  end
78
81
 
82
+ publish_batch(batch, 0)
83
+ end
84
+
85
+ def publish_batch(batch, retry_count)
79
86
  if batch.length == 0
80
87
  return
81
88
  end
82
89
  log.info "publishing #{batch.length} records"
83
- body = JSON.dump({ @dataset => batch })
90
+ body = JSON.dump(batch)
84
91
  resp = HTTP.headers(
85
92
  "User-Agent" => "fluent-plugin-honeycomb",
86
93
  "Content-Type" => "application/json",
87
94
  "X-Honeycomb-Team" => @writekey)
88
- .post(URI.join(@api_host, "/1/batch"), {
95
+ .post(URI.join(@api_host, "/1/batch/#{@dataset}"), {
89
96
  :body => body,
90
97
  })
91
- parse_response(resp)
98
+ failures = parse_response(batch, resp)
99
+ if failures.size > 0 && retry_count < @retry_limit
100
+ # sleep and retry with the set of failed events
101
+ sleep 1
102
+ publish_batch(failures, retry_count + 1)
103
+ end
92
104
  end
93
105
 
94
- def parse_response(resp)
106
+ def parse_response(batch, resp)
95
107
  if resp.status != 200
96
108
  # Force retry
97
109
  log.error "Error sending batch: #{resp.status}, #{resp.body}"
98
110
  raise Exception.new("Error sending batch: #{resp.status}, #{resp.body}")
99
- else
100
- begin
101
- results = JSON.parse(resp.body)
102
- rescue JSON::ParserError => e
103
- log.warn "Error parsing response as JSON: #{e}"
104
- return
105
- end
106
- successes = 0
107
- failures = []
108
- results.each do |key, statuses|
109
- if !statuses.is_a? Array
110
- next
111
- end
111
+ end
112
112
 
113
- statuses.each do |s|
114
- if !s.is_a? Hash
115
- next
116
- end
113
+ begin
114
+ results = JSON.parse(resp.body)
115
+ rescue JSON::ParserError => e
116
+ log.warn "Error parsing response as JSON: #{e}"
117
+ raise e
118
+ end
119
+ successes = 0
120
+ failures = []
121
+ if !results.is_a? Array
122
+ log.warning "Unexpected response format: #{results}"
123
+ raise Exception.new("Unexpected response format: #{resp.status}")
124
+ end
117
125
 
118
- if s["status"] == 202
119
- successes += 1
120
- else
121
- failures[r["status"]] += 1
122
- end
123
- end
126
+ results.each_with_index do |result, idx|
127
+ if !result.is_a? Hash
128
+ log.warning "Unexpected status format in response: #{result}"
129
+ next
124
130
  end
125
131
 
126
- if failures.size > 0
127
- log.warn "Errors publishing records: #{failures}"
132
+ if result["status"] == 202
133
+ successes += 1
128
134
  else
129
- log.debug "Successfully published #{successes} records"
135
+ failures.push(batch[idx])
130
136
  end
131
137
  end
138
+
139
+ if failures.size > 0
140
+ log.warn "Errors publishing records: #{failures.size} failures out of #{successes + failures.size}"
141
+ else
142
+ log.debug "Successfully published #{successes} records"
143
+ end
144
+ return failures
132
145
  end
133
146
 
134
147
  def flatten(record, prefix)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fluent-plugin-honeycomb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Honeycomb.io Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-02-07 00:00:00.000000000 Z
11
+ date: 2017-05-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: fluentd