codeclimate-kafka 0.0.2 → 0.1.0

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: 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