dango 0.0.35 → 0.0.36

Sign up to get free protection for your applications and to get access to all the features.
@@ -57,6 +57,8 @@ class DangoClientFramework
57
57
 
58
58
  @log_file = @connection_client_log_file
59
59
  @log_level = @connection_client_log_level
60
+ @log_max_size = 1048576
61
+ @log_shift_age = 99
60
62
 
61
63
  # loggerの準備
62
64
  logger.debug("-------client initialize host=#{@connection_client_host} port=#{@connection_client_port}")
@@ -45,7 +45,7 @@ class Time
45
45
  def self.now_to_s
46
46
  # self.strftime("%Y-%m-%d %H:%M:%S")
47
47
  now = self.now
48
- now.strftime("%Y-%m-%dT%H:%M:%S.") << "%06d" % now.usec
48
+ now.strftime("%Y-%m-%d %H:%M:%S.") << "%06d" % now.usec
49
49
  end
50
50
  end
51
51
 
@@ -53,6 +53,7 @@ end
53
53
  class DangoFrameworkError < StandardError; end
54
54
  class DangoFrameworkTimeoutError < DangoFrameworkError; end
55
55
  class DangoFrameworkConnectionError < DangoFrameworkError; end
56
+ class DangoFrameworkDisconnectError < DangoFrameworkError; end
56
57
  class DangoFrameworkReadNoDataError < DangoFrameworkError; end
57
58
  class DangoFrameworkFlashPolicyError < DangoFrameworkError; end
58
59
  class DangoFrameworkMonitorSecurityError < DangoFrameworkError; end
@@ -119,7 +120,7 @@ module DangoFrameworkModule
119
120
  if @log_file != ""
120
121
  log_dir = File.dirname(@log_file)
121
122
  Dir.mkdir(log_dir) if !File.exist?(log_dir)
122
- @dango_logger = Logger.new(@log_file)
123
+ @dango_logger = Logger.new(@log_file, @log_shift_age, @log_max_size)
123
124
  @dango_logger.level = @log_level
124
125
  def @dango_logger.format_message(severity, timestamp, msg, progname)
125
126
  # "#{Time.now_to_s}:#{sprintf('%1.1s', severity)}:#{progname}:#{msg}\n"
@@ -148,7 +149,7 @@ module DangoFrameworkModule
148
149
  rescue EOFError, IOError, Errno::ECONNRESET, Errno::ETIMEDOUT, Errno::ECONNABORTED
149
150
  # 接続終了時の切断と思われるものはDangoFrameworkConnectionErrorにしない
150
151
  #raise(DangoFrameworkError, "failed to read sock for EOF reached.\n#{error_message($!, 'u')}")
151
- raise(DangoFrameworkError, "failed to read sock for EOF reached (and so on). sock=#{sock.inspect} #{$!.class} toid=#{Thread.current.object_id}")
152
+ raise(DangoFrameworkDisconnectError, "failed to read sock for EOF reached (and so on). sock=#{sock.inspect} #{$!.class} toid=#{Thread.current.object_id}")
152
153
  rescue
153
154
  raise(DangoFrameworkConnectionError, "failed to read sock. sock=#{sock.inspect} toid=#{Thread.current.object_id}\n#{error_message($!, 'u')}")
154
155
  end
@@ -168,7 +169,7 @@ module DangoFrameworkModule
168
169
  ## サイズとデータタイプを取得
169
170
  dtype, size = size_str[0, 5].unpack("cN")
170
171
 
171
- ## データが小さすぎる場合
172
+ ## データがない場合
172
173
  if size == nil || size == 0
173
174
  raise(DangoFrameworkConnectionError, "toid=#{Thread.current.object_id}:size=#{size}:size_str=#{size_str.inspect}")
174
175
  end
@@ -82,6 +82,12 @@ class ServerMonitorAction
82
82
  'send_count' => @parent.send_count, # 送信回数
83
83
  'recv_fail_count' => @parent.recv_fail_count, # 受信失敗回数
84
84
  'send_fail_count' => @parent.send_fail_count, # 送信失敗回数
85
+
86
+ 'log_level' => @parent.log_level_str,
87
+ 'log_file' => @parent.log_file,
88
+ 'log_max_size' => @parent.log_max_size,
89
+ 'log_shift_age' => @parent.log_shift_age,
90
+
85
91
  # 'dummy' => "dummy "*1000, # ダミー情報
86
92
  }
87
93
 
@@ -21,6 +21,12 @@ class DangoServerFramework
21
21
  DefaultServerHost = 'localhost' # デフォルトのホスト名 # 接続制限ホスト "0.0.0.0"にすれば全接続オッケイ
