rsence 2.0.0.1.pre → 2.0.0.2.pre
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.
- data/VERSION +1 -1
- data/lib/conf/argv.rb +153 -48
- data/lib/daemon/daemon.rb +32 -58
- data/lib/daemon/sigcomm.rb +64 -0
- data/lib/http/broker.rb +3 -3
- data/lib/session/sessionmanager.rb +1 -1
- data/lib/session/sessionstorage.rb +7 -7
- data/lib/transporter/transporter.rb +9 -37
- data/plugins/client_pkg/client_pkg.rb +1 -1
- data/plugins/client_pkg/lib/client_pkg_build.rb +2 -17
- data/plugins/client_pkg/lib/client_pkg_serve.rb +2 -2
- data/plugins/main/main.rb +1 -1
- data/plugins/ticketservices/lib/common.rb +13 -13
- data/plugins/ticketservices/ticketservices.rb +6 -6
- metadata +3 -2
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.0.0.
|
1
|
+
2.0.0.2.pre
|
data/lib/conf/argv.rb
CHANGED
@@ -7,7 +7,7 @@
|
|
7
7
|
# with this software package. If not, contact licensing@riassence.com
|
8
8
|
##
|
9
9
|
#++
|
10
|
-
|
10
|
+
require 'daemon/sigcomm'
|
11
11
|
module RSence
|
12
12
|
def self.pid_support?
|
13
13
|
# true for non-windows
|
@@ -27,8 +27,8 @@ end
|
|
27
27
|
@@cmd_help = {}
|
28
28
|
|
29
29
|
@@cmd_help[:head] = <<-EOF
|
30
|
-
usage: rsence <command> [options] [args]
|
31
30
|
RSence command-line tool, version #{@@version}
|
31
|
+
|
32
32
|
EOF
|
33
33
|
|
34
34
|
@@cmd_help[:unknown] = "Unknown command: "
|
@@ -36,6 +36,8 @@ EOF
|
|
36
36
|
@@cmd_help[:help_help] = "Type 'rsence help' for usage."
|
37
37
|
|
38
38
|
@@cmd_help[:help_main] = <<-EOF
|
39
|
+
usage: rsence <command> [options] [args]
|
40
|
+
|
39
41
|
Type 'rsence help <command>' for help on a specific command.
|
40
42
|
|
41
43
|
Available commands:
|
@@ -200,16 +202,31 @@ Available options:
|
|
200
202
|
|
201
203
|
EOF
|
202
204
|
|
205
|
+
@@cmd_help[:save] = <<-EOF
|
206
|
+
usage: 'rsence save [options] [PATH]'
|
207
|
+
|
208
|
+
The 'save' command signals the RSence process to tell the plugins to save their
|
209
|
+
data and the session manager to save its session database.
|
210
|
+
|
211
|
+
Available options:
|
212
|
+
|
213
|
+
--conf <file.yaml> Use additional config file. You can give this option
|
214
|
+
several times. The <file.yaml> is the configuration
|
215
|
+
file to load.
|
216
|
+
|
217
|
+
--debug (-d) Debug mode. Shortcut for several options useful for
|
218
|
+
developers. Not the preferred mode for production.
|
219
|
+
|
220
|
+
--verbose (-v) More verbose output. Also enabled by --debug
|
221
|
+
|
222
|
+
#{@@cmd_help[:path]}
|
223
|
+
|
224
|
+
EOF
|
225
|
+
|
203
226
|
@@cmd_help[:tail] = <<-EOF
|
204
227
|
RSence is a self-contained rich internet application client-server framework.
|
205
228
|
For further information, see http://rsence.org/
|
206
229
|
EOF
|
207
|
-
|
208
|
-
def initialize( argv )
|
209
|
-
@argv = argv
|
210
|
-
@startable = false
|
211
|
-
parse_argv
|
212
|
-
end
|
213
230
|
|
214
231
|
def startable?; @startable; end
|
215
232
|
|
@@ -527,24 +544,16 @@ EOF
|
|
527
544
|
end
|
528
545
|
require 'conf/default'
|
529
546
|
config = Configuration.new(@args).config
|
530
|
-
# require 'daemon/daemon'
|
531
|
-
# puts "status: #{HTTPDaemon.daemonize.inspect}"
|
532
547
|
port = config[:http_server][:port]
|
533
548
|
addr = config[:http_server][:bind_address]
|
534
549
|
port_status = test_port( port, addr )
|
535
|
-
# port_msg = port_status ? 'responds' : 'does not respond'
|
536
|
-
# puts "TCP status: #{addr}:#{port} #{port_msg}" if @args[:verbose]
|
537
550
|
if RSence.pid_support?
|
538
551
|
pid_fn = config[:daemon][:pid_fn]
|
539
552
|
if File.exists?( pid_fn )
|
540
553
|
pid = File.read( pid_fn ).to_i
|
541
|
-
|
542
|
-
|
543
|
-
|
544
|
-
pid_status = false
|
545
|
-
end
|
546
|
-
# pid_msg = pid_status == false ? 'not running' : 'responds'
|
547
|
-
# puts "process id (#{pid}) #{pid_msg}" if @args[:verbose]
|
554
|
+
pid_status = RSence::SIGComm.wait_signal_response(
|
555
|
+
pid, pid_fn, 'USR2', 3
|
556
|
+
)
|
548
557
|
else
|
549
558
|
puts "no PID file, unable to check process status" if @args[:verbose]
|
550
559
|
pid_status = nil
|
@@ -553,24 +562,109 @@ EOF
|
|
553
562
|
puts "no PID support, unable to check process status" if @args[:verbose]
|
554
563
|
pid_status = nil
|
555
564
|
end
|
556
|
-
if port_status
|
557
|
-
puts "TCP response from #{addr} port #{port}"
|
558
|
-
else
|
559
|
-
puts "No TCP response from #{addr} port #{port}."
|
560
|
-
end
|
561
565
|
if RSence.pid_support?
|
562
566
|
if pid_status == nil
|
563
567
|
puts "No process id, unable to check process status."
|
564
568
|
elsif pid_status == false
|
565
|
-
puts "No process running."
|
569
|
+
puts "No process running#{port_status ? ' but something responds on ' : ' and nothing responds on ' }#{addr}:#{port}."
|
566
570
|
else
|
567
|
-
puts "Process id #{pid}
|
571
|
+
puts "Process id #{pid} is running#{port_status ? ' and responds on ' : ', but does not respond on '}#{addr}:#{port}."
|
568
572
|
end
|
569
573
|
end
|
570
574
|
end
|
571
575
|
|
572
576
|
def parse_save_argv
|
573
|
-
|
577
|
+
init_args
|
578
|
+
expect_option = false
|
579
|
+
option_name = false
|
580
|
+
if @argv.length >= 2
|
581
|
+
@argv[1..-1].each_with_index do |arg,i|
|
582
|
+
if expect_option
|
583
|
+
if [:port,:latency].include?(option_name) and arg.to_i.to_s != arg
|
584
|
+
puts "invalid #{option_nam.to_s}, expected number: #{arg.inspect}"
|
585
|
+
puts "Type 'rsence help #{@cmd.to_s}' for usage."
|
586
|
+
exit
|
587
|
+
elsif option_name == :conf_files
|
588
|
+
if not File.exists?( arg ) or not File.file?( arg )
|
589
|
+
puts "no such configuration file: #{arg.inspect}"
|
590
|
+
puts "Type 'rsence help #{@cmd.to_s}' for usage."
|
591
|
+
exit
|
592
|
+
else
|
593
|
+
@args[:conf_files].push( arg )
|
594
|
+
end
|
595
|
+
else
|
596
|
+
@args[option_name] = arg
|
597
|
+
end
|
598
|
+
expect_option = false
|
599
|
+
else
|
600
|
+
if arg.start_with?('--')
|
601
|
+
if arg == '--debug'
|
602
|
+
set_debug
|
603
|
+
elsif arg == '--verbose'
|
604
|
+
set_verbose
|
605
|
+
elsif arg == '--conf' or arg == '--config'
|
606
|
+
expect_option = true
|
607
|
+
option_name = :conf_files
|
608
|
+
else
|
609
|
+
invalid_option(arg)
|
610
|
+
end
|
611
|
+
elsif arg.start_with?('-')
|
612
|
+
arg.split('')[1..-1].each do |chr|
|
613
|
+
if chr == 'd'
|
614
|
+
set_debug
|
615
|
+
elsif chr == 'v'
|
616
|
+
set_verbose
|
617
|
+
else
|
618
|
+
invalid_option(arg,chr)
|
619
|
+
end
|
620
|
+
end
|
621
|
+
elsif valid_env?(arg)
|
622
|
+
@args[:env_path] = File.expand_path(arg)
|
623
|
+
@args[:conf_files].push( File.expand_path( File.join( arg, 'conf', 'config.yaml' ) ) )
|
624
|
+
else
|
625
|
+
invalid_env( arg )
|
626
|
+
end
|
627
|
+
end
|
628
|
+
end
|
629
|
+
if expect_option
|
630
|
+
puts "no value for option #{option_name.to_s.inspect}"
|
631
|
+
puts "Type 'rsence help #{@cmd.to_s} for usage."
|
632
|
+
exit
|
633
|
+
end
|
634
|
+
end
|
635
|
+
if valid_env?(@args[:env_path])
|
636
|
+
conf_file = File.expand_path( File.join( @args[:env_path], 'conf', 'config.yaml' ) )
|
637
|
+
@args[:conf_files].push( conf_file ) unless @args[:conf_files].include?( conf_file )
|
638
|
+
else
|
639
|
+
puts "invalid environment."
|
640
|
+
exit
|
641
|
+
end
|
642
|
+
require 'conf/default'
|
643
|
+
config = Configuration.new(@args).config
|
644
|
+
if RSence.pid_support?
|
645
|
+
pid_fn = config[:daemon][:pid_fn]
|
646
|
+
if File.exists?( pid_fn )
|
647
|
+
pid = File.read( pid_fn ).to_i
|
648
|
+
pid_status = RSence::SIGComm.wait_signal_response(
|
649
|
+
pid, pid_fn, 'USR1', 30, 'Saving session data...', '.', 0.1, true
|
650
|
+
)
|
651
|
+
else
|
652
|
+
puts "no PID file, unable to signal the save command to the process" if @args[:verbose]
|
653
|
+
pid_status = nil
|
654
|
+
end
|
655
|
+
else
|
656
|
+
puts "no PID support, unable to signal the save command to the process" if @args[:verbose]
|
657
|
+
pid_status = nil
|
658
|
+
end
|
659
|
+
if RSence.pid_support?
|
660
|
+
if pid_status == nil
|
661
|
+
puts "No process id, unable to signal the save command to the process."
|
662
|
+
elsif pid_status == false
|
663
|
+
puts "No process running."
|
664
|
+
else
|
665
|
+
puts "Session data saved."
|
666
|
+
end
|
667
|
+
end
|
574
668
|
end
|
575
669
|
|
576
670
|
def parse_setup_argv
|
@@ -581,6 +675,29 @@ EOF
|
|
581
675
|
throw "parse_initenv_argv not implemented!"
|
582
676
|
end
|
583
677
|
|
678
|
+
def help( cmd )
|
679
|
+
cmd.to_sym! if cmd.class != Symbol
|
680
|
+
puts @@cmd_help[:head]
|
681
|
+
if @@cmd_help.has_key?(cmd)
|
682
|
+
puts @@cmd_help[cmd]
|
683
|
+
else
|
684
|
+
puts @@cmd_help[:help_main]
|
685
|
+
end
|
686
|
+
puts @@cmd_help[:tail]
|
687
|
+
end
|
688
|
+
|
689
|
+
def version
|
690
|
+
@@version
|
691
|
+
end
|
692
|
+
|
693
|
+
def cmd
|
694
|
+
@cmd
|
695
|
+
end
|
696
|
+
|
697
|
+
def args
|
698
|
+
@args
|
699
|
+
end
|
700
|
+
|
584
701
|
def parse_argv
|
585
702
|
if @argv.empty?
|
586
703
|
puts @@cmd_help[:help_help]
|
@@ -614,37 +731,23 @@ EOF
|
|
614
731
|
end
|
615
732
|
end
|
616
733
|
|
617
|
-
def
|
618
|
-
|
619
|
-
|
620
|
-
|
621
|
-
puts @@cmd_help[cmd]
|
622
|
-
else
|
623
|
-
puts @@cmd_help[:help_main]
|
624
|
-
end
|
625
|
-
puts @@cmd_help[:tail]
|
626
|
-
end
|
627
|
-
|
628
|
-
def version
|
629
|
-
puts @@version
|
630
|
-
end
|
631
|
-
|
632
|
-
def cmd
|
633
|
-
@cmd
|
734
|
+
def parse( argv )
|
735
|
+
@argv = argv
|
736
|
+
@startable = false
|
737
|
+
parse_argv
|
634
738
|
end
|
635
739
|
|
636
|
-
def
|
637
|
-
@
|
740
|
+
def initialize
|
741
|
+
@startable = false
|
638
742
|
end
|
639
743
|
|
640
744
|
end
|
641
745
|
|
642
|
-
@@argv_parser = ARGVParser.new( ARGV )
|
643
|
-
|
644
746
|
def self.argv; @@argv_parser; end
|
645
747
|
def self.cmd; @@argv_parser.cmd; end
|
646
748
|
def self.args; @@argv_parser.args; end
|
647
749
|
def self.startable?; @@argv_parser.startable?; end
|
750
|
+
def self.version; @@argv_parser.version; end
|
648
751
|
def self.startup
|
649
752
|
puts "Loading configuration..." if self.args[:verbose]
|
650
753
|
# Use the default configuration:
|
@@ -659,6 +762,8 @@ def self.startup
|
|
659
762
|
daemon = HTTPDaemon.new
|
660
763
|
daemon.daemonize!
|
661
764
|
end
|
765
|
+
@@argv_parser = ARGVParser.new
|
766
|
+
@@argv_parser.parse( ARGV )
|
662
767
|
|
663
768
|
end
|
664
769
|
|
data/lib/daemon/daemon.rb
CHANGED
@@ -34,9 +34,6 @@ RSence.config[:http_server][:rack_handler] = self.method({
|
|
34
34
|
'rainbows' => :rack_rainbows_handler
|
35
35
|
}[RSence.config[:http_server][:rack_require]]).call
|
36
36
|
|
37
|
-
# Debug mode switch. The debug mode is intended for developers, not production.
|
38
|
-
$DEBUG_MODE = RSence.config[:debug_mode]
|
39
|
-
|
40
37
|
# Transporter is the top-level handler for calls coming from the javascript COMM.Transporter.
|
41
38
|
require 'transporter/transporter'
|
42
39
|
|
@@ -92,53 +89,21 @@ module Daemon
|
|
92
89
|
end
|
93
90
|
|
94
91
|
def self.write_signal_response( daemon, signal )
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
end
|
92
|
+
pid = Process.pid.to_s
|
93
|
+
pid_fn = daemon.pid_fn
|
94
|
+
RSence::SIGComm.write_signal_response( pid, pid_fn, signal )
|
99
95
|
end
|
100
96
|
|
101
97
|
def self.delete_signal_response( daemon, signal )
|
102
|
-
|
103
|
-
|
104
|
-
File.delete( sig_fn )
|
105
|
-
end
|
98
|
+
pid_fn = daemon.pid_fn
|
99
|
+
RSence::SIGComm.delete_signal_response( pid_fn )
|
106
100
|
end
|
107
101
|
|
108
102
|
def self.wait_signal_response( daemon, signal, timeout = 10,
|
109
|
-
debug_pre =
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
STDOUT.flush
|
114
|
-
end
|
115
|
-
pid = read_pid( daemon )
|
116
|
-
sig_fn = daemon.pid_fn+'.response.'+signal
|
117
|
-
File.delete( sig_fn ) if File.file?( sig_fn )
|
118
|
-
status = Process.kill( signal, pid )
|
119
|
-
time_out = Time.now + timeout
|
120
|
-
until time_out > Time.now or File.file?( sig_fn )
|
121
|
-
if RSence.args[:verbose]
|
122
|
-
print "."
|
123
|
-
STDOUT.flush
|
124
|
-
end
|
125
|
-
sleep sleep_secs
|
126
|
-
end
|
127
|
-
sleep sleep_secs
|
128
|
-
if File.file?( sig_fn )
|
129
|
-
sig_pid = File.read( sig_fn ).to_i
|
130
|
-
if sig_pid != pid
|
131
|
-
puts "Warning, signal PID mismatch. Expected #{pid}, got #{sig_pid}"
|
132
|
-
end
|
133
|
-
File.delete( sig_fn )
|
134
|
-
else
|
135
|
-
puts "Warning, signal response file disappeared! Expected #{sig_fn}"
|
136
|
-
end
|
137
|
-
puts debug_suf if RSence.args[:verbose]
|
138
|
-
return true
|
139
|
-
rescue Errno::ESRCH
|
140
|
-
return false
|
141
|
-
end
|
103
|
+
debug_pre = false, debug_suf = false, sleep_secs = 0.2 )
|
104
|
+
pid = read_pid( daemon )
|
105
|
+
pid_fn = daemon.pid_fn
|
106
|
+
return RSence::SIGComm.wait_signal_response( pid, pid_fn, signal, timeout, debug_pre, debug_suf, sleep_secs )
|
142
107
|
end
|
143
108
|
|
144
109
|
# Traps common kill signals
|
@@ -158,20 +123,30 @@ module Daemon
|
|
158
123
|
puts "RSence killed with signal #{signal.inspect}" if RSence.args[:verbose]
|
159
124
|
daemon.usr1
|
160
125
|
daemon.stop
|
161
|
-
|
162
|
-
# delete_signal_response( daemon, 'USR2' )
|
163
|
-
File.delete( daemon.pid_fn ) if File.file?( daemon.pid_fn )
|
126
|
+
delete_stale_pids( daemon )
|
164
127
|
write_signal_response( daemon, signal )
|
165
128
|
puts "Shutdown complete."
|
166
129
|
exit
|
167
130
|
end
|
168
131
|
end
|
169
|
-
|
170
|
-
|
171
|
-
|
132
|
+
Signal.trap('HUP') do
|
133
|
+
daemon.stop
|
134
|
+
daemon.start
|
135
|
+
end
|
136
|
+
end
|
137
|
+
|
138
|
+
def self.delete_stale_pids( daemon )
|
139
|
+
( pid_fn_path, pid_fn_name ) = File.split( daemon.pid_fn )
|
140
|
+
Dir.entries( pid_fn_path ).each do | item_fn |
|
141
|
+
item_path = File.join( pid_fn_path, item_fn )
|
142
|
+
if item_fn.start_with?( pid_fn_name ) and File.file?( item_path )
|
143
|
+
puts "Stale pid file (#{item_fn}), removing.." if RSence.args[:verbose]
|
144
|
+
File.delete( item_path )
|
145
|
+
end
|
146
|
+
end
|
172
147
|
end
|
173
148
|
|
174
|
-
def self.
|
149
|
+
def self.init_pid( daemon )
|
175
150
|
if RSence.pid_support?
|
176
151
|
is_running = status( daemon )
|
177
152
|
if is_running
|
@@ -181,9 +156,8 @@ module Daemon
|
|
181
156
|
Process.kill( 'INT', RSence.launch_pid )
|
182
157
|
end
|
183
158
|
exit
|
184
|
-
elsif not is_running
|
185
|
-
|
186
|
-
File.delete( daemon.pid_fn )
|
159
|
+
elsif not is_running
|
160
|
+
delete_stale_pids( daemon )
|
187
161
|
end
|
188
162
|
trap_signals( daemon )
|
189
163
|
pid = Process.pid
|
@@ -195,7 +169,7 @@ module Daemon
|
|
195
169
|
end
|
196
170
|
|
197
171
|
def self.run( daemon )
|
198
|
-
|
172
|
+
init_pid( daemon )
|
199
173
|
daemon.run
|
200
174
|
exit
|
201
175
|
end
|
@@ -203,7 +177,7 @@ module Daemon
|
|
203
177
|
def self.start( daemon )
|
204
178
|
fork do
|
205
179
|
exit if fork
|
206
|
-
|
180
|
+
init_pid( daemon )
|
207
181
|
daemon.start
|
208
182
|
end
|
209
183
|
Signal.trap('INT') do
|
@@ -248,7 +222,7 @@ module Daemon
|
|
248
222
|
puts "RSence might still be running, please ensure manually."
|
249
223
|
end
|
250
224
|
elsif status_ == false
|
251
|
-
puts "Warning, no such process (#{
|
225
|
+
puts "Warning, no such process (#{read_pid(daemon)}) running."
|
252
226
|
elsif status_ == nil
|
253
227
|
puts "Warning, no pid file (process not running)."
|
254
228
|
else
|
@@ -366,7 +340,7 @@ class HTTPDaemon
|
|
366
340
|
|
367
341
|
# Called on USR2 signals ("Alive?")
|
368
342
|
def usr2
|
369
|
-
puts "
|
343
|
+
puts "#{Time.now.strftime('%Y-%m-%d %H:%M:%S')} -- RSence version #{RSence.version} is running."
|
370
344
|
end
|
371
345
|
|
372
346
|
# Main entry point, daemonizes itself using Controller.
|
@@ -0,0 +1,64 @@
|
|
1
|
+
#--
|
2
|
+
## Riassence Framework
|
3
|
+
# Copyright 2010 Riassence Inc.
|
4
|
+
# http://riassence.com/
|
5
|
+
#
|
6
|
+
# You should have received a copy of the GNU General Public License along
|
7
|
+
# with this software package. If not, contact licensing@riassence.com
|
8
|
+
##
|
9
|
+
#++
|
10
|
+
|
11
|
+
# RSence async signal communication handler, uses temporary files for communication.
|
12
|
+
# Utilized by ARGVParser and Daemon.
|
13
|
+
|
14
|
+
module RSence
|
15
|
+
module SIGComm
|
16
|
+
def self.delete_signal_response( pid_fn )
|
17
|
+
sig_fn = pid_fn+'.response.'+signal
|
18
|
+
if File.file?( sig_fn )
|
19
|
+
File.delete( sig_fn )
|
20
|
+
end
|
21
|
+
end
|
22
|
+
def self.write_signal_response( pid, pid_fn, signal )
|
23
|
+
sig_fn = pid_fn+'.response.'+signal
|
24
|
+
File.open(sig_fn,'w') do |file|
|
25
|
+
file.write( pid.to_s )
|
26
|
+
end
|
27
|
+
end
|
28
|
+
def self.wait_signal_response( pid, pid_fn, signal, timeout = 10,
|
29
|
+
debug_pre = false, debug_suf = false,
|
30
|
+
sleep_secs = 0.2, verbose=nil )
|
31
|
+
sig_fn = pid_fn+'.response.'+signal
|
32
|
+
verbose = RSence.args[:verbose] if verbose == nil
|
33
|
+
begin
|
34
|
+
if verbose and debug_pre
|
35
|
+
print debug_pre
|
36
|
+
end
|
37
|
+
File.delete( sig_fn ) if File.exists?( sig_fn )
|
38
|
+
status = Process.kill( signal, pid )
|
39
|
+
time_out = Time.now + timeout
|
40
|
+
until (time_out < Time.now) or File.exists?( sig_fn )
|
41
|
+
if verbose
|
42
|
+
print "."
|
43
|
+
STDOUT.flush
|
44
|
+
end
|
45
|
+
sleep sleep_secs
|
46
|
+
end
|
47
|
+
if File.file?( sig_fn )
|
48
|
+
sig_pid = File.read( sig_fn ).to_i
|
49
|
+
if sig_pid != pid
|
50
|
+
puts "Warning, signal PID mismatch. Expected #{pid}, got #{sig_pid}"
|
51
|
+
end
|
52
|
+
File.delete( sig_fn )
|
53
|
+
else
|
54
|
+
puts "Warning, signal response file disappeared! Expected #{sig_fn}"
|
55
|
+
end
|
56
|
+
puts debug_suf if verbose and debug_suf
|
57
|
+
return true
|
58
|
+
rescue Errno::ESRCH
|
59
|
+
return false
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
data/lib/http/broker.rb
CHANGED
@@ -66,7 +66,7 @@ class Broker
|
|
66
66
|
end
|
67
67
|
|
68
68
|
def not_found
|
69
|
-
puts "/404: #{@request.fullpath.inspect}" if
|
69
|
+
puts "/404: #{@request.fullpath.inspect}" if RSence.args[:verbose]
|
70
70
|
@response.status = 404
|
71
71
|
err404 = '<html><head><title>404 - Page Not Found</title></head><body>404 - Page Not Found</body></html>'
|
72
72
|
@response['content-type'] = 'text/html; charset=UTF-8'
|
@@ -77,7 +77,7 @@ class Broker
|
|
77
77
|
## Post requests are always xhr requests
|
78
78
|
def post
|
79
79
|
|
80
|
-
puts "post: #{@request.fullpath}" if
|
80
|
+
puts "post: #{@request.fullpath}" if RSence.args[:verbose]
|
81
81
|
|
82
82
|
sleep @@ping_sim if @@ping_sim
|
83
83
|
|
@@ -88,7 +88,7 @@ class Broker
|
|
88
88
|
## Get requests are different, depending on the uri requested
|
89
89
|
def get
|
90
90
|
|
91
|
-
puts "get: #{@request.fullpath}" if
|
91
|
+
puts "get: #{@request.fullpath}" if RSence.args[:verbose]
|
92
92
|
|
93
93
|
sleep @@ping_sim if @@ping_sim
|
94
94
|
|
@@ -362,7 +362,7 @@ class SessionManager < SessionStorage
|
|
362
362
|
end
|
363
363
|
|
364
364
|
if domain == 'localhost'
|
365
|
-
|
365
|
+
warn "Warning: Cookies won't be set for 'localhost'. Use '127.0.0.1' instead." if RSence.args[:debug]
|
366
366
|
return
|
367
367
|
end
|
368
368
|
|
@@ -101,7 +101,7 @@ class SessionStorage
|
|
101
101
|
def create_session_table
|
102
102
|
db_open
|
103
103
|
unless @db.table_exists?(:rsence_session)
|
104
|
-
puts "Creating session table..." if
|
104
|
+
puts "Creating session table..." if RSence.args[:verbose]
|
105
105
|
@db.create_table :rsence_session do
|
106
106
|
primary_key( :id )
|
107
107
|
column( :cookie_key, String )
|
@@ -121,7 +121,7 @@ class SessionStorage
|
|
121
121
|
def create_version_table
|
122
122
|
db_open
|
123
123
|
unless @db.table_exists?(:rsence_version)
|
124
|
-
puts "Creating version info table..." if
|
124
|
+
puts "Creating version info table..." if RSence.args[:verbose]
|
125
125
|
@db.create_table :rsence_version do
|
126
126
|
Integer :version
|
127
127
|
end
|
@@ -135,7 +135,7 @@ class SessionStorage
|
|
135
135
|
def create_uploads_table
|
136
136
|
db_open
|
137
137
|
unless @db.table_exists?(:rsence_uploads)
|
138
|
-
puts "Creating uploads table..." if
|
138
|
+
puts "Creating uploads table..." if RSence.args[:verbose]
|
139
139
|
@db.create_table :rsence_uploads do
|
140
140
|
primary_key( :id )
|
141
141
|
foreign_key( :ses_id, :rsence_session )
|
@@ -189,7 +189,7 @@ class SessionStorage
|
|
189
189
|
|
190
190
|
## Restores all saved sessions from db to ram
|
191
191
|
def restore_sessions
|
192
|
-
puts "Restoring sessions..." if
|
192
|
+
puts "Restoring sessions..." if RSence.args[:verbose]
|
193
193
|
db_open
|
194
194
|
@db[:rsence_session].all do |ses_row|
|
195
195
|
ses_id = ses_row[:id]
|
@@ -211,7 +211,7 @@ class SessionStorage
|
|
211
211
|
|
212
212
|
## Stores all sessions to db from ram
|
213
213
|
def store_sessions
|
214
|
-
puts "Storing sessions..." if
|
214
|
+
puts "Storing sessions..." if RSence.args[:verbose]
|
215
215
|
db_open
|
216
216
|
@sessions.each_key do |ses_id|
|
217
217
|
ses_data = @sessions[ ses_id ]
|
@@ -233,9 +233,9 @@ class SessionStorage
|
|
233
233
|
## Shut-down signal, triggers store_sessions for now
|
234
234
|
def shutdown
|
235
235
|
@accept_requests = false
|
236
|
-
puts "Session shutdown in progress..." if
|
236
|
+
puts "Session shutdown in progress..." if RSence.args[:verbose]
|
237
237
|
store_sessions
|
238
|
-
puts "Session shutdown complete." if
|
238
|
+
puts "Session shutdown complete." if RSence.args[:verbose]
|
239
239
|
end
|
240
240
|
|
241
241
|
|
@@ -33,7 +33,7 @@ class Transporter
|
|
33
33
|
|
34
34
|
@valuemanager = ValueManager.new
|
35
35
|
@sessions = SessionManager.new( self )
|
36
|
-
@plugins = PluginManager.new( ::RSence.config[:plugin_paths], self,
|
36
|
+
@plugins = PluginManager.new( ::RSence.config[:plugin_paths], self, RSence.args[:autoreload] )
|
37
37
|
if RSence.launch_pid != Process.pid
|
38
38
|
Process.kill( 'TERM', RSence.launch_pid )
|
39
39
|
end
|
@@ -42,25 +42,6 @@ class Transporter
|
|
42
42
|
def servlet( request_type, request, response )
|
43
43
|
broker_urls = ::RSence.config[:broker_urls]
|
44
44
|
uri = request.fullpath
|
45
|
-
# if $DEBUG_MODE and uri == $config[:index_html][:respond_address] and request_type == :get
|
46
|
-
# unless ARGV.include?('-no-rescan') or ARGV.include?('--no-rescan')
|
47
|
-
# puts "Reloading plugins."
|
48
|
-
# if RSence.args[:say]
|
49
|
-
# Thread.new do
|
50
|
-
# Thread.pass
|
51
|
-
# system('say "Reloading plugins."')
|
52
|
-
# end
|
53
|
-
# end
|
54
|
-
# @plugins.rescan
|
55
|
-
# puts "Plugins reloaded."
|
56
|
-
# if RSence.args[:say]
|
57
|
-
# Thread.new do
|
58
|
-
# Thread.pass
|
59
|
-
# system('say "Plugins reloaded."')
|
60
|
-
# end
|
61
|
-
# end
|
62
|
-
# end
|
63
|
-
# end
|
64
45
|
|
65
46
|
if request_type == :post
|
66
47
|
## /x handles xhr without cookies
|
@@ -74,10 +55,6 @@ class Transporter
|
|
74
55
|
else
|
75
56
|
session = {}
|
76
57
|
return @plugins.match_servlet( request_type, request, response, session )
|
77
|
-
## /SOAP handles SOAP Requests
|
78
|
-
# elsif uri == broker_urls[:soap]
|
79
|
-
# soap( request, response )
|
80
|
-
# return true
|
81
58
|
end
|
82
59
|
else
|
83
60
|
session = {}
|
@@ -85,11 +62,6 @@ class Transporter
|
|
85
62
|
end
|
86
63
|
end
|
87
64
|
|
88
|
-
## handles incoming SOAP requests
|
89
|
-
# def soap(request, response)
|
90
|
-
# PluginManager.soap( request, response )
|
91
|
-
# end
|
92
|
-
|
93
65
|
# wrapper for the session manager stop client functionality
|
94
66
|
def xhr_error_handler(msg,err_name,err_extra_descr='')
|
95
67
|
@sessions.stop_client_with_message( msg,
|
@@ -101,9 +73,9 @@ class Transporter
|
|
101
73
|
|
102
74
|
# wrapper for tracebacks in xhr
|
103
75
|
def xhr_traceback_handler(e,err_descr='Transporter::UnspecifiedError')
|
104
|
-
puts "=="*40 if
|
76
|
+
puts "=="*40 if RSence.args[:debug]
|
105
77
|
puts err_descr
|
106
|
-
if
|
78
|
+
if RSence.args[:debug]
|
107
79
|
puts "--"*40
|
108
80
|
puts e.message
|
109
81
|
puts " #{e.backtrace.join("\n ")}"
|
@@ -131,7 +103,7 @@ class Transporter
|
|
131
103
|
if request.query.has_key?('err_msg')
|
132
104
|
response_success = false
|
133
105
|
client_error_msg = request.query['err_msg'].inspect
|
134
|
-
puts "\nCLIENT ERROR:\n#{client_error_msg}\n" if
|
106
|
+
puts "\nCLIENT ERROR:\n#{client_error_msg}\n" if RSence.args[:debug]
|
135
107
|
xhr_error_handler(msg,:client_error,client_error_msg)
|
136
108
|
end
|
137
109
|
|
@@ -144,11 +116,11 @@ class Transporter
|
|
144
116
|
msg.reply("COMM.Transporter.url=#{::RSence.config[:broker_urls][:x].to_json};")
|
145
117
|
end
|
146
118
|
|
147
|
-
# Appends a 'new session.' message for new sessions in
|
148
|
-
puts "new session." if msg.new_session and
|
149
|
-
puts "restored session." if msg.restored_session and
|
150
|
-
puts "clone source." if msg.cloned_targets and
|
151
|
-
puts "clone target." if msg.cloned_source and
|
119
|
+
# Appends a 'new session.' message for new sessions in RSence.args[:verbose]:
|
120
|
+
puts "new session." if msg.new_session and RSence.args[:verbose]
|
121
|
+
puts "restored session." if msg.restored_session and RSence.args[:verbose]
|
122
|
+
puts "clone source." if msg.cloned_targets and RSence.args[:verbose]
|
123
|
+
puts "clone target." if msg.cloned_source and RSence.args[:verbose]
|
152
124
|
|
153
125
|
## Pass the client XML to the value manager
|
154
126
|
if request.query.has_key?( 'values' )
|
@@ -320,8 +320,6 @@ class ClientPkgBuild
|
|
320
320
|
minimize_data
|
321
321
|
build_themes
|
322
322
|
|
323
|
-
#save_file( File.join( @js_dst_dir, 'built' ), Time.now.to_i.to_s )
|
324
|
-
|
325
323
|
end
|
326
324
|
|
327
325
|
def setup_dirs
|
@@ -498,8 +496,8 @@ class ClientPkgBuild
|
|
498
496
|
@no_obfuscation = config[:no_obfuscation]
|
499
497
|
@no_whitespace_removal = config[:no_whitespace_removal]
|
500
498
|
@js_inc = config[:js_inc]
|
501
|
-
@debug = (not
|
502
|
-
@quiet = (not
|
499
|
+
@debug = (not RSence.args[:debug])
|
500
|
+
@quiet = (not RSence.args[:verbose])
|
503
501
|
end
|
504
502
|
|
505
503
|
def find_newer( src_dir, newer_than )
|
@@ -529,19 +527,6 @@ class ClientPkgBuild
|
|
529
527
|
return false
|
530
528
|
end
|
531
529
|
|
532
|
-
##def autorun
|
533
|
-
## while true
|
534
|
-
## newest = read_file( File.join( @js_dst_dir, 'built' ) ).to_i
|
535
|
-
## @logger.log( "waiting for changes..." )
|
536
|
-
## until bundle_changes( newest )
|
537
|
-
## sleep 3
|
538
|
-
## end
|
539
|
-
## flush
|
540
|
-
## run
|
541
|
-
## `say "Autobuild complete!"` if RSence.args[:say]
|
542
|
-
## end
|
543
|
-
##end
|
544
|
-
|
545
530
|
def print_stat( package_name, dst_size, jsc_size, gz_size )
|
546
531
|
percent = 'n/a'
|
547
532
|
if dst_size > 0
|
@@ -154,14 +154,14 @@ module ClientPkgServe
|
|
154
154
|
if not has_theme
|
155
155
|
response.status = 404
|
156
156
|
response.body = '404 - Theme Not Found'
|
157
|
-
puts "Theme #{theme_name} not found, avail: #{@client_cache.theme_cache.keys.join(', ')}" if
|
157
|
+
puts "Theme #{theme_name} not found, avail: #{@client_cache.theme_cache.keys.join(', ')}" if RSence.args[:verbose]
|
158
158
|
elsif not has_theme_part
|
159
159
|
response.status = 503
|
160
160
|
response.body = '503 - Invalid Theme Part Request'
|
161
161
|
elsif not has_theme_file
|
162
162
|
response.status = 404
|
163
163
|
response.body = '404 - Theme Resource Not Found'
|
164
|
-
puts "File not found, avail: #{@client_cache.theme_cache[theme_name][theme_part].keys.join(', ')}" if
|
164
|
+
puts "File not found, avail: #{@client_cache.theme_cache[theme_name][theme_part].keys.join(', ')}" if RSence.args[:verbose]
|
165
165
|
else
|
166
166
|
|
167
167
|
response.status = 200
|
data/plugins/main/main.rb
CHANGED
@@ -154,7 +154,7 @@ class Main < Plugin
|
|
154
154
|
until time_taken > 0.2 or ses[:delayed_calls].size == 0 or call_count == 0
|
155
155
|
# gets the next call
|
156
156
|
delayed_call = ses[:delayed_calls].shift
|
157
|
-
if
|
157
|
+
if RSence.args[:debug]
|
158
158
|
puts "delayed_call: #{delayed_call.inspect}"
|
159
159
|
end
|
160
160
|
# strings are always javascript, used for segmenting client load
|
@@ -43,7 +43,7 @@ module Common
|
|
43
43
|
|
44
44
|
# checks, that the format is a supported image type
|
45
45
|
unless @content_types.keys.include?( format )
|
46
|
-
puts "ImgServe.serve: invalid format (#{format.inspect})" if
|
46
|
+
puts "ImgServe.serve: invalid format (#{format.inspect})" if RSence.args[:verbose]
|
47
47
|
return File.join(::RSence.config[:broker_urls][:i],'invalid.gif')
|
48
48
|
end
|
49
49
|
|
@@ -150,18 +150,18 @@ module Common
|
|
150
150
|
img_id = req.unparsed_uri.match(/^#{::RSence.config[:broker_urls][:i]}(.*)$/)[1]
|
151
151
|
|
152
152
|
if img_id == nil
|
153
|
-
puts "ImgServe.fetch_img: invalid uri#1 (#{req.unparsed_uri.inspect})" if
|
153
|
+
puts "ImgServe.fetch_img: invalid uri#1 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
154
154
|
img_id = 'invalid.gif'
|
155
155
|
end
|
156
156
|
|
157
157
|
img_id = img_id.split('.')[0]
|
158
158
|
|
159
159
|
if img_id == nil
|
160
|
-
puts "ImgServe.fetch_img: invalid uri#2 (#{req.unparsed_uri.inspect})" if
|
160
|
+
puts "ImgServe.fetch_img: invalid uri#2 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
161
161
|
img_id = 'invalid.gif'
|
162
162
|
|
163
163
|
elsif img_id.size != 84
|
164
|
-
puts "ImgServe.fetch_img: invalid img_id (#{img_id.inspect})" if
|
164
|
+
puts "ImgServe.fetch_img: invalid img_id (#{img_id.inspect})" if RSence.args[:verbose]
|
165
165
|
img_id = 'invalid.gif'
|
166
166
|
end
|
167
167
|
|
@@ -200,15 +200,15 @@ module Common
|
|
200
200
|
elsif type == :file
|
201
201
|
file_id = req.unparsed_uri.match(/^#{::RSence.config[:broker_urls][:f]}(.*)$/)[1]
|
202
202
|
if file_id == nil
|
203
|
-
puts "fileServe.fetch_file: invalid uri#1 (#{req.unparsed_uri.inspect})" if
|
203
|
+
puts "fileServe.fetch_file: invalid uri#1 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
204
204
|
file_id = 'invalid.gif'
|
205
205
|
end
|
206
206
|
file_id = file_id.split('.')[0]
|
207
207
|
if file_id == nil
|
208
|
-
puts "fileServe.fetch_file: invalid uri#2 (#{req.unparsed_uri.inspect})" if
|
208
|
+
puts "fileServe.fetch_file: invalid uri#2 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
209
209
|
file_id = 'invalid.gif'
|
210
210
|
elsif file_id.size != 84
|
211
|
-
puts "fileServe.fetch_file: invalid file_id (#{file_id.inspect})" if
|
211
|
+
puts "fileServe.fetch_file: invalid file_id (#{file_id.inspect})" if RSence.args[:verbose]
|
212
212
|
file_id = 'invalid.gif'
|
213
213
|
end
|
214
214
|
if @raw_uris.include?(file_id)
|
@@ -231,14 +231,14 @@ module Common
|
|
231
231
|
elsif type == :blobobj
|
232
232
|
blobobj_id = req.unparsed_uri.match(/^#{::RSence.config[:broker_urls][:b]}(.*)$/)[1]
|
233
233
|
if blobobj_id == nil
|
234
|
-
puts "fileServe.fetch_blobobj: invalid uri#1 (#{req.unparsed_uri.inspect})" if
|
234
|
+
puts "fileServe.fetch_blobobj: invalid uri#1 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
235
235
|
blobobj_id = 'invalid.gif'
|
236
236
|
end
|
237
237
|
if blobobj_id == nil
|
238
|
-
puts "fileServe.fetch_blobobj: invalid uri#2 (#{req.unparsed_uri.inspect})" if
|
238
|
+
puts "fileServe.fetch_blobobj: invalid uri#2 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
239
239
|
blobobj_id = 'invalid.gif'
|
240
240
|
elsif blobobj_id.size != 84
|
241
|
-
puts "fileServe.fetch_blobobj: invalid blobobj_id (#{blobobj_id.inspect})" if
|
241
|
+
puts "fileServe.fetch_blobobj: invalid blobobj_id (#{blobobj_id.inspect})" if RSence.args[:verbose]
|
242
242
|
blobobj_id = 'invalid.gif'
|
243
243
|
end
|
244
244
|
if @raw_uris.include?(blobobj_id)
|
@@ -266,15 +266,15 @@ module Common
|
|
266
266
|
elsif type == :rsrc
|
267
267
|
rsrc_id = req.unparsed_uri.match(/^#{::RSence.config[:broker_urls][:d]}(.*)$/)[1]
|
268
268
|
if rsrc_id == nil
|
269
|
-
puts "rsrcServe.fetch_rsrc: invalid uri#1 (#{req.unparsed_uri.inspect})" if
|
269
|
+
puts "rsrcServe.fetch_rsrc: invalid uri#1 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
270
270
|
rsrc_id = 'invalid.gif'
|
271
271
|
end
|
272
272
|
rsrc_id = rsrc_id.split('.')[0]
|
273
273
|
if rsrc_id == nil
|
274
|
-
puts "rsrcServe.fetch_rsrc: invalid uri#2 (#{req.unparsed_uri.inspect})" if
|
274
|
+
puts "rsrcServe.fetch_rsrc: invalid uri#2 (#{req.unparsed_uri.inspect})" if RSence.args[:verbose]
|
275
275
|
rsrc_id = 'invalid.gif'
|
276
276
|
elsif rsrc_id.size != 84
|
277
|
-
puts "rsrcServe.fetch_rsrc: invalid rsrc_id (#{rsrc_id.inspect})" if
|
277
|
+
puts "rsrcServe.fetch_rsrc: invalid rsrc_id (#{rsrc_id.inspect})" if RSence.args[:verbose]
|
278
278
|
rsrc_id = 'invalid.gif'
|
279
279
|
end
|
280
280
|
if @raw_uris.include?(rsrc_id)
|
@@ -83,21 +83,21 @@ class TicketServe < Servlet
|
|
83
83
|
def get( req, res, ses )
|
84
84
|
uri = req.fullpath
|
85
85
|
if uri.match( /^#{broker_urls[:i]}/ )
|
86
|
-
|
86
|
+
puts "/i: #{uri.inspect}" if RSence.args[:verbose]
|
87
87
|
get_ticket( req, res, :img )
|
88
88
|
elsif uri.match( /^#{broker_urls[:d]}/ )
|
89
|
-
|
89
|
+
puts "/d: #{uri.inspect}" if RSence.args[:verbose]
|
90
90
|
get_ticket( req, res, :rsrc )
|
91
91
|
elsif uri.match( /^#{broker_urls[:f]}/ )
|
92
|
-
|
92
|
+
puts "/f: #{uri.inspect}" if RSence.args[:verbose]
|
93
93
|
get_ticket( req, res, :file )
|
94
94
|
elsif uri.match( /^#{broker_urls[:b]}/ )
|
95
|
-
|
95
|
+
puts "/b: #{uri.inspect}" if RSence.args[:verbose]
|
96
96
|
get_ticket( req, res, :blobobj )
|
97
97
|
elsif uri == broker_urls[:favicon]
|
98
98
|
favicon( req, res )
|
99
99
|
elsif uri == broker_urls[:uploader_iframe]
|
100
|
-
|
100
|
+
puts "/U/iframe_html: #{uri.inspect}" if RSence.args[:verbose]
|
101
101
|
res.status = 200
|
102
102
|
http_body = '<html><head><title>Empty Iframe for Uploading</title></head><body></body></html>'
|
103
103
|
res['content-type'] = 'text/html; charset=UTF-8'
|
@@ -109,7 +109,7 @@ class TicketServe < Servlet
|
|
109
109
|
def post( req, res, ses )
|
110
110
|
uri = req.fullpath
|
111
111
|
if uri[0..2] == broker_urls[:u]
|
112
|
-
puts "/U: #{uri.inspect}" if
|
112
|
+
puts "/U: #{uri.inspect}" if RSence.args[:verbose]
|
113
113
|
upload( req, res )
|
114
114
|
end
|
115
115
|
end
|
metadata
CHANGED
@@ -6,9 +6,9 @@ version: !ruby/object:Gem::Version
|
|
6
6
|
- 2
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
9
|
+
- 2
|
10
10
|
- pre
|
11
|
-
version: 2.0.0.
|
11
|
+
version: 2.0.0.2.pre
|
12
12
|
platform: ruby
|
13
13
|
authors:
|
14
14
|
- Riassence Inc.
|
@@ -47,6 +47,7 @@ files:
|
|
47
47
|
- lib/conf/default.rb
|
48
48
|
- lib/conf/wizard.rb
|
49
49
|
- lib/daemon/daemon.rb
|
50
|
+
- lib/daemon/sigcomm.rb
|
50
51
|
- lib/http/broker.rb
|
51
52
|
- lib/http/rackup.rb
|
52
53
|
- lib/http/request.rb
|