knjappserver 0.0.23 → 0.0.24
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/knjappserver.gemspec +2 -2
- data/lib/include/class_httpserver.rb +3 -30
- data/lib/include/class_httpsession.rb +6 -7
- data/lib/include/class_knjappserver.rb +13 -6
- data/lib/include/class_knjappserver_cleaner.rb +1 -1
- data/lib/include/class_knjappserver_cmdline.rb +17 -18
- data/lib/include/class_knjappserver_mailing.rb +11 -5
- data/lib/include/class_knjappserver_threadding.rb +7 -2
- data/lib/include/class_knjappserver_threadding_timeout.rb +1 -1
- metadata +3 -3
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.24
|
data/knjappserver.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{knjappserver}
|
8
|
-
s.version = "0.0.
|
8
|
+
s.version = "0.0.24"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Kasper Johansen"]
|
12
|
-
s.date = %q{2012-
|
12
|
+
s.date = %q{2012-06-10}
|
13
13
|
s.description = %q{Which supports a lot of undocumented stuff.}
|
14
14
|
s.email = %q{k@spernj.org}
|
15
15
|
s.executables = ["check_running.rb", "knjappserver_start.rb"]
|
@@ -42,39 +42,12 @@ class Knjappserver::Httpserver
|
|
42
42
|
STDOUT.print Knj::Errors.error_str(e)
|
43
43
|
end
|
44
44
|
end
|
45
|
-
|
46
|
-
@thread_restart = Thread.new do
|
47
|
-
begin
|
48
|
-
loop do
|
49
|
-
sleep 10
|
50
|
-
break if @kas.should_restart and @kas.should_restart_done
|
51
|
-
|
52
|
-
if !@kas.should_restart and (!@server or @server.closed?)
|
53
|
-
STDOUT.print "Socket does not exist or is closed - restarting HTTP-server!\n"
|
54
|
-
@server = TCPServer.new(@kas.config[:host], @kas.config[:port])
|
55
|
-
STDOUT.print "Done.\n"
|
56
|
-
end
|
57
|
-
end
|
58
|
-
rescue => e
|
59
|
-
if @kas
|
60
|
-
@kas.handle_error(e)
|
61
|
-
else
|
62
|
-
STDOUT.print Knj::Errors.error_str(e)
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
45
|
end
|
67
46
|
|
68
47
|
def stop
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
@thread_restart.kill if @thread_restart and @thread_restart.alive?
|
73
|
-
rescue => e
|
74
|
-
STDOUT.print "Could not stop threads.\n" if @debug
|
75
|
-
STDOUT.puts e.inspect
|
76
|
-
STDOUT.puts e.backtrace
|
77
|
-
end
|
48
|
+
STDOUT.print "Stopping accept-thread.\n" if @debug
|
49
|
+
@thread_accept.kill if @thread_accept and @thread_accept.alive?
|
50
|
+
@thread_restart.kill if @thread_restart and @thread_restart.alive?
|
78
51
|
|
79
52
|
STDOUT.print "Stopping all HTTP sessions.\n" if @debug
|
80
53
|
if @http_sessions
|
@@ -1,14 +1,13 @@
|
|
1
|
+
#This class handels the HTTP-sessions.
|
1
2
|
class Knjappserver::Httpsession
|
2
3
|
attr_accessor :data, :alert_sent
|
3
4
|
attr_reader :cookie, :get, :session, :session_id, :session_hash, :kas, :active, :out, :eruby, :browser, :debug, :resp, :page_path, :post, :cgroup, :meta, :httpsession_var, :handler, :working
|
4
5
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
autoload :Page_environment, "#{dir}/class_httpsession_page_environment.rb"
|
11
|
-
autoload :Post_multipart, "#{dir}/class_httpsession_post_multipart.rb"
|
6
|
+
#Autoloader for subclasses.
|
7
|
+
def self.const_missing(name)
|
8
|
+
require "#{File.dirname(__FILE__)}/class_httpsession_#{name.to_s.downcase}.rb"
|
9
|
+
return Knjappserver::Httpsession.const_get(name.to_s.to_sym)
|
10
|
+
end
|
12
11
|
|
13
12
|
def initialize(httpserver, socket)
|
14
13
|
@data = {}
|
@@ -2,10 +2,11 @@ class Knjappserver
|
|
2
2
|
attr_reader :cio, :config, :httpserv, :debug, :db, :db_handler, :ob, :translations, :paused, :should_restart, :events, :mod_event, :db_handler, :gettext, :sessions, :logs_access_pending, :threadpool, :vars, :magic_procs, :magic_vars, :types, :eruby_cache, :httpsessions_ids
|
3
3
|
attr_accessor :served, :should_restart, :should_restart_done
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
5
|
+
#Autoloader for subclasses.
|
6
|
+
def self.const_missing(name)
|
7
|
+
require "#{File.dirname(__FILE__)}/class_#{name.to_s.downcase}.rb"
|
8
|
+
return Knjappserver.const_get(name)
|
9
|
+
end
|
9
10
|
|
10
11
|
def initialize(config)
|
11
12
|
raise "No arguments given." if !config.is_a?(Hash)
|
@@ -374,13 +375,17 @@ class Knjappserver
|
|
374
375
|
rescue Interrupt => e
|
375
376
|
STDOUT.print "Got interrupt - trying to stop appserver.\n" if @debug
|
376
377
|
self.stop
|
378
|
+
raise e
|
377
379
|
end
|
378
380
|
end
|
379
381
|
|
380
382
|
#Stops the entire app and releases join.
|
381
383
|
def stop
|
384
|
+
return nil if @stop_called
|
385
|
+
@stop_called = true
|
386
|
+
|
382
387
|
proc_stop = proc{
|
383
|
-
STDOUT.print "Stopping appserver
|
388
|
+
STDOUT.print "Stopping appserver.\n" if @debug
|
384
389
|
@httpserv.stop if @httpserv and @httpserv.respond_to?(:stop)
|
385
390
|
|
386
391
|
STDOUT.print "Stopping threadpool.\n" if @debug
|
@@ -389,6 +394,8 @@ class Knjappserver
|
|
389
394
|
#This should be done first to be sure it finishes (else we have a serious bug).
|
390
395
|
STDOUT.print "Flush out loaded sessions.\n" if @debug
|
391
396
|
self.sessions_flush
|
397
|
+
|
398
|
+
STDOUT.print "Stopping done...\n" if @debug
|
392
399
|
}
|
393
400
|
|
394
401
|
#If we cant get a paused-execution in 5 secs - we just force the stop.
|
@@ -453,7 +460,7 @@ class Knjappserver
|
|
453
460
|
begin
|
454
461
|
@httpserv.thread_accept.join
|
455
462
|
@httpserv.thread_restart.join if @httpserv and @httpserv.thread_restart
|
456
|
-
rescue Interrupt
|
463
|
+
rescue Interrupt => e
|
457
464
|
self.stop
|
458
465
|
end
|
459
466
|
|
@@ -4,27 +4,26 @@ class Knjappserver
|
|
4
4
|
|
5
5
|
Thread.new do
|
6
6
|
begin
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
conn[:block].call(data)
|
7
|
+
$stdin.each_line do |line|
|
8
|
+
called = 0
|
9
|
+
@cmds.each do |key, connects|
|
10
|
+
data = {}
|
11
|
+
|
12
|
+
if key.is_a?(Regexp)
|
13
|
+
if line.match(key)
|
14
|
+
connects.each do |conn|
|
15
|
+
called += 1
|
16
|
+
conn[:block].call(data)
|
17
|
+
end
|
19
18
|
end
|
19
|
+
else
|
20
|
+
raise "Unknown class for 'cmd_connect': '#{key.class.name}'."
|
20
21
|
end
|
21
|
-
else
|
22
|
-
raise "Unknown class for 'cmd_connect': '#{key.class.name}'."
|
23
22
|
end
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
|
24
|
+
if called == 0
|
25
|
+
print "Unknown command: '#{line.strip}'.\n"
|
26
|
+
end
|
28
27
|
end
|
29
28
|
rescue => e
|
30
29
|
self.handle_error(e)
|
@@ -8,7 +8,8 @@ class Knjappserver
|
|
8
8
|
@mails_waiting = []
|
9
9
|
@mails_mutex = Monitor.new
|
10
10
|
@mails_queue_mutex = Monitor.new
|
11
|
-
@mails_timeout = self.timeout(:time =>
|
11
|
+
@mails_timeout = self.timeout(:time => 30) do
|
12
|
+
STDOUT.print "Flushing mails.\n" if @debug
|
12
13
|
self.mail_flush
|
13
14
|
end
|
14
15
|
end
|
@@ -30,8 +31,8 @@ class Knjappserver
|
|
30
31
|
|
31
32
|
mailobj = Knjappserver::Mail.new({:kas => self, :errors => {}, :status => :waiting}.merge(mail_args))
|
32
33
|
STDOUT.print "Added mail '#{mailobj.__id__}' to the mail-send-queue.\n" if debug
|
33
|
-
@mails_waiting << mailobj
|
34
|
-
self.mail_flush
|
34
|
+
@mails_waiting << mailobj
|
35
|
+
self.mail_flush if mail_args[:now]
|
35
36
|
return mailobj
|
36
37
|
end
|
37
38
|
end
|
@@ -39,8 +40,12 @@ class Knjappserver
|
|
39
40
|
#Sends all queued mails to the respective servers, if we are online.
|
40
41
|
def mail_flush
|
41
42
|
@mails_mutex.synchronize do
|
42
|
-
|
43
|
+
if @mails_waiting.length <= 0
|
44
|
+
STDOUT.print "No mails to flush - skipping.\n" if @debug
|
45
|
+
return false
|
46
|
+
end
|
43
47
|
|
48
|
+
STDOUT.print "Trying to ping Google to figure out if we are online...\n" if @debug
|
44
49
|
status = Ping.pingecho("google.dk", 10, 80)
|
45
50
|
if !status
|
46
51
|
STDOUT.print "We are not online - skipping mail flush.\n"
|
@@ -49,6 +54,7 @@ class Knjappserver
|
|
49
54
|
|
50
55
|
begin
|
51
56
|
#Use subprocessing to avoid the mail-framework (activesupport and so on, also possible memory leaks in those large frameworks).
|
57
|
+
STDOUT.print "Starting subprocess for mailing.\n" if @debug
|
52
58
|
require "knj/process_meta"
|
53
59
|
subproc = Knj::Process_meta.new("debug" => @debug, "debug_err" => true, "id" => "knjappserver_mailing")
|
54
60
|
subproc.static("Object", "require", "rubygems")
|
@@ -130,7 +136,7 @@ class Knjappserver
|
|
130
136
|
@args[:status] = :sent
|
131
137
|
STDOUT.print "Sent email #{self.__id__}\n" if @args[:kas].debug
|
132
138
|
return true
|
133
|
-
rescue
|
139
|
+
rescue => e
|
134
140
|
if @args[:kas].debug
|
135
141
|
STDOUT.print "Could not send email.\n"
|
136
142
|
STDOUT.puts e.inspect
|
@@ -39,13 +39,18 @@ class Knjappserver
|
|
39
39
|
begin
|
40
40
|
thread_obj.args[:running] = true
|
41
41
|
yield(*args[:args])
|
42
|
-
rescue
|
43
|
-
handle_error(e)
|
42
|
+
rescue => e
|
43
|
+
self.handle_error(e)
|
44
44
|
thread_obj.args[:error] = true
|
45
45
|
thread_obj.args[:error_obj] = e
|
46
46
|
ensure
|
47
|
+
STDOUT.print "Free thread ob-db.\n" if @debug
|
47
48
|
@ob.db.free_thread if @ob.db.opts[:threadsafe]
|
49
|
+
|
50
|
+
STDOUT.print "Free thread db-handler.\n" if @debug
|
48
51
|
@db_handler.free_thread if @db_handler.opts[:threadsafe]
|
52
|
+
|
53
|
+
STDOUT.print "Set args on thread.\n" if @debug
|
49
54
|
thread_obj.args[:running] = false
|
50
55
|
thread_obj.args[:done] = true
|
51
56
|
end
|
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: knjappserver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease:
|
5
|
-
version: 0.0.
|
5
|
+
version: 0.0.24
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Kasper Johansen
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2012-
|
13
|
+
date: 2012-06-10 00:00:00 +02:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -208,7 +208,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
208
208
|
requirements:
|
209
209
|
- - ">="
|
210
210
|
- !ruby/object:Gem::Version
|
211
|
-
hash: -
|
211
|
+
hash: -2439640920706539794
|
212
212
|
segments:
|
213
213
|
- 0
|
214
214
|
version: "0"
|