loggregator_emitter 2.0.0 → 2.0.3
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.
@@ -1,7 +1,11 @@
|
|
1
1
|
require 'socket'
|
2
|
+
require 'resolv'
|
2
3
|
|
3
4
|
module LoggregatorEmitter
|
4
5
|
class Emitter
|
6
|
+
|
7
|
+
attr_reader :host
|
8
|
+
|
5
9
|
MAX_MESSAGE_BYTE_SIZE = (9 * 1024) - 512
|
6
10
|
TRUNCATED_STRING = "TRUNCATED"
|
7
11
|
|
@@ -16,9 +20,13 @@ module LoggregatorEmitter
|
|
16
20
|
|
17
21
|
def initialize(loggregator_server, source_type_or_name, source_id = nil, secret=nil)
|
18
22
|
@host, @port = loggregator_server.split(/:([^:]*$)/)
|
23
|
+
|
19
24
|
raise ArgumentError, "Must provide valid loggregator server: #{loggregator_server}" if !valid_hostname || !valid_port
|
20
25
|
raise ArgumentError, "Must provide valid source_type_or_name: #{source_type_or_name}" unless source_type_or_name
|
21
26
|
|
27
|
+
@host = ::Resolv.getaddresses(@host).last
|
28
|
+
raise ArgumentError, "Must provide valid loggregator server: #{loggregator_server}" unless @host
|
29
|
+
|
22
30
|
case source_type_or_name
|
23
31
|
when LogMessage::SourceType::CLOUD_CONTROLLER..LogMessage::SourceType::LOGGREGATOR
|
24
32
|
@source_type = source_type_or_name
|
@@ -50,7 +58,7 @@ module LoggregatorEmitter
|
|
50
58
|
end
|
51
59
|
|
52
60
|
def valid_hostname
|
53
|
-
@host && !@host.match(/:\/\//)
|
61
|
+
@host && !@host.empty? && !@host.match(/:\/\//)
|
54
62
|
end
|
55
63
|
|
56
64
|
def split_message(message)
|
data/loggregator_emitter.gemspec
CHANGED
@@ -16,35 +16,20 @@ class MessageFixture
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
class FreePort
|
20
|
-
def self.next_free_port
|
21
|
-
@@next_free_port ||= 12345
|
22
|
-
@@next_free_port += 1
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
19
|
shared_examples "a performance test" do |fixture, using_server|
|
27
|
-
let(:free_port) { FreePort.next_free_port }
|
28
20
|
let(:iterations) { using_server ? 100 : 1000 }
|
29
|
-
subject(:emitter) { LoggregatorEmitter::Emitter.new("localhost:#{free_port}", "API", 42, "my-secret") }
|
30
21
|
|
31
22
|
before do
|
32
|
-
|
33
|
-
|
34
|
-
@
|
35
|
-
else
|
36
|
-
emitter.should_receive(:send_protobuffer).at_least(iterations).times
|
23
|
+
@emitter = LoggregatorEmitter::Emitter.new("localhost:#{@free_port}", "API", 42, "my-secret")
|
24
|
+
if !using_server
|
25
|
+
@emitter.should_receive(:send_protobuffer).at_least(iterations).times
|
37
26
|
end
|
38
27
|
end
|
39
28
|
|
40
|
-
after do
|
41
|
-
@server.stop if using_server
|
42
|
-
end
|
43
|
-
|
44
29
|
it "emits #{fixture.name} within a time threshold #{using_server ? 'with' : 'without'} server" do
|
45
30
|
start_time = Time.now.to_f
|
46
31
|
|
47
|
-
iterations.times { emitter.emit("my_app_id", fixture.message) }
|
32
|
+
iterations.times { @emitter.emit("my_app_id", fixture.message) }
|
48
33
|
|
49
34
|
expect(Time.now.to_f - start_time).to be < fixture.expected(using_server)
|
50
35
|
end
|
@@ -57,6 +42,17 @@ describe LoggregatorEmitter do
|
|
57
42
|
@fixtures << MessageFixture.new("message with newlines", 10.times.collect { (6*1024).times.collect { "a" }.join("") + "\n" }.join(""), 3.0, 3.0)
|
58
43
|
@fixtures << MessageFixture.new("message worst case", (124*1024).times.collect { "a" }.join("") + "\n", 2.0, 2.0)
|
59
44
|
|
45
|
+
before :all do
|
46
|
+
@free_port = 12346
|
47
|
+
@server = FakeLoggregatorServer.new(@free_port)
|
48
|
+
@server.start
|
49
|
+
end
|
50
|
+
|
51
|
+
after :all do
|
52
|
+
@server.stop
|
53
|
+
end
|
54
|
+
|
55
|
+
|
60
56
|
[true, false].each do |using_server|
|
61
57
|
@fixtures.each do |fixture|
|
62
58
|
it_behaves_like "a performance test", fixture, using_server
|
@@ -2,14 +2,19 @@ require "support/fake_loggregator_server"
|
|
2
2
|
require "loggregator_emitter"
|
3
3
|
|
4
4
|
describe LoggregatorEmitter do
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
5
|
+
|
6
|
+
before :all do
|
7
|
+
@free_port = 12345
|
8
|
+
@server = FakeLoggregatorServer.new(@free_port)
|
9
|
+
@server.start
|
10
|
+
end
|
11
|
+
|
12
|
+
after :all do
|
13
|
+
@server.stop
|
10
14
|
end
|
11
|
-
|
12
|
-
|
15
|
+
|
16
|
+
before do
|
17
|
+
@server.reset
|
13
18
|
end
|
14
19
|
|
15
20
|
describe "configuring emitter" do
|
@@ -22,12 +27,8 @@ describe LoggregatorEmitter do
|
|
22
27
|
expect { LoggregatorEmitter::Emitter.new("localhost:12345", LogMessage::SourceType::DEA) }.not_to raise_error
|
23
28
|
end
|
24
29
|
|
25
|
-
it "is valid if a server name is given" do
|
26
|
-
expect { LoggregatorEmitter::Emitter.new("some-unknown-address:12345", LogMessage::SourceType::DEA) }.not_to raise_error
|
27
|
-
end
|
28
|
-
|
29
30
|
it "accepts a string as source type/name" do
|
30
|
-
expect { LoggregatorEmitter::Emitter.new("
|
31
|
+
expect { LoggregatorEmitter::Emitter.new("localhost:12345", "STG") }.not_to raise_error
|
31
32
|
end
|
32
33
|
end
|
33
34
|
|
@@ -37,21 +38,29 @@ describe LoggregatorEmitter do
|
|
37
38
|
expect { LoggregatorEmitter::Emitter.new("http://0.0.0.0:12345", LogMessage::SourceType::DEA) }.to raise_error(ArgumentError)
|
38
39
|
end
|
39
40
|
|
41
|
+
it "raises if host is blank" do
|
42
|
+
expect { LoggregatorEmitter::Emitter.new(":12345", LogMessage::SourceType::DEA) }.to raise_error(ArgumentError)
|
43
|
+
end
|
44
|
+
|
45
|
+
it "raises if host is unresolvable" do
|
46
|
+
expect { LoggregatorEmitter::Emitter.new("i.cant.resolve.foo:12345", LogMessage::SourceType::DEA) }.to raise_error(ArgumentError)
|
47
|
+
end
|
48
|
+
|
40
49
|
it "raises if source is an unknown integer" do
|
41
|
-
expect { LoggregatorEmitter::Emitter.new("
|
50
|
+
expect { LoggregatorEmitter::Emitter.new("localhost:12345", 7) }.to raise_error(ArgumentError)
|
42
51
|
end
|
43
52
|
|
44
53
|
it "raises if source is not an integer or string" do
|
45
|
-
expect { LoggregatorEmitter::Emitter.new("
|
46
|
-
expect { LoggregatorEmitter::Emitter.new("
|
54
|
+
expect { LoggregatorEmitter::Emitter.new("localhost:12345", nil) }.to raise_error(ArgumentError)
|
55
|
+
expect { LoggregatorEmitter::Emitter.new("localhost:12345", 12.0) }.to raise_error(ArgumentError)
|
47
56
|
end
|
48
57
|
|
49
58
|
it "raises if source is too large of a string" do
|
50
|
-
expect { LoggregatorEmitter::Emitter.new("
|
59
|
+
expect { LoggregatorEmitter::Emitter.new("localhost:12345", "ABCD") }.to raise_error(ArgumentError)
|
51
60
|
end
|
52
61
|
|
53
62
|
it "raises if source is too small of a string" do
|
54
|
-
expect { LoggregatorEmitter::Emitter.new("
|
63
|
+
expect { LoggregatorEmitter::Emitter.new("localhost:12345", "AB") }.to raise_error(ArgumentError)
|
55
64
|
end
|
56
65
|
end
|
57
66
|
end
|
@@ -60,16 +69,7 @@ describe LoggregatorEmitter do
|
|
60
69
|
|
61
70
|
describe "emit_log_envelope" do
|
62
71
|
def make_emitter(host)
|
63
|
-
LoggregatorEmitter::Emitter.new("#{host}:#{free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, 42, "secret")
|
64
|
-
end
|
65
|
-
|
66
|
-
before do
|
67
|
-
@server = FakeLoggregatorServer.new(free_port)
|
68
|
-
@server.start
|
69
|
-
end
|
70
|
-
|
71
|
-
after do
|
72
|
-
@server.stop
|
72
|
+
LoggregatorEmitter::Emitter.new("#{host}:#{@free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, 42, "secret")
|
73
73
|
end
|
74
74
|
|
75
75
|
it "successfully writes envelope protobuffers" do
|
@@ -114,20 +114,11 @@ describe LoggregatorEmitter do
|
|
114
114
|
{"emit" => LogMessage::MessageType::OUT, "emit_error" => LogMessage::MessageType::ERR}.each do |emit_method, message_type|
|
115
115
|
describe "##{emit_method}" do
|
116
116
|
def make_emitter(host)
|
117
|
-
LoggregatorEmitter::Emitter.new("#{host}:#{free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, 42)
|
118
|
-
end
|
119
|
-
|
120
|
-
before do
|
121
|
-
@server = FakeLoggregatorServer.new(free_port)
|
122
|
-
@server.start
|
123
|
-
end
|
124
|
-
|
125
|
-
after do
|
126
|
-
@server.stop
|
117
|
+
LoggregatorEmitter::Emitter.new("#{host}:#{@free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, 42)
|
127
118
|
end
|
128
119
|
|
129
120
|
it "successfully writes protobuffers using ipv4" do
|
130
|
-
emitter = make_emitter("
|
121
|
+
emitter = make_emitter("127.0.0.1")
|
131
122
|
emitter.send(emit_method, "my_app_id", "Hello there!")
|
132
123
|
emitter.send(emit_method, "my_app_id", "Hello again!")
|
133
124
|
emitter.send(emit_method, nil, "Hello again!")
|
@@ -208,14 +199,6 @@ describe LoggregatorEmitter do
|
|
208
199
|
end
|
209
200
|
|
210
201
|
describe "source" do
|
211
|
-
before do
|
212
|
-
@server = FakeLoggregatorServer.new(free_port)
|
213
|
-
@server.start
|
214
|
-
end
|
215
|
-
|
216
|
-
after do
|
217
|
-
@server.stop
|
218
|
-
end
|
219
202
|
|
220
203
|
let(:emit_message) do
|
221
204
|
@emitter.emit_error("my_app_id", "Hello there!")
|
@@ -226,28 +209,28 @@ describe LoggregatorEmitter do
|
|
226
209
|
end
|
227
210
|
|
228
211
|
it "when type is known" do
|
229
|
-
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{free_port}", LogMessage::SourceType::CLOUD_CONTROLLER)
|
212
|
+
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{@free_port}", LogMessage::SourceType::CLOUD_CONTROLLER)
|
230
213
|
expect(emit_message.source_name).to eq "CLOUD_CONTROLLER"
|
231
214
|
end
|
232
215
|
|
233
216
|
it "when type is unknown" do
|
234
|
-
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{free_port}", "STG")
|
217
|
+
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{@free_port}", "STG")
|
235
218
|
expect(emit_message.source_name).to eq "STG"
|
236
219
|
expect(emit_message.source_type).to eq LogMessage::SourceType::UNKNOWN
|
237
220
|
end
|
238
221
|
|
239
222
|
it "id can be nil" do
|
240
|
-
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{free_port}", LogMessage::SourceType::CLOUD_CONTROLLER)
|
223
|
+
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{@free_port}", LogMessage::SourceType::CLOUD_CONTROLLER)
|
241
224
|
expect(emit_message.source_id).to eq nil
|
242
225
|
end
|
243
226
|
|
244
227
|
it "id can be passed in as a string" do
|
245
|
-
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, "some_source_id")
|
228
|
+
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{@free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, "some_source_id")
|
246
229
|
expect(emit_message.source_id).to eq "some_source_id"
|
247
230
|
end
|
248
231
|
|
249
232
|
it "id can be passed in as an integer" do
|
250
|
-
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, 13)
|
233
|
+
@emitter = LoggregatorEmitter::Emitter.new("0.0.0.0:#{@free_port}", LogMessage::SourceType::CLOUD_CONTROLLER, 13)
|
251
234
|
expect(emit_message.source_id).to eq "13"
|
252
235
|
end
|
253
236
|
end
|
@@ -6,6 +6,7 @@ class FakeLoggregatorServer
|
|
6
6
|
attr_reader :messages, :port
|
7
7
|
|
8
8
|
def initialize(port)
|
9
|
+
|
9
10
|
@messages = []
|
10
11
|
@port = port
|
11
12
|
|
@@ -15,7 +16,7 @@ class FakeLoggregatorServer
|
|
15
16
|
end
|
16
17
|
|
17
18
|
def start
|
18
|
-
bind_and_record(0, @sockets[0], "
|
19
|
+
bind_and_record(0, @sockets[0], "127.0.0.1")
|
19
20
|
bind_and_record(0, @sockets[1], "::1")
|
20
21
|
end
|
21
22
|
|
@@ -33,10 +34,14 @@ class FakeLoggregatorServer
|
|
33
34
|
@threads.each { |thread| Thread.kill(thread) }
|
34
35
|
end
|
35
36
|
|
37
|
+
def reset
|
38
|
+
@messages = []
|
39
|
+
end
|
40
|
+
|
36
41
|
private
|
37
42
|
|
38
43
|
def bind_and_record(index, socket, server)
|
39
|
-
socket.bind(server, port)
|
44
|
+
socket.bind(server, @port)
|
40
45
|
|
41
46
|
@threads[index] = Thread.new do
|
42
47
|
while true
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: loggregator_emitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.3
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-12-02 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: beefcake
|
@@ -119,9 +119,6 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
119
119
|
- - ! '>='
|
120
120
|
- !ruby/object:Gem::Version
|
121
121
|
version: '0'
|
122
|
-
segments:
|
123
|
-
- 0
|
124
|
-
hash: 584721548114788876
|
125
122
|
requirements: []
|
126
123
|
rubyforge_project:
|
127
124
|
rubygems_version: 1.8.25
|