22
22
  DefaultMaxConnections = 10 # デフォルトの最大接続人数
23
23
 
24
+ DefaultLogFile = "log/dango_development.log"
25
+ DefaultLogLevel = Logger::INFO
26
+ DefaultLogMaxSize = 1048576
27
+ DefaultLogShiftAge = 99
28
+ DefaultGServerLogFile = ""
29
+
24
30
  # ここから先は普通は変更しなくていいだろうというもの
25
31
  SendReceiveSleepIntervalSec = 0.2 # データ送信時のタイムアウトチェック間隔秒
26
32
  SendReceiveTimeoutDefaultSec = 5.0 # データ送受信時のデフォルトタイムアウト秒数
@@ -48,6 +54,14 @@ class DangoServerFramework
48
54
  def disconnecting(sock)
49
55
  @parent.disconnecting(sock)
50
56
  end
57
+
58
+ def starting()
59
+ @parent.starting()
60
+ end
61
+
62
+ def stopping()
63
+ @parent.stopping()
64
+ end
51
65
  end
52
66
 
53
67
  def initialize(config)
@@ -58,6 +72,16 @@ class DangoServerFramework
58
72
 
59
73
  # SIGINT の捕捉
60
74
  Signal.trap(:INT) do
75
+ # サーバーを停止
76
+ if @gserver && !@gserver.stopped?
77
+ @gserver.shutdown
78
+ @gserver.stop
79
+ while(!@gserver.stopped?) do
80
+ sleep 1
81
+ debug_print("waiting... #{@gserver.stopped?} #{@gserver.connections}")
82
+ end
83
+ end
84
+
61
85
  puts "shutdown"
62
86
  exit!
63
87
  end
@@ -85,9 +109,9 @@ class DangoServerFramework
85
109
 
86
110
  logger.info("===== server initialize =====") # loggerの準備
87
111
  logger.info("Process.pid=#{Process.pid}")
88
- logger.info("port=#{@connection_server_port}")
89
- logger.info("host=#{@connection_server_host}")
90
- logger.info("max_connections=#{@connection_server_max_connections}")
112
+ logger.info("port=#{@server_port}")
113
+ logger.info("host=#{@server_host}")
114
+ logger.info("max_connections=#{@server_max_connections}")
91
115
 
92
116
  open("tmp/pids/dango.pid", "wb"){|fh| fh.write Process.pid.to_s }
93
117
 
@@ -107,13 +131,15 @@ class DangoServerFramework
107
131
  TCPSocket.do_not_reverse_lookup = true # 逆引きを行わない
108
132
  # TCPSocket.do_not_reverse_lookup = false # 逆引きを行う
109
133
 
110
- @gserver = DangoGServer.new(self, @connection_server_port,
111
- @connection_server_host,
112
- @connection_server_max_connections)
134
+ @gserver = DangoGServer.new(self, @server_port, @server_host, @server_max_connections)
113
135
  @gserver.audit = true # Turn logging on.
136
+ @gserver.debug = true # debug
137
+
138
+ if @gserver_log_file && @gserver_log_file != ""
139
+ gserver_log_fh = open(@gserver_log_file, "a")
140
+ @gserver.stdlog = gserver_log_fh
141
+ end
114
142
 
115
- GC.enable
116
- GC.start
117
143
  GC.disable
118
144
 
119
145
  begin
@@ -201,6 +227,20 @@ class DangoServerFramework
201
227
  logger.info "disconnecting:port=#{port}"
202
228
  end
203
229
 
230
+ # gserver開始処理
231
+ def starting()
232
+ msg = "#{self.class.to_s} #{@server_host}:#{@server_port}/#{@server_max_connections} start"
233
+ logger.warn msg
234
+ puts "[#{Time.now_to_s}] #{msg}"
235
+ end
236
+
237
+ # gserver終了処理
238
+ def stopping()
239
+ msg = "#{self.class.to_s} #{@server_host}:#{@server_port} stop"
240
+ logger.warn msg
241
+ puts "[#{Time.now_to_s}] #{msg}"
242
+ end
243
+
204
244
  # gserverのserveメソッド:スレッド開始処理
205
245
  def thread_main(sock)
206
246
  logger.info "#{sock} is accepted. thread.current=#{Thread.current.object_id} "
@@ -294,12 +334,16 @@ class DangoServerFramework
294
334
  logger.debug "Monitor Security Error #{sid} "
295
335
 
296
336
  rescue DangoFrameworkReadNoDataError
