rubypitaya 1.2.9 → 1.5.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/lib/rubypitaya/app-template/Gemfile +1 -1
- data/lib/rubypitaya/app-template/Gemfile.lock +2 -2
- data/lib/rubypitaya/app-template/Rakefile +1 -0
- data/lib/rubypitaya/app-template/app/handlers/hello_world_handler.rb +10 -8
- data/lib/rubypitaya/app-template/bin/console +11 -3
- data/lib/rubypitaya/app-template/config/routes.rb +11 -0
- data/lib/rubypitaya/app-template/docker-compose.yml +1 -0
- data/lib/rubypitaya/core/etcd_connector.rb +41 -5
- data/lib/rubypitaya/core/handler_router.rb +18 -1
- data/lib/rubypitaya/core/main.rb +37 -8
- data/lib/rubypitaya/core/path.rb +2 -0
- data/lib/rubypitaya/core/routes_base.rb +36 -0
- data/lib/rubypitaya/version.rb +1 -2
- metadata +4 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 8ce9fce444231d413f663d1af94356f0a04204af86050e6041a24f3b2bf37d8d
|
|
4
|
+
data.tar.gz: cc4c79730ea4e46891bff56f635c0135c62adc0f5ce06c6a473567bd46a48b78
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 46fff9b02c5d40577864c21bd226d7b412b93d70af22612b3dfe39409546d2b14361f2f63d0ba0f4c07db5fe118908d4700b804c5ad134f7ceb06e8c94b5cdc2
|
|
7
|
+
data.tar.gz: 40b3def401682e4f98e6efaabaad9afc384128f6e0a39a3ae495d36643155bab86c1913969fd3ac35f647275836b06c24aafd818dcf7e2657618ffb1754587ee
|
|
@@ -62,7 +62,7 @@ GEM
|
|
|
62
62
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
63
63
|
rspec-support (~> 3.8.0)
|
|
64
64
|
rspec-support (3.8.3)
|
|
65
|
-
rubypitaya (1.
|
|
65
|
+
rubypitaya (1.5.0)
|
|
66
66
|
activerecord (= 6.0.2)
|
|
67
67
|
etcdv3 (= 0.10.2)
|
|
68
68
|
eventmachine (= 1.2.7)
|
|
@@ -85,7 +85,7 @@ DEPENDENCIES
|
|
|
85
85
|
pry (= 0.12.2)
|
|
86
86
|
rake (= 10.0)
|
|
87
87
|
rspec (= 3.8.0)
|
|
88
|
-
rubypitaya (= 1.
|
|
88
|
+
rubypitaya (= 1.5.0)
|
|
89
89
|
|
|
90
90
|
BUNDLED WITH
|
|
91
91
|
1.17.2
|
|
@@ -40,6 +40,7 @@ namespace :db do
|
|
|
40
40
|
connection_data = database_config.connection_data_without_database
|
|
41
41
|
|
|
42
42
|
ActiveRecord::Base.establish_connection(connection_data)
|
|
43
|
+
ActiveRecord::Base.connection.select_all "SELECT pg_terminate_backend(pg_stat_activity.pid) FROM pg_stat_activity WHERE datname='#{database_config.database_name}' AND pid <> pg_backend_pid();"
|
|
43
44
|
ActiveRecord::Base.connection.drop_database(database_config.database_name)
|
|
44
45
|
ActiveRecord::Base.connection.close
|
|
45
46
|
|
|
@@ -1,11 +1,13 @@
|
|
|
1
|
-
|
|
1
|
+
module MyApp
|
|
2
|
+
class HelloWorldHandler < RubyPitaya::HandlerBase
|
|
2
3
|
|
|
3
|
-
|
|
4
|
+
non_authenticated_actions :sayHello
|
|
4
5
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
def sayHello
|
|
7
|
+
response = {
|
|
8
|
+
code: 'RP-200',
|
|
9
|
+
msg: 'Hello!'
|
|
10
|
+
}
|
|
11
|
+
end
|
|
10
12
|
end
|
|
11
|
-
end
|
|
13
|
+
end
|
|
@@ -7,16 +7,24 @@ require 'rubypitaya'
|
|
|
7
7
|
require 'rubypitaya/core/database_config'
|
|
8
8
|
|
|
9
9
|
environment_name = ENV.fetch("RUBYPITAYA_ENV") { 'development' }
|
|
10
|
-
database_config = DatabaseConfig.new(environment_name, Path::DATABASE_CONFIG_PATH)
|
|
10
|
+
database_config = RubyPitaya::DatabaseConfig.new(environment_name, RubyPitaya::Path::DATABASE_CONFIG_PATH)
|
|
11
11
|
ActiveRecord::Base.establish_connection(database_config.connection_data)
|
|
12
12
|
ActiveRecord::Base.logger = ActiveSupport::Logger.new(STDOUT)
|
|
13
13
|
ActiveSupport::LogSubscriber.colorize_logging = true
|
|
14
14
|
|
|
15
15
|
Gem.find_files('rubypitaya/**/*.rb').each do |path|
|
|
16
|
-
require path unless path.end_with?('spec.rb') ||
|
|
16
|
+
require path unless path.end_with?('spec.rb') ||
|
|
17
|
+
path.include?('db/migrate') ||
|
|
18
|
+
path.include?('app-template')
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
app_files_path = File.join(RubyPitaya::Path::APP_FOLDER_PATH, '**/*.rb')
|
|
22
|
+
Dir[app_files_path].each do |path|
|
|
23
|
+
require path unless path.end_with?('spec.rb') ||
|
|
24
|
+
path.include?('db/migrate')
|
|
17
25
|
end
|
|
18
26
|
|
|
19
27
|
require 'irb'
|
|
20
28
|
IRB.start(__FILE__)
|
|
21
29
|
|
|
22
|
-
ActiveRecord::Base.connection.close
|
|
30
|
+
ActiveRecord::Base.connection.close
|
|
@@ -6,35 +6,71 @@ module RubyPitaya
|
|
|
6
6
|
class EtcdConnector
|
|
7
7
|
|
|
8
8
|
def initialize(server_uuid, desktop_name, server_name, etcd_prefix,
|
|
9
|
-
|
|
9
|
+
etcd_address, allow_reconnect, lease_seconds)
|
|
10
10
|
@server_uuid = server_uuid
|
|
11
11
|
@server_name = server_name
|
|
12
12
|
@desktop_name = desktop_name
|
|
13
13
|
@etcd_prefix = etcd_prefix
|
|
14
14
|
@etcd_address = etcd_address
|
|
15
15
|
@allow_reconnect = allow_reconnect
|
|
16
|
+
@lease_seconds = lease_seconds
|
|
17
|
+
|
|
18
|
+
@renew_connection_seconds = lease_seconds / 2.0
|
|
19
|
+
|
|
20
|
+
@renew_connection_key = nil
|
|
21
|
+
@renew_connection_value = nil
|
|
22
|
+
@renew_connection_thread = nil
|
|
16
23
|
end
|
|
17
24
|
|
|
18
25
|
def connect
|
|
26
|
+
connection_key = get_connection_key
|
|
27
|
+
connection_value = get_connection_value
|
|
28
|
+
|
|
19
29
|
@connection = Etcdv3.new(endpoints: @etcd_address,
|
|
20
30
|
allow_reconnect: @allow_reconnect)
|
|
21
|
-
|
|
31
|
+
|
|
32
|
+
@lease = @connection.lease_grant(@lease_seconds)
|
|
33
|
+
|
|
34
|
+
@connection.put(connection_key, connection_value, lease: @lease.ID)
|
|
35
|
+
|
|
36
|
+
@renew_connection_key = connection_key
|
|
37
|
+
@renew_connection_value = connection_value
|
|
38
|
+
|
|
39
|
+
renew_connection
|
|
22
40
|
end
|
|
23
41
|
|
|
24
42
|
def disconnect
|
|
25
|
-
@connection.del(
|
|
43
|
+
@connection.del(get_connection_key)
|
|
26
44
|
end
|
|
27
45
|
|
|
28
46
|
private
|
|
29
47
|
|
|
30
|
-
def
|
|
48
|
+
def get_connection_key
|
|
31
49
|
"#{@etcd_prefix}servers/#{@server_name}/#{@server_uuid}"
|
|
32
50
|
end
|
|
33
51
|
|
|
34
|
-
def
|
|
52
|
+
def get_connection_value
|
|
35
53
|
JSON.generate(get_server_data)
|
|
36
54
|
end
|
|
37
55
|
|
|
56
|
+
def renew_connection
|
|
57
|
+
stop_renew_connection
|
|
58
|
+
|
|
59
|
+
@renew_connection_thread = Thread.new do
|
|
60
|
+
loop do
|
|
61
|
+
sleep(@renew_connection_seconds)
|
|
62
|
+
|
|
63
|
+
@lease = @connection.lease_grant(@lease_seconds)
|
|
64
|
+
@connection.put(@renew_connection_key, @renew_connection_value,
|
|
65
|
+
lease: @lease.ID)
|
|
66
|
+
end
|
|
67
|
+
end
|
|
68
|
+
end
|
|
69
|
+
|
|
70
|
+
def stop_renew_connection
|
|
71
|
+
@renew_connection_thread.exit unless @renew_connection_thread.nil?
|
|
72
|
+
end
|
|
73
|
+
|
|
38
74
|
def get_server_data
|
|
39
75
|
{
|
|
40
76
|
id: @server_uuid,
|
|
@@ -4,11 +4,26 @@ module RubyPitaya
|
|
|
4
4
|
|
|
5
5
|
class HandlerRouter
|
|
6
6
|
|
|
7
|
-
def initialize(handler_folder_path)
|
|
7
|
+
def initialize(handler_folder_path, routes_path)
|
|
8
|
+
import_routes_file(routes_path)
|
|
8
9
|
import_handler_files(handler_folder_path)
|
|
10
|
+
|
|
11
|
+
import_routes_class
|
|
9
12
|
import_handler_classes
|
|
10
13
|
end
|
|
11
14
|
|
|
15
|
+
def import_routes_file(routes_path)
|
|
16
|
+
require routes_path
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def import_routes_class
|
|
20
|
+
routes_classes = ObjectSpace.each_object(RoutesBase.singleton_class).select do |klass|
|
|
21
|
+
klass != RoutesBase
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
@routes = routes_classes.first.new
|
|
25
|
+
end
|
|
26
|
+
|
|
12
27
|
def import_handler_files(handler_folder_path)
|
|
13
28
|
Gem.find_files("#{handler_folder_path}/*.rb").each { |path| require path }
|
|
14
29
|
end
|
|
@@ -22,6 +37,8 @@ module RubyPitaya
|
|
|
22
37
|
|
|
23
38
|
@handler_name_map = @handlers.map do |handler|
|
|
24
39
|
handler_name = handler.class.to_s
|
|
40
|
+
handler_name = @routes.get_new_handler_name(handler_name)
|
|
41
|
+
handler_name = handler_name.split('::').last
|
|
25
42
|
handler_name = handler_name[0].downcase + handler_name[1..-1]
|
|
26
43
|
|
|
27
44
|
[handler_name, handler]
|
data/lib/rubypitaya/core/main.rb
CHANGED
|
@@ -7,6 +7,7 @@ require 'rubypitaya/core/config'
|
|
|
7
7
|
require 'rubypitaya/core/session'
|
|
8
8
|
require 'rubypitaya/core/postman'
|
|
9
9
|
require 'rubypitaya/core/parameters'
|
|
10
|
+
require 'rubypitaya/core/routes_base'
|
|
10
11
|
require 'rubypitaya/core/handler_router'
|
|
11
12
|
require 'rubypitaya/core/etcd_connector'
|
|
12
13
|
require 'rubypitaya/core/nats_connector'
|
|
@@ -24,7 +25,6 @@ module RubyPitaya
|
|
|
24
25
|
|
|
25
26
|
attr_reader :redis_connector, :config, :bll
|
|
26
27
|
|
|
27
|
-
private
|
|
28
28
|
def initialize
|
|
29
29
|
@environment_name = ENV.fetch("RUBYPITAYA_ENV") { 'development' }
|
|
30
30
|
@is_development_environment = @environment_name == 'development'
|
|
@@ -39,10 +39,12 @@ module RubyPitaya
|
|
|
39
39
|
|
|
40
40
|
@etcd_prefix = ENV['ETCD_PREFIX']
|
|
41
41
|
@etcd_address = ENV['ETCD_URL']
|
|
42
|
+
@etcd_lease_seconds = ENV['ETCD_LEASE_SECONDS'].to_i
|
|
42
43
|
@allow_reconnect = false
|
|
43
44
|
@etcd_connector = EtcdConnector.new(@service_uuid, @desktop_name,
|
|
44
45
|
@server_name, @etcd_prefix,
|
|
45
|
-
@etcd_address, @allow_reconnect
|
|
46
|
+
@etcd_address, @allow_reconnect,
|
|
47
|
+
@etcd_lease_seconds)
|
|
46
48
|
@etcd_connector.connect
|
|
47
49
|
|
|
48
50
|
@nats_address = ENV['NATS_URL']
|
|
@@ -68,13 +70,43 @@ module RubyPitaya
|
|
|
68
70
|
@initializer_broadcast = InitializerBroadcast.new
|
|
69
71
|
@initializer_broadcast.run(@initializer_content)
|
|
70
72
|
|
|
71
|
-
@handler_router = HandlerRouter.new(Path::HANDLERS_FOLDER_PATH
|
|
73
|
+
@handler_router = HandlerRouter.new(Path::HANDLERS_FOLDER_PATH,
|
|
74
|
+
Path::ROUTES_FILE_PATH)
|
|
75
|
+
|
|
76
|
+
run_server
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
private
|
|
80
|
+
|
|
81
|
+
def run_server
|
|
82
|
+
@is_shutting_down = false
|
|
72
83
|
|
|
73
|
-
|
|
74
|
-
|
|
84
|
+
catch :sig_shutdown do
|
|
85
|
+
Signal.trap("SIGINT") { throw :sig_shutdown }
|
|
86
|
+
Signal.trap("SIGQUIT") { throw :sig_shutdown }
|
|
87
|
+
Signal.trap("SIGTERM") { throw :sig_shutdown }
|
|
88
|
+
|
|
89
|
+
puts "Server started!"
|
|
90
|
+
run_nats_connection
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
Signal.trap("SIGINT", nil)
|
|
94
|
+
Signal.trap("SIGQUIT", nil)
|
|
95
|
+
Signal.trap("SIGTERM", nil)
|
|
96
|
+
|
|
97
|
+
shutdown_server
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def shutdown_server
|
|
101
|
+
return if @is_shutting_down
|
|
102
|
+
@is_shutting_down = true
|
|
103
|
+
|
|
104
|
+
puts "Server shutting down..."
|
|
75
105
|
|
|
76
106
|
@etcd_connector.disconnect
|
|
77
107
|
@database_connector.disconnect
|
|
108
|
+
|
|
109
|
+
exit(0)
|
|
78
110
|
end
|
|
79
111
|
|
|
80
112
|
def run_nats_connection
|
|
@@ -113,9 +145,6 @@ module RubyPitaya
|
|
|
113
145
|
|
|
114
146
|
response
|
|
115
147
|
end
|
|
116
|
-
rescue SystemExit, Interrupt
|
|
117
|
-
puts "Quit!"
|
|
118
|
-
return 0
|
|
119
148
|
rescue Exception => error
|
|
120
149
|
puts "ERROR: #{error}"
|
|
121
150
|
puts error.backtrace
|
data/lib/rubypitaya/core/path.rb
CHANGED
|
@@ -9,5 +9,7 @@ module RubyPitaya
|
|
|
9
9
|
HANDLERS_FOLDER_PATH = File.join(Dir.pwd, 'app/handlers/')
|
|
10
10
|
APP_CONFIG_FOLDER_PATH = File.join(Dir.pwd, 'app/config/')
|
|
11
11
|
MIGRATIONS_FOLDER_PATH = File.join(Dir.pwd, 'db/migrate/')
|
|
12
|
+
|
|
13
|
+
ROUTES_FILE_PATH = File.join(Dir.pwd, 'config/routes.rb')
|
|
12
14
|
end
|
|
13
15
|
end
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
|
|
2
|
+
module RubyPitaya
|
|
3
|
+
|
|
4
|
+
class RoutesBase
|
|
5
|
+
|
|
6
|
+
def initialize
|
|
7
|
+
@handler_name_map = {}
|
|
8
|
+
|
|
9
|
+
setup
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def setup
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def match(route_name, to:)
|
|
16
|
+
handler_name, action_name = to.split('#')
|
|
17
|
+
new_handler_name, new_action_name = route_name.split('.')
|
|
18
|
+
|
|
19
|
+
if new_action_name.nil?
|
|
20
|
+
set_handler_name(handler_name, new_handler_name)
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def get_new_handler_name(handler_name)
|
|
25
|
+
return handler_name unless @handler_name_map.include?(handler_name)
|
|
26
|
+
|
|
27
|
+
@handler_name_map[handler_name]
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
private
|
|
31
|
+
|
|
32
|
+
def set_handler_name(handler_name, new_handler_name)
|
|
33
|
+
@handler_name_map[handler_name] = new_handler_name
|
|
34
|
+
end
|
|
35
|
+
end
|
|
36
|
+
end
|
data/lib/rubypitaya/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: rubypitaya
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Luciano Prestes Cavalcanti
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2020-
|
|
11
|
+
date: 2020-05-30 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: pg
|
|
@@ -203,6 +203,7 @@ files:
|
|
|
203
203
|
- "./lib/rubypitaya/app-template/app/models/user.rb"
|
|
204
204
|
- "./lib/rubypitaya/app-template/bin/console"
|
|
205
205
|
- "./lib/rubypitaya/app-template/config/database.yml"
|
|
206
|
+
- "./lib/rubypitaya/app-template/config/routes.rb"
|
|
206
207
|
- "./lib/rubypitaya/app-template/db/migrate/001_create_user_migration.rb"
|
|
207
208
|
- "./lib/rubypitaya/app-template/db/migrate/002_create_player_migration.rb"
|
|
208
209
|
- "./lib/rubypitaya/app-template/docker-compose.yml"
|
|
@@ -227,6 +228,7 @@ files:
|
|
|
227
228
|
- "./lib/rubypitaya/core/path.rb"
|
|
228
229
|
- "./lib/rubypitaya/core/postman.rb"
|
|
229
230
|
- "./lib/rubypitaya/core/redis_connector.rb"
|
|
231
|
+
- "./lib/rubypitaya/core/routes_base.rb"
|
|
230
232
|
- "./lib/rubypitaya/core/session.rb"
|
|
231
233
|
- "./lib/rubypitaya/version.rb"
|
|
232
234
|
- bin/rubypitaya
|