thrift_server 0.1.1 → 1.0.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.
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