codeclimate-kafka 0.0.2 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 60a376171edc1e992b10b08d773cc48e3ea88149
4
- data.tar.gz: c22754e9df2eb3de27a43fc8ad7f2e9cef5f88c4
3
+ metadata.gz: dd36735cbf74eaa7090b513cbfb2936a39c19a40
4
+ data.tar.gz: e2c34ca572d9f68716a395658f7c32b9c228ea7a
5
5
  SHA512:
6
- metadata.gz: 90dd796b1c45ccf2e84c90cbaebfa00a0445420f821f2997f36879c8e5c4903497a6b82120ee58b0e29a31ea65690e183fb30ea97fb6aa124040078865a71c25
7
- data.tar.gz: 02f9ef5f677afa75ab78c48050a78c987f9e4b016923e3931fc3be318298b1c9cd31d135a50643a2bf890f7533953466ea6c06f78690c8fa7920b05928db41db
6
+ metadata.gz: 4c44c82fb498a857e87d02bf5c02cef37836f39ce2727d7091cc07faa1247c3b3eec93a0e3c85fb2efd4e75f9638cc35629f4a71ad594d343f44bea9d9b103fe
7
+ data.tar.gz: 69534b7d9f0604835e1e3169a0b2ff038e5e8d6aef21737558ae74fd4a29d0e07eb78acbeb3ad404735114820df2e1ec37c41d28243140e472c912b25603a96e
@@ -4,28 +4,69 @@ require "poseidon"
4
4
  module CC
5
5
  module Kafka
6
6
  class Producer
7
- def initialize(client_id, url)
8
- @client_id = client_id
7
+ SCHEMES = [
8
+ HTTP = "http",
9
+ KAFKA = "kafka",
10
+ ]
11
+
12
+ HTTPError = Class.new(StandardError)
13
+ HTTP_TIMEOUT= 60 # seconds
14
+
15
+ def initialize(url, client_id = nil)
9
16
  @url = url
17
+ @client_id = client_id
10
18
  end
11
19
 
12
20
  def send_message(data, key = nil)
13
21
  serialized = BSON.serialize(data).to_s
14
- message = Poseidon::MessageToSend.new(topic, serialized, key)
15
-
16
- producer.send_messages([message])
17
- rescue
18
- close
19
22
 
20
- raise
23
+ if http?
24
+ send_http(serialized, key)
25
+ else
26
+ send_poseidon(serialized, key)
27
+ end
21
28
  end
22
29
 
23
30
  def close
24
- producer.close
31
+ unless http?
32
+ producer.close
33
+ end
25
34
  end
26
35
 
27
36
  private
28
37
 
38
+ def http?
39
+ uri.scheme == HTTP
40
+ end
41
+
42
+ def send_http(serialized, key)
43
+ data = {
44
+ "topic" => topic,
45
+ "message" => serialized,
46
+ }
47
+ data["key"] = key if key
48
+
49
+ http = Net::HTTP.new(uri.host, uri.port)
50
+ http.open_timeout = HTTP_TIMEOUT
51
+ http.read_timeout = HTTP_TIMEOUT
52
+ request = Net::HTTP::Post.new("/message")
53
+ request.set_form_data(data)
54
+
55
+ response = http.request(request)
56
+
57
+ unless response.is_a?(Net::HTTPSuccess)
58
+ raise HTTPError, "request not successful: #{response.inspect}"
59
+ end
60
+ end
61
+
62
+ def send_poseidon(serialized, key)
63
+ message = Poseidon::MessageToSend.new(topic, serialized, key)
64
+ producer.send_messages([message])
65
+ rescue
66
+ producer.close
67
+ raise
68
+ end
69
+
29
70
  def producer
30
71
  @producer ||= Poseidon::Producer.new(
31
72
  broker,
@@ -1,5 +1,5 @@
1
1
  module CC
2
2
  module Kafka
3
- VERSION = "0.0.2"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: codeclimate-kafka
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code Climate
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-06-29 00:00:00.000000000 Z
11
+ date: 2015-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bson