radar-app 0.8.0 → 0.11.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/Guardfile +10 -1
- data/lib/radar/app.rb +6 -0
- data/lib/radar/app/healthz.rb +9 -0
- data/lib/radar/app/multiplexed_processor.rb +20 -0
- data/lib/radar/app/processor_factory.rb +24 -0
- data/lib/radar/app/runner.rb +1 -0
- data/lib/radar/app/server.rb +6 -1
- data/lib/radar/app/tasks.rb +1 -0
- data/lib/radar/app/tasks/server.rb +3 -0
- data/lib/radar/app/tasks/status.rb +33 -0
- data/lib/radar/app/version.rb +1 -1
- data/radar-app.gemspec +2 -1
- data/spec/lib/radar/app/processor_factory_spec.rb +39 -1
- data/spec/lib/radar/app/tasks/status_spec.rb +26 -0
- metadata +26 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 747689e670764ac159b53aacd64031b35fba08dc5738b8283ecf815ed1a1a60f
|
4
|
+
data.tar.gz: b1d9e7acf27bf80ac06f951911e7a03e321522deb5062b986a37607f367fa79b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2f0098ac27d965df611efd6b020080e4f3d5364474302efc87d780a44b4b91f994b99d027489d8765c35c96642e30a80b27535bc6a1dffb7680c72c0baa5472d
|
7
|
+
data.tar.gz: 010eb0a3b41c7fd06ead5b75a5a954715b15013675f9ddd00c92dd48826d5b674c27bac3bd37bf472340a14f7b26fa7af9e518d0c8e7429c16cdff799141eff4
|
data/Guardfile
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
guard :rspec do
|
1
|
+
guard :rspec, cmd: "bundle exec rspec" do
|
2
2
|
watch(%r{^spec/.+_spec\.rb$})
|
3
3
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
4
4
|
watch('spec/spec_helper.rb') { "spec" }
|
@@ -8,3 +8,12 @@ guard 'rake', :task => 'install' do
|
|
8
8
|
watch(%r{^lib/(.+)\.rb$})
|
9
9
|
watch(/^bin/)
|
10
10
|
end
|
11
|
+
|
12
|
+
# Note: The cmd option is now required due to the increasing number of ways
|
13
|
+
# rspec may be run, below are examples of the most common uses.
|
14
|
+
# * bundler: 'bundle exec rspec'
|
15
|
+
# * bundler binstubs: 'bin/rspec'
|
16
|
+
# * spring: 'bin/rspec' (This will use spring if running and you have
|
17
|
+
# installed the spring binstubs per the docs)
|
18
|
+
# * zeus: 'zeus rspec' (requires the server to be started separately)
|
19
|
+
# * 'just' rspec: 'rspec'
|
data/lib/radar/app.rb
CHANGED
@@ -7,7 +7,9 @@ require 'radar/app/analyzer_controller'
|
|
7
7
|
require 'radar/app/server'
|
8
8
|
require 'radar/app/bootstrap'
|
9
9
|
require 'radar/app/analyzer'
|
10
|
+
require 'radar/app/healthz'
|
10
11
|
require 'radar/app/processor_factory'
|
12
|
+
require 'radar/app/multiplexed_processor'
|
11
13
|
|
12
14
|
require 'radar-api'
|
13
15
|
require 'connection_pool'
|
@@ -58,6 +60,10 @@ module Radar
|
|
58
60
|
@portfolio_service ||= connection_pool('PortfolioService')
|
59
61
|
end
|
60
62
|
|
63
|
+
def self.integration_status_service
|
64
|
+
@integration_status_service ||= connection_pool('IntegrationStatusService')
|
65
|
+
end
|
66
|
+
|
61
67
|
protected
|
62
68
|
|
63
69
|
def self.connection_pool(client_class)
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class Radar::App::MultiplexedProcessor < Thrift::MultiplexedProcessor
|
2
|
+
def process(iprot, oprot)
|
3
|
+
begin
|
4
|
+
name, type, seqid = iprot.read_message_begin
|
5
|
+
super(Thrift::StoredMessageProtocol.new(iprot, [name, type, seqid]), oprot)
|
6
|
+
rescue Thrift::Exception => e
|
7
|
+
write_error(Thrift::ApplicationException.new(Thrift::ApplicationException::INTERNAL_ERROR, e.message), oprot, name, seqid)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
protected
|
12
|
+
|
13
|
+
def write_error(err, oprot, name, seqid)
|
14
|
+
oprot.write_message_begin(name, Thrift::MessageTypes::EXCEPTION, seqid)
|
15
|
+
err.write(oprot)
|
16
|
+
oprot.write_message_end
|
17
|
+
oprot.trans.flush
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -1,10 +1,34 @@
|
|
1
1
|
require 'thrift/exceptions'
|
2
|
+
require 'radar-api'
|
2
3
|
|
3
4
|
module Radar
|
4
5
|
module App
|
5
6
|
module ProcessorFactory
|
7
|
+
|
8
|
+
class AppErrorHandler
|
9
|
+
def initialize(target)
|
10
|
+
@target = target
|
11
|
+
end
|
12
|
+
|
13
|
+
def method_missing(m, *args, &block)
|
14
|
+
begin
|
15
|
+
@target.send(m, *args, &block)
|
16
|
+
rescue => e
|
17
|
+
if e.kind_of?(Thrift::Exception)
|
18
|
+
raise e
|
19
|
+
else
|
20
|
+
raise Radar::API::ApplicationError.new(message: e.message, stacktrace: e.backtrace)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
6
26
|
def self.create_processor(superclass)
|
7
27
|
Class.new(superclass) do
|
28
|
+
def initialize(handler)
|
29
|
+
super(AppErrorHandler.new(handler))
|
30
|
+
end
|
31
|
+
|
8
32
|
def write_error(err, oprot, name, seqid)
|
9
33
|
super
|
10
34
|
raise if err.type == Thrift::ApplicationException::INTERNAL_ERROR
|
data/lib/radar/app/runner.rb
CHANGED
@@ -8,6 +8,7 @@ module Radar
|
|
8
8
|
register(Radar::App::Tasks::New, :new, 'new APP', 'Create a new app')
|
9
9
|
register(Radar::App::Tasks::Generate, :generate, 'generate TYPE NAME', 'Generate source files')
|
10
10
|
register(Radar::App::Tasks::Server, :server, 'server', 'Start the app server')
|
11
|
+
register(Radar::App::Tasks::Status, :status, 'status', 'Check the server status')
|
11
12
|
register(Radar::App::Tasks::Console, :console, 'console', 'Start the console for test')
|
12
13
|
end
|
13
14
|
end
|
data/lib/radar/app/server.rb
CHANGED
@@ -7,7 +7,7 @@ module Radar
|
|
7
7
|
include Radar::App::Logger
|
8
8
|
|
9
9
|
def start
|
10
|
-
multiplexer =
|
10
|
+
multiplexer = MultiplexedProcessor.new
|
11
11
|
analyzer_controller = Radar::App::AnalyzerController.new
|
12
12
|
multiplexer.register_processor(
|
13
13
|
'PortfolioAnalyzer',
|
@@ -28,6 +28,11 @@ module Radar
|
|
28
28
|
new(Radar::App.transaction_file_importer)
|
29
29
|
)
|
30
30
|
end
|
31
|
+
multiplexer.register_processor(
|
32
|
+
'Healthz',
|
33
|
+
ProcessorFactory.create_processor(Radar::API::Healthz::Processor).
|
34
|
+
new(Radar::App::Healthz.new)
|
35
|
+
)
|
31
36
|
transport = Thrift::ServerSocket.new(port)
|
32
37
|
server = Thrift::NonblockingServer.new(multiplexer, transport, Thrift::FramedTransportFactory.new)
|
33
38
|
logger.info { "Starting app on port #{port}..." }
|
data/lib/radar/app/tasks.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require 'sigdump'
|
2
|
+
|
1
3
|
module Radar
|
2
4
|
module App
|
3
5
|
module Tasks
|
@@ -6,6 +8,7 @@ module Radar
|
|
6
8
|
namespace :server
|
7
9
|
|
8
10
|
def start_server
|
11
|
+
Sigdump.setup('TTIN', '-')
|
9
12
|
Radar::App::Bootstrap.startup
|
10
13
|
Radar::App::Server.new(ENV['PORT'] || 5000).start
|
11
14
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'thrift'
|
2
|
+
require 'radar-api'
|
3
|
+
require 'radar/api/healthz'
|
4
|
+
|
5
|
+
module Radar
|
6
|
+
module App
|
7
|
+
module Tasks
|
8
|
+
class Status < Thor::Group
|
9
|
+
include Thor::Actions
|
10
|
+
namespace :status
|
11
|
+
|
12
|
+
def status
|
13
|
+
transport = Thrift::FramedTransport.new(Thrift::Socket.new('127.0.0.1', ENV['PORT'] || 5000))
|
14
|
+
protocol = Thrift::MultiplexedProtocol.new(Thrift::BinaryProtocolAccelerated.new(transport), 'Healthz')
|
15
|
+
client = Radar::Api::Healthz::Client.new(protocol)
|
16
|
+
begin
|
17
|
+
transport.open
|
18
|
+
client.status
|
19
|
+
rescue Thrift::TransportException => e
|
20
|
+
case e.type
|
21
|
+
when 1
|
22
|
+
puts "Server is down!"
|
23
|
+
else
|
24
|
+
puts "Server is not ready: #{e}"
|
25
|
+
end
|
26
|
+
exit 100 + e.type
|
27
|
+
end
|
28
|
+
puts "Server is up!"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
data/lib/radar/app/version.rb
CHANGED
data/radar-app.gemspec
CHANGED
@@ -24,9 +24,10 @@ Gem::Specification.new do |spec|
|
|
24
24
|
spec.add_development_dependency "rspec"
|
25
25
|
|
26
26
|
spec.add_dependency "thor", "~> 0.19"
|
27
|
-
spec.add_dependency "radar-api", "
|
27
|
+
spec.add_dependency "radar-api", ">= 0.10.0"
|
28
28
|
spec.add_dependency "thin", "1.6.2"
|
29
29
|
spec.add_dependency "connection_pool", "~> 2.0"
|
30
30
|
spec.add_dependency "activesupport", "~> 4.1"
|
31
31
|
spec.add_dependency "RaymondChou-thrift_client", "~> 0.9"
|
32
|
+
spec.add_dependency "sigdump", "~> 0.2.4"
|
32
33
|
end
|
@@ -1,11 +1,31 @@
|
|
1
1
|
require 'radar/app/processor_factory'
|
2
2
|
|
3
3
|
describe Radar::App::ProcessorFactory do
|
4
|
+
let(:handler_class) do
|
5
|
+
Class.new do
|
6
|
+
end
|
7
|
+
end
|
4
8
|
|
5
9
|
let(:parent_processor_class) do
|
6
10
|
Class.new do
|
7
11
|
attr_reader :write_error_called
|
8
12
|
|
13
|
+
def raise_an_error
|
14
|
+
raise 'an error'
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(handler)
|
18
|
+
end
|
19
|
+
|
20
|
+
def process_an_error
|
21
|
+
begin
|
22
|
+
raise 'an error'
|
23
|
+
rescue => e
|
24
|
+
x = Thrift::ApplicationException.new(Thrift::ApplicationException::INTERNAL_ERROR, 'Internal error')
|
25
|
+
write_error(x, nil, nil, nil)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
9
29
|
def process_an_error
|
10
30
|
begin
|
11
31
|
raise 'an error'
|
@@ -29,7 +49,7 @@ describe Radar::App::ProcessorFactory do
|
|
29
49
|
|
30
50
|
describe '#create_processor' do
|
31
51
|
describe 'it creates a processor that' do
|
32
|
-
let(:processor) { Radar::App::ProcessorFactory.create_processor(parent_processor_class).new }
|
52
|
+
let(:processor) { Radar::App::ProcessorFactory.create_processor(parent_processor_class).new(nil) }
|
33
53
|
it 'raises the exception on error' do
|
34
54
|
expect { processor.process_an_error }.to raise_error 'an error'
|
35
55
|
end
|
@@ -48,4 +68,22 @@ describe Radar::App::ProcessorFactory do
|
|
48
68
|
end
|
49
69
|
end
|
50
70
|
end
|
71
|
+
describe 'AppErrorHandler' do
|
72
|
+
let(:error_handler) { Radar::App::ProcessorFactory::AppErrorHandler.new }
|
73
|
+
let(:target) { double() }
|
74
|
+
context 'then target raises a non-Thrift exception' do
|
75
|
+
it 'raises an ApplicationError' do
|
76
|
+
allow(target).to receive(:raise_an_error).and_raise 'an error'
|
77
|
+
error_handler = Radar::App::ProcessorFactory::AppErrorHandler.new(target)
|
78
|
+
expect { error_handler.raise_an_error }.to raise_error(Radar::Api::ApplicationError)
|
79
|
+
end
|
80
|
+
context 'then target raises a Thrift exception' do
|
81
|
+
it 'raises the original error' do
|
82
|
+
allow(target).to receive(:raise_an_error).and_raise Radar::Api::AuthenticationError.new
|
83
|
+
error_handler = Radar::App::ProcessorFactory::AppErrorHandler.new(target)
|
84
|
+
expect { error_handler.raise_an_error }.to raise_error(Radar::Api::AuthenticationError)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
51
89
|
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'radar/app/runner'
|
2
|
+
require 'radar/app'
|
3
|
+
require 'socket'
|
4
|
+
|
5
|
+
describe Radar::App::Tasks::Status do
|
6
|
+
describe '#status' do
|
7
|
+
let(:port) do
|
8
|
+
server = TCPServer.new('127.0.0.1', 0)
|
9
|
+
port = server.addr[1]
|
10
|
+
server.close
|
11
|
+
port
|
12
|
+
end
|
13
|
+
before :each do
|
14
|
+
allow(ENV).to receive(:[]).and_return nil
|
15
|
+
allow(ENV).to receive(:[]).with('PORT').and_return port
|
16
|
+
end
|
17
|
+
it 'exits with error code when cannot connect to server' do
|
18
|
+
expect { Radar::App::Runner.start(%w{status}) }.to raise_error SystemExit
|
19
|
+
end
|
20
|
+
it 'does not exit with error when PONG is received' do
|
21
|
+
Thread.new { @server = Radar::App::Server.new(port).start }
|
22
|
+
sleep 0.3
|
23
|
+
expect { Radar::App::Runner.start(%w{status}) }.not_to raise_error
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: radar-app
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.11.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leonardo Mendonca
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-07-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: bundler
|
@@ -85,16 +85,16 @@ dependencies:
|
|
85
85
|
name: radar-api
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
87
87
|
requirements:
|
88
|
-
- - "
|
88
|
+
- - ">="
|
89
89
|
- !ruby/object:Gem::Version
|
90
|
-
version:
|
90
|
+
version: 0.10.0
|
91
91
|
type: :runtime
|
92
92
|
prerelease: false
|
93
93
|
version_requirements: !ruby/object:Gem::Requirement
|
94
94
|
requirements:
|
95
|
-
- - "
|
95
|
+
- - ">="
|
96
96
|
- !ruby/object:Gem::Version
|
97
|
-
version:
|
97
|
+
version: 0.10.0
|
98
98
|
- !ruby/object:Gem::Dependency
|
99
99
|
name: thin
|
100
100
|
requirement: !ruby/object:Gem::Requirement
|
@@ -151,6 +151,20 @@ dependencies:
|
|
151
151
|
- - "~>"
|
152
152
|
- !ruby/object:Gem::Version
|
153
153
|
version: '0.9'
|
154
|
+
- !ruby/object:Gem::Dependency
|
155
|
+
name: sigdump
|
156
|
+
requirement: !ruby/object:Gem::Requirement
|
157
|
+
requirements:
|
158
|
+
- - "~>"
|
159
|
+
- !ruby/object:Gem::Version
|
160
|
+
version: 0.2.4
|
161
|
+
type: :runtime
|
162
|
+
prerelease: false
|
163
|
+
version_requirements: !ruby/object:Gem::Requirement
|
164
|
+
requirements:
|
165
|
+
- - "~>"
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: 0.2.4
|
154
168
|
description: generates and run a radar-app.
|
155
169
|
email:
|
156
170
|
- desenvolvimento@investtools.com.br
|
@@ -175,7 +189,9 @@ files:
|
|
175
189
|
- lib/radar/app/controller.rb
|
176
190
|
- lib/radar/app/core_ext.rb
|
177
191
|
- lib/radar/app/core_ext/date.rb
|
192
|
+
- lib/radar/app/healthz.rb
|
178
193
|
- lib/radar/app/logger.rb
|
194
|
+
- lib/radar/app/multiplexed_processor.rb
|
179
195
|
- lib/radar/app/processor_factory.rb
|
180
196
|
- lib/radar/app/runner.rb
|
181
197
|
- lib/radar/app/server.rb
|
@@ -185,11 +201,13 @@ files:
|
|
185
201
|
- lib/radar/app/tasks/generate.rb
|
186
202
|
- lib/radar/app/tasks/new.rb
|
187
203
|
- lib/radar/app/tasks/server.rb
|
204
|
+
- lib/radar/app/tasks/status.rb
|
188
205
|
- lib/radar/app/version.rb
|
189
206
|
- radar-app.gemspec
|
190
207
|
- spec/lib/radar/app/analyzer_spec.rb
|
191
208
|
- spec/lib/radar/app/processor_factory_spec.rb
|
192
209
|
- spec/lib/radar/app/tasks/generate_spec.rb
|
210
|
+
- spec/lib/radar/app/tasks/status_spec.rb
|
193
211
|
- templates/DOKKU_SCALE
|
194
212
|
- templates/Gemfile
|
195
213
|
- templates/Procfile
|
@@ -215,8 +233,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
215
233
|
- !ruby/object:Gem::Version
|
216
234
|
version: '0'
|
217
235
|
requirements: []
|
218
|
-
|
219
|
-
rubygems_version: 2.5.1
|
236
|
+
rubygems_version: 3.0.6
|
220
237
|
signing_key:
|
221
238
|
specification_version: 4
|
222
239
|
summary: radar-app generator
|
@@ -224,3 +241,4 @@ test_files:
|
|
224
241
|
- spec/lib/radar/app/analyzer_spec.rb
|
225
242
|
- spec/lib/radar/app/processor_factory_spec.rb
|
226
243
|
- spec/lib/radar/app/tasks/generate_spec.rb
|
244
|
+
- spec/lib/radar/app/tasks/status_spec.rb
|