graphite-api-middleware 1.0.0 → 1.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 +4 -4
- data/bin/graphite-api-middleware +4 -3
- data/lib/graphite-api-middleware.rb +12 -14
- data/lib/graphite-api-middleware/version.rb +2 -2
- data/test/functional/middleware_sanity_test.rb +30 -7
- metadata +11 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 27b2522dd39bed00f6fcccd339081a4cb19931263002640847e8a9a794b6d73a
|
4
|
+
data.tar.gz: 8e80ffd81a903196341155cdf575d4b36ff9600a8f5f9bae025d2a26473c9a67
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e27478176fcd4d3fed13dc7d082b3a59ca8db502336d8cef778689f1b0b3cb4c1aa18459f5a015c72e22ae99a1b9ccad081a6f594da371778634e259f334e98e
|
7
|
+
data.tar.gz: c975f8590a1e13f8f1c55c6e9f2d6c75966e1c2e80e5378edd44d2fa03aa0aa6ff759bdfc2b24faa7622f75475415b34928f16fd18e52cba29ad0ab450d77960
|
data/bin/graphite-api-middleware
CHANGED
@@ -63,15 +63,16 @@ begin
|
|
63
63
|
options[:cache] = opts["--cache"].to_i * 3600 if opts["--cache"].to_i > 0
|
64
64
|
options[:default_aggregation_method] = opts["--aggregation-method"].to_sym if opts["--aggregation-method"]
|
65
65
|
|
66
|
-
logger = Logger.new options[:log_file] ||
|
66
|
+
logger = Logger.new options[:log_file] || STDOUT
|
67
67
|
logger.level= Logger.const_get options[:log_level].to_s.upcase
|
68
68
|
Process.daemon if options[:daemonize]
|
69
69
|
GraphiteApiMiddleware::Server.start options, logger
|
70
70
|
rescue Docopt::Exit => e
|
71
71
|
puts e.message
|
72
72
|
rescue Interrupt
|
73
|
-
logger.info "Shutting down..."
|
74
|
-
Zscheduler.stop
|
73
|
+
logger.info "Shutting down..." if defined? logger
|
75
74
|
rescue StandardError => e
|
76
75
|
puts (Docopt::Exit.new e.message).message
|
76
|
+
ensure
|
77
|
+
GraphiteApiMiddleware::Server.stop rescue nil
|
77
78
|
end
|
@@ -25,12 +25,12 @@ require 'logger'
|
|
25
25
|
module GraphiteApiMiddleware
|
26
26
|
class Server < EventMachine::Connection
|
27
27
|
|
28
|
-
def initialize
|
29
|
-
@
|
28
|
+
def initialize client, logger
|
29
|
+
@client = client
|
30
30
|
@logger = logger
|
31
31
|
end
|
32
32
|
|
33
|
-
attr_reader :
|
33
|
+
attr_reader :client, :client_id
|
34
34
|
|
35
35
|
def post_init
|
36
36
|
@client_id = peername
|
@@ -39,11 +39,12 @@ module GraphiteApiMiddleware
|
|
39
39
|
|
40
40
|
def receive_data data
|
41
41
|
@logger.debug [:middleware, :message, client_id, data]
|
42
|
-
|
42
|
+
client.stream data, client_id
|
43
43
|
end
|
44
44
|
|
45
45
|
def unbind
|
46
46
|
@logger.debug [:middleware, :disconnecting, client_id]
|
47
|
+
client.cancel
|
47
48
|
end
|
48
49
|
|
49
50
|
def peername
|
@@ -62,21 +63,18 @@ module GraphiteApiMiddleware
|
|
62
63
|
GraphiteAPI::Logger.logger = logger
|
63
64
|
logger.info "Server running on port #{options[:port]}"
|
64
65
|
|
65
|
-
|
66
|
-
group = GraphiteAPI::Connector::Group.new options
|
66
|
+
client = GraphiteAPI::Client.new options
|
67
67
|
|
68
68
|
# Starting server
|
69
|
-
[:start_server, :open_datagram_socket].each do |
|
70
|
-
EventMachine.send(
|
69
|
+
[:start_server, :open_datagram_socket].each do |method_name|
|
70
|
+
EventMachine.send(method_name, '0.0.0.0', options[:port], self, client, logger)
|
71
71
|
end
|
72
|
-
|
73
|
-
# Send metrics to graphite every X seconds
|
74
|
-
Zscheduler.every(options[:interval], :on_shutdown => true) do
|
75
|
-
group.publish buffer.pull :string if buffer.new_records?
|
76
|
-
end
|
77
|
-
|
78
72
|
end
|
79
73
|
end
|
80
74
|
|
75
|
+
def self.stop
|
76
|
+
EventMachine.stop
|
77
|
+
end
|
78
|
+
|
81
79
|
end
|
82
80
|
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
module
|
2
|
-
VERSION = "1.
|
1
|
+
module GraphiteApiMiddleware
|
2
|
+
VERSION = "1.1.0"
|
3
3
|
end
|
@@ -16,8 +16,9 @@ module GraphiteApiMiddleware::Tests
|
|
16
16
|
Utils.stop_em_if_running
|
17
17
|
end
|
18
18
|
|
19
|
-
def start_middleware middleware_port,
|
20
|
-
options =
|
19
|
+
def start_middleware middleware_port, servers, aggregation_method=nil, interval=2
|
20
|
+
options = Array(servers)
|
21
|
+
options += %W(--port #{middleware_port} --interval #{interval} -L error)
|
21
22
|
options += ["--aggregation-method", aggregation_method] if aggregation_method
|
22
23
|
@pid = Process.spawn("ruby", MIDDLEWARE_BIN_FILE, *options)
|
23
24
|
sleep MIDDLEWARE_STARTUP_WAIT
|
@@ -29,7 +30,7 @@ module GraphiteApiMiddleware::Tests
|
|
29
30
|
end
|
30
31
|
|
31
32
|
def test_with_defaults
|
32
|
-
start_middleware @middleware_port, @mock_server_port
|
33
|
+
start_middleware @middleware_port, "tcp://localhost:#{@mock_server_port}"
|
33
34
|
EventMachine.run {
|
34
35
|
EventMachine.start_server("0.0.0.0", @mock_server_port, MockServer, @data)
|
35
36
|
socket = TCPSocket.new("0.0.0.0", @middleware_port)
|
@@ -49,8 +50,30 @@ module GraphiteApiMiddleware::Tests
|
|
49
50
|
assert_expected_equals_data expected
|
50
51
|
end
|
51
52
|
|
53
|
+
def test_with_multiple_backends
|
54
|
+
backend_ports = [@mock_server_port, Utils.random_non_repeating_port]
|
55
|
+
start_middleware @middleware_port, backend_ports.map { |port| "tcp://localhost:#{port}" }
|
56
|
+
data_sets = backend_ports.zip([[],[]])
|
57
|
+
EventMachine.run {
|
58
|
+
data_sets.map { |port, data| EventMachine.start_server("0.0.0.0", port, MockServer, data) }
|
59
|
+
socket = TCPSocket.new("0.0.0.0", @middleware_port)
|
60
|
+
1.upto(1000) do
|
61
|
+
socket.puts("shuki.tuki1 1.1 123456789\n")
|
62
|
+
socket.puts("shuki.tuki2 10 123456789\n")
|
63
|
+
socket.puts("shuki.tuki3 10 123456789\n")
|
64
|
+
end
|
65
|
+
EventMachine::Timer.new(EM_STOP_AFTER, &EM.method(:stop))
|
66
|
+
}
|
67
|
+
expected = [
|
68
|
+
"shuki.tuki1 1100.0 123456780",
|
69
|
+
"shuki.tuki2 10000.0 123456780",
|
70
|
+
"shuki.tuki3 10000.0 123456780"
|
71
|
+
]
|
72
|
+
data_sets.each { |_,data| assert_expected_equals_data expected, data }
|
73
|
+
end
|
74
|
+
|
52
75
|
def test_with_avg
|
53
|
-
start_middleware @middleware_port, @mock_server_port, 'avg'
|
76
|
+
start_middleware @middleware_port, "tcp://localhost:#{@mock_server_port}", 'avg'
|
54
77
|
EventMachine.run {
|
55
78
|
EventMachine.start_server("0.0.0.0", @mock_server_port, MockServer, @data)
|
56
79
|
socket = TCPSocket.new("0.0.0.0", @middleware_port)
|
@@ -65,7 +88,7 @@ module GraphiteApiMiddleware::Tests
|
|
65
88
|
end
|
66
89
|
|
67
90
|
def test_with_replace
|
68
|
-
start_middleware @middleware_port, @mock_server_port, 'replace'
|
91
|
+
start_middleware @middleware_port, "tcp://localhost:#{@mock_server_port}", 'replace'
|
69
92
|
EventMachine.run {
|
70
93
|
EventMachine.start_server("0.0.0.0", @mock_server_port, MockServer, @data)
|
71
94
|
socket = TCPSocket.new("0.0.0.0", @middleware_port)
|
@@ -79,8 +102,8 @@ module GraphiteApiMiddleware::Tests
|
|
79
102
|
assert_expected_equals_data ["shuki.tuki1 5.0 123456780"]
|
80
103
|
end
|
81
104
|
|
82
|
-
def assert_expected_equals_data expected
|
83
|
-
assert_equal expected,
|
105
|
+
def assert_expected_equals_data expected, data=@data
|
106
|
+
assert_equal expected, data.map {|o| o.split("\n")}.flatten(1).map(&:strip)
|
84
107
|
end
|
85
108
|
end
|
86
109
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: graphite-api-middleware
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eran Levi
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2019-03-
|
12
|
+
date: 2019-03-25 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: docopt
|
@@ -40,33 +40,33 @@ dependencies:
|
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: 0.3.3
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
|
-
name:
|
43
|
+
name: timers
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- - "
|
46
|
+
- - "~>"
|
47
47
|
- !ruby/object:Gem::Version
|
48
|
-
version:
|
48
|
+
version: '4.3'
|
49
49
|
type: :runtime
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- - "
|
53
|
+
- - "~>"
|
54
54
|
- !ruby/object:Gem::Version
|
55
|
-
version:
|
55
|
+
version: '4.3'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: graphite-api
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- - "
|
60
|
+
- - "~>"
|
61
61
|
- !ruby/object:Gem::Version
|
62
|
-
version: 1.
|
62
|
+
version: '1.1'
|
63
63
|
type: :runtime
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- - "
|
67
|
+
- - "~>"
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
69
|
+
version: '1.1'
|
70
70
|
- !ruby/object:Gem::Dependency
|
71
71
|
name: rake
|
72
72
|
requirement: !ruby/object:Gem::Requirement
|