337
+ @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
297
338
  logger.debug "read no data. maybe client closed. #{sid} "
298
339
 
299
340
  rescue DangoFrameworkConnectionError
300
341
  @recv_fail_count += 1 if @recv_fail_count # 受信失敗回数カウント
301
342
  logger.debug "connection error. #{sid} \n#{error_message($!, 'u')}"
302
343
 
344
+ rescue DangoFrameworkDisconnectError
345
+ logger.debug "DangoFrameworkDisconnectError. #{sid} \n#{error_message($!, 'u')}"
346
+
303
347
  rescue DangoFrameworkError
304
348
  logger.debug "DangoFrameworkError. #{sid} \n#{error_message($!, 'u')}"
305
349
 
@@ -346,10 +390,14 @@ class DangoServerFramework
346
390
  Thread.abort_on_exception = true if @server_debug
347
391
 
348
392
  # 変数の初期設定
349
- @connection_server_port = @config['network']['port'] || DefaultNetworkPort
350
- @connection_server_host = @config['server']['host'] || DefaultServerHost
351
- @connection_server_max_connections = @config['server']['max_connections'] || DefaultMaxConnections
352
- @log_file = @config['server']['log_file'] || ""
393
+ @server_port = @config['network']['port'] || DefaultNetworkPort
394
+ @server_host = @config['server']['host'] || DefaultServerHost
395
+ @server_max_connections = @config['server']['max_connections'] || DefaultMaxConnections
396
+ @log_file = @config['server']['log_file'] || DefaultLogFile
397
+ @log_max_size = @config['server']['log_max_size'] || DefaultLogMaxSize
398
+ @log_shift_age = @config['server']['log_shift_age'] || DefaultLogShiftAge
399
+ @gserver_log_file = @config['server']['gserver_log_file'] || DefaultGServerLogFile
400
+
353
401
  @policy_file_request = @config['server']['policy_file_request'] || true
354
402
  @send_receive_sleep_interval_sec = @config['server']['send_receive_sleep_interval_sec'] || SendReceiveSleepIntervalSec
355
403
  @send_receive_timeout_default_sec = @config['server']['send_receive_timeout_default_sec'] || SendReceiveTimeoutDefaultSec
@@ -359,7 +407,7 @@ class DangoServerFramework
359
407
  @heart_beat_receive_wait_sec = @config['server']['heart_beat_receive_wait_sec'] || HeartBeatReceiveWaitSec
360
408
  @gc_interval_sec = @config['server']['gc_interval_sec'] || GCIntervalSec
361
409
 
362
-
410
+ # ログレベルの設定
363
411
  log_level_hash = {
364
412
  "FATAL" => Logger::FATAL,
365
413
  "ERROR" => Logger::ERROR,
@@ -367,10 +415,15 @@ class DangoServerFramework
367
415
  "INFO" => Logger::INFO,
368
416
  "DEBUG" => Logger::DEBUG,
369
417
  }
370
- @log_level = log_level_hash.find do |level|
371
- level == @config['server']['log_level']
418
+ log_level_hash.each do |str, const|
419
+ @log_level = const if str.downcase == @config['server']['log_level'].downcase
372
420
  end
373
- @log_level = @connection_server_log_level || Logger::DEBUG
421
+ @log_level = @log_level || DefaultLogLevel
422
+
423
+ log_level_hash.each do |str, const|
424
+ @log_level_str = str if const == @log_level
425
+ end
426
+
374
427
 
375
428
  @start_time = Time.now # サーバー起動時間
376
429
  @recv_count = 0 # 受信回数
@@ -380,6 +433,7 @@ class DangoServerFramework
380
433
  end
381
434
 
382
435
  attr_reader(:start_time, :recv_count, :send_count, :recv_fail_count, :send_fail_count)
436
+ attr_reader(:log_level_str, :log_file, :log_max_size, :log_shift_age)
383
437
 
384
438
  def dango_server_init # 初期設定
385
439
  end
data/lib/dango/version.rb CHANGED
@@ -2,7 +2,7 @@ module Dango #:nodoc:
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
4
  MINOR = 0
5
- TINY = 35
5
+ TINY = 36
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
8
8
  end
metadata CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
3
3
  specification_version: 1
4
4
  name: dango
5
5
  version: !ruby/object:Gem::Version
6
- version: 0.0.35
7
- date: 2007-11-13 00:00:00 +09:00
6
+ version: 0.0.36
7
+ date: 2007-11-20 00:00:00 +09:00
8
8
  summary: Realtime communications network framework for Ruby and Flash on Rails.
9
9
  require_paths:
10
10
  - lib