thrift_server 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (42) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +2 -0
  3. data/Makefile +27 -14
  4. data/README.md +142 -43
  5. data/circle.yml +14 -0
  6. data/echo_client.rb +22 -3
  7. data/echo_server.rb +23 -16
  8. data/echo_service.thrift +11 -0
  9. data/lib/thrift_server.rb +112 -36
  10. data/lib/thrift_server/instrumentation_middleware.rb +33 -0
  11. data/lib/thrift_server/log_subscriber.rb +60 -0
  12. data/lib/thrift_server/publisher.rb +25 -0
  13. data/lib/thrift_server/rpc_metrics_subscriber.rb +25 -0
  14. data/lib/thrift_server/server_metrics_subscriber.rb +32 -0
  15. data/lib/thrift_server/thread_pool_server.rb +115 -0
  16. data/lib/thrift_server/threaded_server.rb +87 -0
  17. data/lib/thrift_server/validation_middleware.rb +14 -0
  18. data/lib/thrift_server/version.rb +2 -2
  19. data/script/circleci/cache-image +10 -0
  20. data/test/log_subscriber_test.rb +86 -0
  21. data/test/processor_test.rb +189 -0
  22. data/test/rpc_metrics_subscriber_test.rb +44 -0
  23. data/test/server_metrics_subscriber_test.rb +51 -0
  24. data/test/support/log_yielder.rb +32 -0
  25. data/test/support/server_tests.rb +87 -0
  26. data/test/test_helper.rb +32 -23
  27. data/test/thread_pool_server_test.rb +101 -0
  28. data/test/threaded_server_test.rb +56 -0
  29. data/test/validation_middleware_test.rb +71 -0
  30. data/thrift_server.gemspec +2 -2
  31. metadata +34 -22
  32. data/lib/thrift_server/error_tracking_middleware.rb +0 -12
  33. data/lib/thrift_server/honeybadger_error_tracker.rb +0 -11
  34. data/lib/thrift_server/logging_middleware.rb +0 -13
  35. data/lib/thrift_server/metrics_middleware.rb +0 -16
  36. data/script/buildbox/ci +0 -5
  37. data/script/buildbox/step_failed +0 -5
  38. data/test/acceptance_test.rb +0 -225
  39. data/test/error_tracking_middleware_test.rb +0 -25
  40. data/test/honeybadger_error_tracking_test.rb +0 -12
  41. data/test/logging_middleware_test.rb +0 -42
  42. data/test/metrics_middleware_test.rb +0 -70
@@ -1,25 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class ErrorTrackingMiddlewareTest < MiniTest::Unit::TestCase
4
- attr_reader :rpc
5
-
6
- def setup
7
- @rpc = ThriftServer::RPC.new :foo, :bar
8
- end
9
-
10
- def test_logs_errors
11
- error = TestError.new
12
-
13
- logger = mock
14
- logger.expects(:track).with(rpc, error)
15
-
16
- app = stub
17
- app.stubs(:call).raises(error)
18
-
19
- middleware = ThriftServer::ErrorTrackingMiddleware.new app, logger
20
-
21
- assert_raises TestError do
22
- middleware.call rpc
23
- end
24
- end
25
- end
@@ -1,12 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class HoneybadgerErrorTrackerTest < MiniTest::Unit::TestCase
4
- def test_logs_according_to_honeybadger_api
5
- client = mock
6
- client.expects(:notify_or_ignore).with(:error)
7
-
8
- tracker = ThriftServer::HoneybadgerErrorTracker.new client
9
-
10
- tracker.track :rpc, :error
11
- end
12
- end
@@ -1,42 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class LoggingMiddlewareTest < MiniTest::Unit::TestCase
4
- attr_reader :output, :logger, :rpc
5
-
6
- def setup
7
- @output = StringIO.new
8
- @logger = Logger.new output
9
- @rpc = ThriftServer::RPC.new :foo, :bar
10
- end
11
-
12
- def test_logs_incoming_rpcs_names
13
- app = stub call: :result
14
-
15
- middleware = ThriftServer::LoggingMiddleware.new(app, logger)
16
-
17
- middleware.call rpc
18
-
19
- assert_logged output, 'INFO'
20
- assert_logged output, rpc.name
21
- end
22
-
23
- def test_logs_errors
24
- app = stub
25
- app.stubs(:call).raises(TestError)
26
-
27
- middleware = ThriftServer::LoggingMiddleware.new(app, logger)
28
-
29
- assert_raises TestError do
30
- middleware.call rpc
31
- end
32
-
33
- assert_logged output, 'ERROR'
34
- assert_logged output, 'TestError'
35
- end
36
-
37
- private
38
- def assert_logged(log, text)
39
- log.rewind
40
- assert log.read.include?(text.to_s), "#{text} not logged"
41
- end
42
- end
@@ -1,70 +0,0 @@
1
- require_relative 'test_helper'
2
-
3
- class MetricsMiddlewareTest < MiniTest::Unit::TestCase
4
- attr_reader :rpc
5
-
6
- def setup
7
- @rpc = ThriftServer::RPC.new :foo, :bar
8
- end
9
-
10
- def test_times_the_rpc
11
- app = stub call: :result
12
-
13
- statsd = Class.new FakeStatsd do
14
- attr_reader :timer
15
-
16
- def time(*args)
17
- @timer = args.first
18
- yield
19
- end
20
- end.new
21
-
22
- middleware = ThriftServer::MetricsMiddleware.new(app, statsd)
23
-
24
- middleware.call rpc
25
-
26
- assert statsd.timer, 'Timer not recorded'
27
- assert_equal rpc.name, statsd.timer
28
- end
29
-
30
- def test_increments_a_counter_on_successful_rpcs
31
- app = stub call: :result
32
-
33
- statsd = Class.new FakeStatsd do
34
- attr_reader :counter
35
-
36
- def increment(*args)
37
- @counter = args.first
38
- end
39
- end.new
40
-
41
- middleware = ThriftServer::MetricsMiddleware.new(app, statsd)
42
-
43
- middleware.call rpc
44
-
45
- assert statsd.counter, 'Counter not updated'
46
- assert_equal rpc.name, statsd.counter
47
- end
48
-
49
- def test_increments_a_counter_on_failed_rpcs
50
- app = stub
51
- app.stubs(:call).raises(TestError)
52
-
53
- statsd = Class.new FakeStatsd do
54
- attr_reader :counter
55
-
56
- def increment(*args)
57
- @counter = args.first
58
- end
59
- end.new
60
-
61
- middleware = ThriftServer::MetricsMiddleware.new(app, statsd)
62
-
63
- assert_raises TestError do
64
- middleware.call rpc
65
- end
66
-
67
- assert statsd.counter, 'Counter not updated'
68
- assert_equal 'errors', statsd.counter
69
- end
70
- end