rsence-pre 2.2.0.28 → 2.2.0.29

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. data/VERSION +1 -1
  2. data/conf/default_conf.yaml +8 -6
  3. data/conf/rsence_command_strings.yaml +8 -6
  4. data/lib/rsence.rb +4 -4
  5. data/lib/rsence/argv.rb +218 -0
  6. data/lib/rsence/argv/argv_util.rb +58 -0
  7. data/lib/rsence/argv/env_check.rb +58 -0
  8. data/lib/rsence/argv/help_argv.rb +15 -0
  9. data/lib/rsence/argv/initenv_argv.rb +218 -0
  10. data/lib/rsence/argv/save_argv.rb +92 -0
  11. data/lib/rsence/argv/startup_argv.rb +118 -0
  12. data/lib/rsence/argv/status_argv.rb +132 -0
  13. data/lib/rsence/argv/test_port.rb +32 -0
  14. data/lib/{daemon → rsence}/daemon.rb +21 -6
  15. data/lib/{conf/default.rb → rsence/default_config.rb} +0 -1
  16. data/lib/{plugins → rsence}/dependencies.rb +0 -0
  17. data/lib/{util → rsence}/gzstring.rb +0 -0
  18. data/lib/rsence/http.rb +3 -0
  19. data/lib/{http → rsence/http}/broker.rb +12 -3
  20. data/lib/{http → rsence/http}/rackup.rb +0 -0
  21. data/lib/{http → rsence/http}/request.rb +0 -4
  22. data/lib/{http → rsence/http}/response.rb +0 -1
  23. data/lib/{session → rsence}/msg.rb +1 -1
  24. data/lib/{plugins → rsence}/pluginmanager.rb +2 -2
  25. data/lib/{plugins → rsence}/plugins.rb +7 -7
  26. data/lib/{plugins → rsence/plugins}/gui_plugin.rb +0 -0
  27. data/lib/{plugins → rsence/plugins}/guiparser.rb +0 -0
  28. data/lib/{plugins → rsence/plugins}/plugin.rb +0 -0
  29. data/lib/{plugins → rsence/plugins}/plugin_base.rb +0 -0
  30. data/lib/{plugins → rsence/plugins}/plugin_plugins.rb +0 -0
  31. data/lib/{plugins → rsence/plugins}/plugin_sqlite_db.rb +0 -0
  32. data/lib/{plugins → rsence/plugins}/servlet.rb +0 -0
  33. data/lib/{session → rsence}/sessionmanager.rb +2 -2
  34. data/lib/{session → rsence}/sessionstorage.rb +1 -1
  35. data/lib/{daemon → rsence}/sigcomm.rb +0 -0
  36. data/lib/{transporter → rsence}/transporter.rb +3 -3
  37. data/lib/{values/hvalue.rb → rsence/value.rb} +0 -0
  38. data/lib/{values → rsence}/valuemanager.rb +1 -1
  39. metadata +100 -91
  40. data/lib/conf/argv.rb +0 -842
@@ -0,0 +1,218 @@
1
+ module RSence
2
+ module ArgvUtil
3
+
4
+ # asks y/n and returns booleans,
5
+ # the default tells if which one is for just enter
6
+ def yesno(default=false)
7
+ if default
8
+ question = "Y/n? "
9
+ else
10
+ question = "y/N? "
11
+ end
12
+ print question
13
+ answer = $stdin.gets.strip.downcase[0]
14
+ answer = answer.chr if answer
15
+ if answer == 'n'
16
+ return false
17
+ elsif answer == 'y'
18
+ return true
19
+ elsif answer == nil
20
+ return default
21
+ else
22
+ return nil
23
+ end
24
+ end
25
+
26
+ # The initenv command and its parser. Asks questions about the environment before doing anything else.
27
+ def parse_initenv_argv
28
+ init_args
29
+ expect_option = false
30
+ option_name = false
31
+ valid_env = false
32
+ interactive = true
33
+ create_blank = false
34
+ if @argv.length >= 2
35
+ @argv[1..-1].each_with_index do |arg,i|
36
+ if expect_option
37
+ if [:port].include?(option_name) and arg.to_i.to_s != arg
38
+ puts ERB.new( @strs[:messages][:invalid_option_expected_number] ).result( binding )
39
+ exit
40
+ else
41
+ @args[option_name] = arg
42
+ end
43
+ expect_option = false
44
+ else
45
+ if arg.start_with?('--')
46
+ if arg == '--port'
47
+ expect_option = true
48
+ option_name = :port
49
+ elsif arg == '--addr'
50
+ expect_option = true
51
+ option_name = :addr
52
+ elsif arg == '--server'
53
+ expect_option = true
54
+ option_name = :server
55
+ elsif arg == '--title'
56
+ expect_option = true
57
+ option_name = :title
58
+ elsif arg == '--database'
59
+ expect_option = true
60
+ option_name = :db
61
+ elsif arg == '--uri-prefix'
62
+ expect_option = true
63
+ option_name = :base_url
64
+ elsif arg == '--blank'
65
+ create_blank = true
66
+ elsif arg == '--non-interactive'
67
+ interactive = false
68
+ else
69
+ invalid_option(arg)
70
+ end
71
+ elsif arg.start_with?('-')
72
+ arg.split('')[1..-1].each do |chr|
73
+ if chr == 'q'
74
+ interactive = false
75
+ end
76
+ end
77
+ else
78
+ @args[:env_path] = File.expand_path(arg)
79
+ end
80
+ end
81
+ end
82
+ if expect_option
83
+ puts ERB.new( @strs[:messages][:no_value_for_option] ).result( binding )
84
+ exit
85
+ end
86
+ end
87
+ if valid_env?(@args[:env_path],true)
88
+ puts @strs[:initenv][:env_already_initialized]
89
+ exit
90
+ end
91
+ conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
92
+ if File.exists?(@args[:env_path])
93
+ env_empty = true # true while entries start with a dot
94
+ env_clear = true # true while entries don't contain RSence project files
95
+ env_entries = ['conf', 'db', 'log', 'plugins', 'run', 'README', 'VERSION']
96
+ Dir.entries(@args[:env_path]).each do |entry|
97
+ next if entry.start_with?('.')
98
+ env_empty = false
99
+ if env_entries.include? entry
100
+ env_clear = false
101
+ break
102
+ end
103
+ end
104
+ unless env_clear
105
+ puts ERB.new( @strs[:initenv][:env_not_clear] ).result( binding )
106
+ print @strs[:initenv][:continue_question]
107
+ exit unless yesno
108
+ end
109
+ unless env_empty
110
+ puts ERB.new( @strs[:initenv][:env_not_empty] ).result( binding )
111
+ print @strs[:initenv][:continue_question]
112
+ exit unless yesno
113
+ end
114
+ end
115
+
116
+ require 'rsence/default_config'
117
+ default_config = Configuration.new(@args,true).config
118
+
119
+ config = {
120
+ :base_url => (@args[:base_url] or default_config[:base_url]),
121
+ :http_server => {
122
+ :port => (@args[:port] or default_config[:http_server][:port]),
123
+ :bind_address => (@args[:addr] or default_config[:http_server][:bind_address]),
124
+ :rack_require => (@args[:server] or default_config[:http_server][:rack_require])
125
+ },
126
+ :index_html => {
127
+ :title => (@args[:title] or default_config[:index_html][:title])
128
+ },
129
+ :database => {
130
+ :ses_db => (@args[:db] or default_config[:database][:ses_db])
131
+ }
132
+ }
133
+ Signal.trap 'INT' do
134
+ puts
135
+ puts "Configuration aborted."
136
+ exit
137
+ end
138
+ if interactive
139
+ answers_ok = false
140
+ until answers_ok
141
+ puts ERB.new( @strs[:initenv][:creating_env] ).result( binding )
142
+
143
+ require 'highline/import'
144
+
145
+ say @strs[:initenv][:enter_title]
146
+ str_project_title = @strs[:initenv][:project_title]
147
+ config[:index_html][:title] = ask( str_project_title ) do |q|
148
+ q.default = config[:index_html][:title]
149
+ end
150
+
151
+ say @strs[:initenv][:enter_db_url]
152
+ str_db_url = @strs[:initenv][:db_url]
153
+ config[:database][:ses_db] = ask(str_db_url) do |q|
154
+ q.default = config[:database][:ses_db]
155
+ end
156
+
157
+ say @strs[:initenv][:enter_http_port]
158
+ str_http_port = @strs[:initenv][:http_port]
159
+ config[:http_server][:port] = ask(str_http_port) do |q|
160
+ q.default = config[:http_server][:port]
161
+ end
162
+
163
+ say @strs[:initenv][:enter_tcp_ip]
164
+ str_tcp_ip = @strs[:initenv][:tcp_ip]
165
+ config[:http_server][:bind_address] = ask(str_tcp_ip) do |q|
166
+ q.default = config[:http_server][:bind_address]
167
+ end
168
+
169
+ say @strs[:initenv][:enter_root_dir]
170
+ str_root_dir = @strs[:initenv][:root_dir]
171
+ config[:base_url] = ask(str_root_dir) do |q|
172
+ q.default = config[:base_url]
173
+ end
174
+
175
+ test_url = "http://#{config[:http_server][:bind_address]}:#{config[:http_server][:port]}#{config[:base_url]}"
176
+ say ERB.new( @strs[:initenv][:config_summary] ).result( binding )
177
+ print @strs[:initenv][:confirm_config]
178
+ answers_ok = yesno(true)
179
+ end
180
+ else
181
+ test_url = "http://#{config[:http_server][:bind_address]}:#{config[:http_server][:port]}#{config[:base_url]}"
182
+ end
183
+
184
+ puts @strs[:initenv][:creating_dirs]
185
+ env_dir = @args[:env_path]
186
+ require 'fileutils'
187
+ FileUtils.mkdir_p( env_dir ) unless File.exists?( env_dir )
188
+ conf_dir = File.expand_path( 'conf', env_dir )
189
+ Dir.mkdir( conf_dir )
190
+ db_dir = File.expand_path( 'db', env_dir )
191
+ Dir.mkdir( db_dir )
192
+ log_dir = File.expand_path( 'log', env_dir )
193
+ Dir.mkdir( log_dir )
194
+ plugins_dir = File.expand_path( 'plugins', env_dir )
195
+ Dir.mkdir( plugins_dir )
196
+ run_dir = File.expand_path( 'run', env_dir )
197
+ Dir.mkdir( run_dir )
198
+ unless create_blank
199
+ print @strs[:initenv][:install_welcome]
200
+ if yesno
201
+ welcome_plugin_dir = File.join( SERVER_PATH, 'setup', 'welcome' )
202
+ welcome_plugin_dst = File.join( plugins_dir, 'welcome' )
203
+ puts ERB.new( @strs[:initenv][:installing_welcome_plugin] ).result( binding )
204
+ FileUtils.cp_r( welcome_plugin_dir, welcome_plugin_dst )
205
+ end
206
+ end
207
+ puts @strs[:initenv][:creating_files]
208
+ conf_file = File.join( conf_dir, 'config.yaml' )
209
+ File.open( conf_file, 'w' ) {|f| f.write( YAML.dump( config ) ) }
210
+ readme_file = File.join( env_dir, 'README' )
211
+ File.open( readme_file, 'w' ) {|f| f.write( ERB.new( @strs[:initenv][:readme] ).result( binding ) ) }
212
+ version_file = File.join( env_dir, 'VERSION' )
213
+ File.open( version_file, 'w' ) {|f| f.write( "RSence Environment Version #{version.to_f}" ) }
214
+ puts ERB.new( @strs[:initenv][:congratulations] ).result( binding )
215
+ exit
216
+ end
217
+ end
218
+ end
@@ -0,0 +1,92 @@
1
+ module RSence
2
+ module ArgvUtil
3
+ # Main argument parser for the save command. Sends the USR1 POSIX signal to the process, if running.
4
+ def parse_save_argv
5
+ init_args
6
+ expect_option = false
7
+ option_name = false
8
+ if @argv.length >= 2
9
+ @argv[1..-1].each_with_index do |arg,i|
10
+ if expect_option
11
+ if option_name == :conf_files
12
+ if not File.exists?( arg ) or not File.file?( arg )
13
+ puts ERB.new( @strs[:messages][:no_such_configuration_file] ).result( binding )
14
+ exit
15
+ else
16
+ @args[:conf_files].push( arg )
17
+ end
18
+ else
19
+ @args[option_name] = arg
20
+ end
21
+ expect_option = false
22
+ else
23
+ if arg.start_with?('--')
24
+ if arg == '--debug'
25
+ set_debug
26
+ elsif arg == '--verbose'
27
+ set_verbose
28
+ elsif arg == '--conf' or arg == '--config'
29
+ expect_option = true
30
+ option_name = :conf_files
31
+ else
32
+ invalid_option(arg)
33
+ end
34
+ elsif arg.start_with?('-')
35
+ arg.split('')[1..-1].each do |chr|
36
+ if chr == 'd'
37
+ set_debug
38
+ elsif chr == 'v'
39
+ set_verbose
40
+ else
41
+ invalid_option(arg,chr)
42
+ end
43
+ end
44
+ elsif valid_env?(arg)
45
+ @args[:env_path] = File.expand_path(arg)
46
+ @args[:conf_files].unshift( File.expand_path( File.join( arg, 'conf', 'config.yaml' ) ) )
47
+ else
48
+ invalid_env( arg )
49
+ end
50
+ end
51
+ end
52
+ if expect_option
53
+ puts ERB.new( @strs[:messages][:no_value_for_option] ).result( binding )
54
+ exit
55
+ end
56
+ end
57
+ if valid_env?(@args[:env_path])
58
+ conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
59
+ @args[:conf_files].unshift( conf_file ) unless @args[:conf_files].include?( conf_file )
60
+ else
61
+ invalid_env
62
+ end
63
+ require 'rsence/default_config'
64
+ config = Configuration.new(@args).config
65
+ if RSence.pid_support?
66
+ pid_fn = config[:daemon][:pid_fn]
67
+ if File.exists?( pid_fn )
68
+ pid = File.read( pid_fn ).to_i
69
+ saving_message = @strs[:messages][:saving_message]
70
+ pid_status = RSence::SIGComm.wait_signal_response(
71
+ pid, pid_fn, 'USR2', 30, saving_message, '.', 0.1, true
72
+ )
73
+ else
74
+ warn @strs[:messages][:no_pid_file] if @args[:verbose]
75
+ pid_status = nil
76
+ end
77
+ else
78
+ warn @strs[:messages][:no_pid_support] if @args[:verbose]
79
+ pid_status = nil
80
+ end
81
+ if RSence.pid_support?
82
+ if pid_status == nil
83
+ puts @strs[:messages][:no_pid_unable_to_save]
84
+ elsif pid_status == false
85
+ puts @strs[:messages][:no_process_running]
86
+ else
87
+ puts @strs[:messages][:session_data_saved]
88
+ end
89
+ end
90
+ end
91
+ end
92
+ end
@@ -0,0 +1,118 @@
1
+ module RSence
2
+ module ArgvUtil
3
+
4
+ # Main argument parser for all 'start' -type commands.
5
+ def parse_startup_argv
6
+ init_args
7
+ expect_option = false
8
+ option_name = false
9
+ if @argv.length >= 2
10
+ @argv[1..-1].each_with_index do |arg,i|
11
+ if expect_option
12
+ if [ :port, :latency, :http_delayed_start ].include?(option_name) and arg.to_i.to_s != arg
13
+ puts ERB.new( @strs[:messages][:invalid_option_expected_number] ).result( binding )
14
+ exit
15
+ elsif option_name == :conf_files
16
+ if not File.exists?( arg ) or not File.file?( arg )
17
+ puts ERB.new( @strs[:messages][:no_such_configuration_file] ).result( binding )
18
+ exit
19
+ else
20
+ @args[:conf_files].push( arg )
21
+ end
22
+ elsif option_name == :http_delayed_start
23
+ @args[:http_delayed_start] = arg.to_i
24
+ else
25
+ arg = arg.to_i if option_name == :latency
26
+ @args[option_name] = arg
27
+ end
28
+ expect_option = false
29
+ else
30
+ if arg.start_with?('--')
31
+ if arg == '--profile'
32
+ true
33
+ elsif arg == '--debug'
34
+ set_debug
35
+ elsif arg == '--verbose'
36
+ set_verbose
37
+ elsif arg == '--log-fg'
38
+ set_log_fg
39
+ elsif arg == '--trace-js'
40
+ @args[:trace_js] = true
41
+ elsif arg == '--trace-delegate'
42
+ @args[:trace_delegate] = true
43
+ elsif arg == '--port'
44
+ expect_option = true
45
+ option_name = :port
46
+ elsif arg == '--addr' or arg == '--bind'
47
+ expect_option = true
48
+ option_name = :addr
49
+ elsif arg == '--http-delayed-start' or arg == '--delayed-start'
50
+ expect_option = true
51
+ option_name = :http_delayed_start
52
+ elsif arg == '--server'
53
+ expect_option = true
54
+ option_name = :server
55
+ elsif arg == '--conf' or arg == '--config'
56
+ expect_option = true
57
+ option_name = :conf_files
58
+ elsif arg == '--reset-sessions'
59
+ set_reset_ses
60
+ elsif arg == '--auto-update'
61
+ set_autoupdate
62
+ elsif arg == '--latency'
63
+ expect_option = true
64
+ option_name = :latency
65
+ elsif arg == '--say'
66
+ set_say
67
+ elsif arg == '--disable-gzip'
68
+ @args[:client_pkg_no_gzip] = true
69
+ elsif arg == '--disable-obfuscation'
70
+ @args[:client_pkg_no_obfuscation] = true
71
+ elsif arg == '--disable-jsmin'
72
+ @args[:client_pkg_no_whitespace_removel] = true
73
+ elsif arg == '--build-report'
74
+ @args[:suppress_build_messages] = false
75
+ else
76
+ invalid_option(arg)
77
+ end
78
+ elsif arg.start_with?('-')
79
+ arg.split('')[1..-1].each do |chr|
80
+ if chr == 'd'
81
+ set_debug
82
+ elsif chr == 'v'
83
+ set_verbose
84
+ elsif chr == 'f'
85
+ set_log_fg
86
+ elsif chr == 'r'
87
+ set_reset_ses
88
+ elsif chr == 'a'
89
+ set_autoupdate
90
+ elsif chr == 'S'
91
+ set_say
92
+ else
93
+ invalid_option(arg,chr)
94
+ end
95
+ end
96
+ elsif valid_env?(arg)
97
+ @args[:env_path] = File.expand_path(arg)
98
+ @args[:conf_files].push( File.expand_path( File.join( arg, 'conf', 'config.yaml' ) ) )
99
+ else
100
+ invalid_env( arg )
101
+ end
102
+ end
103
+ end
104
+ if expect_option
105
+ puts ERB.new( @strs[:messages][:no_value_for_option] ).result( binding )
106
+ exit
107
+ end
108
+ end
109
+ if valid_env?(@args[:env_path])
110
+ conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
111
+ @args[:conf_files].unshift( conf_file ) unless @args[:conf_files].include?( conf_file )
112
+ else
113
+ invalid_env
114
+ end
115
+ @startable = true
116
+ end
117
+ end
118
+ end
@@ -0,0 +1,132 @@
1
+ module RSence
2
+ module ArgvUtil
3
+ # Main argument parser for the status command, sends the INFO (or PWR on linux) POSIX signal to
4
+ # the process, if running.
5
+ # Checks if the process responds on the port and address it's configured for.
6
+ def parse_status_argv
7
+ init_args
8
+ expect_option = false
9
+ option_name = false
10
+ if @argv.length >= 2
11
+ @argv[1..-1].each_with_index do |arg,i|
12
+ if expect_option
13
+ if [:port].include?(option_name) and arg.to_i.to_s != arg
14
+ puts ERB.new( @strs[:messages][:invalid_option_expected_number] ).result( binding )
15
+ exit
16
+ elsif option_name == :conf_files
17
+ if not File.exists?( arg ) or not File.file?( arg )
18
+ puts ERB.new( @strs[:messages][:no_such_configuration_file] ).result( binding )
19
+ exit
20
+ else
21
+ @args[:conf_files].push( arg )
22
+ end
23
+ else
24
+ @args[option_name] = arg
25
+ end
26
+ expect_option = false
27
+ else
28
+ if arg.start_with?('--')
29
+ if arg == '--debug'
30
+ set_debug
31
+ elsif arg == '--verbose'
32
+ set_verbose
33
+ elsif arg == '--port'
34
+ expect_option = true
35
+ option_name = :port
36
+ elsif arg == '--addr'
37
+ expect_option = true
38
+ option_name = :addr
39
+ elsif arg == '--conf' or arg == '--config'
40
+ expect_option = true
41
+ option_name = :conf_files
42
+ else
43
+ invalid_option(arg)
44
+ end
45
+ elsif arg.start_with?('-')
46
+ arg.split('')[1..-1].each do |chr|
47
+ if chr == 'd'
48
+ set_debug
49
+ elsif chr == 'v'
50
+ set_verbose
51
+ else
52
+ invalid_option(arg,chr)
53
+ end
54
+ end
55
+ elsif valid_env?(arg)
56
+ @args[:env_path] = File.expand_path(arg)
57
+ @args[:conf_files].unshift( File.expand_path( File.join( arg, 'conf', 'config.yaml' ) ) )
58
+ else
59
+ invalid_env( arg )
60
+ end
61
+ end
62
+ end
63
+ if expect_option
64
+ puts ERB.new( @strs[:messages][:no_value_for_option] ).result( binding )
65
+ exit
66
+ end
67
+ end
68
+ if valid_env?(@args[:env_path])
69
+ conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
70
+ @args[:conf_files].unshift( conf_file ) unless @args[:conf_files].include?( conf_file )
71
+ else
72
+ invalid_env
73
+ end
74
+ require 'rsence/default_config'
75
+ require 'socket'
76
+ config = Configuration.new(@args).config
77
+ port = config[:http_server][:port]
78
+ addr = config[:http_server][:bind_address]
79
+ port_status = []
80
+ if addr == '0.0.0.0' and Socket.respond_to?(:ip_address_list)
81
+ Socket.ip_address_list.each do |if_addr|
82
+ if test_port( port, if_addr.ip_address )
83
+ port_status.push( if_addr.ip_address )
84
+ end
85
+ end
86
+ else
87
+ port_status.push( addr )
88
+ end
89
+ addr_descr = port_status.join(":#{port}, ")+":#{port}"
90
+ if RSence.pid_support?
91
+ pid_fn = config[:daemon][:pid_fn]
92
+ if File.exists?( pid_fn )
93
+ pid = File.read( pid_fn ).to_i
94
+ sig_name = RSence.info_signal_name
95
+ pid_status = RSence::SIGComm.wait_signal_response(
96
+ pid, pid_fn, sig_name, 3
97
+ )
98
+ else
99
+ warn @strs[:messages][:no_pid_file] if @args[:verbose]
100
+ pid_status = nil
101
+ end
102
+ else
103
+ warn @strs[:messages][:no_pid_support] if @args[:verbose]
104
+ pid_status = nil
105
+ end
106
+ addr_descr = port_status.join(":#{port} and ")+":#{port}" unless port_status.empty?
107
+ if not RSence.pid_support? or pid_status == nil
108
+ if RSence.pid_support?
109
+ puts @strs[:messages][:no_pid]
110
+ else
111
+ puts @strs[:messages][:no_pid_support]
112
+ end
113
+ unless port_status.empty?
114
+ puts ERB.new( @strs[:messages][:something_responds] ).result( binding )
115
+ end
116
+ elsif pid_status == false
117
+ if port_status.empty?
118
+ puts ERB.new( @strs[:messages][:no_process_running_and_nothing_responds] ).result( binding )
119
+ else
120
+ puts ERB.new( @strs[:messages][:no_process_running_but_something_responds] ).result( binding )
121
+ end
122
+ else
123
+ if port_status.empty?
124
+ puts ERB.new( @strs[:messages][:process_running_but_nothing_responds] ).result( binding )
125
+ else
126
+ addr_descr = port_status.join(":#{port} and ")+":#{port}"
127
+ puts ERB.new( @strs[:messages][:process_running_and_responds] ).result( binding )
128
+ end
129
+ end
130
+ end
131
+ end
132
+ end