webroar 0.3.1 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (97) hide show
  1. data/CHANGELOG +48 -1
  2. data/README +11 -14
  3. data/Rakefile +1 -1
  4. data/conf/mime_type.yml +172 -166
  5. data/conf/server_internal_config.yml +30 -8
  6. data/doc/user-guide.html +294 -153
  7. data/doc/user-guide.txt +9 -13
  8. data/lib/command_runner.rb +1 -0
  9. data/lib/dependencies.rb +18 -15
  10. data/lib/installer.rb +115 -50
  11. data/src/admin_panel/app/controllers/admin_controller.rb +1 -15
  12. data/src/admin_panel/app/controllers/application_controller.rb +2 -2
  13. data/src/admin_panel/app/controllers/application_specification_controller.rb +2 -1
  14. data/src/admin_panel/app/controllers/headers_controller.rb +73 -0
  15. data/src/admin_panel/app/controllers/mail_specification_controller.rb +10 -0
  16. data/src/admin_panel/app/controllers/server_specification_controller.rb +14 -0
  17. data/src/admin_panel/app/helpers/admin_helper.rb +0 -85
  18. data/src/admin_panel/app/models/app.rb +1 -1
  19. data/src/admin_panel/app/models/application_specification.rb +33 -25
  20. data/src/admin_panel/app/models/headers.rb +116 -0
  21. data/src/admin_panel/app/models/mail_specification.rb +20 -5
  22. data/src/admin_panel/app/models/server_specification.rb +2 -7
  23. data/src/admin_panel/app/views/admin/configuration.html.erb +10 -5
  24. data/src/admin_panel/app/views/exceptions/_exception_list_partial.html.erb +4 -4
  25. data/src/admin_panel/app/views/graph/_graph_page.html.erb +3 -0
  26. data/src/admin_panel/app/views/headers/_add_expires_text_box.html.erb +35 -0
  27. data/src/admin_panel/app/views/headers/_expires_by_type_form.html.erb +65 -0
  28. data/src/admin_panel/app/views/headers/_headers_table.html.erb +113 -0
  29. data/src/admin_panel/app/views/mail_specification/_current_spec.html.erb +168 -0
  30. data/src/admin_panel/app/views/{admin → server_specification}/_add_div.html.erb +1 -1
  31. data/src/admin_panel/config/initializers/application_constants.rb +6 -0
  32. data/src/admin_panel/lib/control.rb +6 -3
  33. data/src/admin_panel/lib/scgi.rb +74 -21
  34. data/src/admin_panel/lib/yaml_writer.rb +51 -17
  35. data/src/admin_panel/public/javascripts/application.js +20 -1
  36. data/src/head/wr_access_log.c +2 -2
  37. data/src/head/wr_application.c +294 -236
  38. data/src/head/wr_application.h +8 -8
  39. data/src/head/wr_configurator.c +451 -517
  40. data/src/head/wr_configurator.h +10 -115
  41. data/src/head/wr_connection.c +26 -25
  42. data/src/head/wr_connection.h +2 -3
  43. data/src/head/wr_controller.c +110 -93
  44. data/src/head/wr_controller.h +6 -6
  45. data/src/head/wr_main.c +31 -24
  46. data/src/head/wr_request.c +70 -93
  47. data/src/head/wr_request.h +0 -4
  48. data/src/head/wr_resolver.c +21 -15
  49. data/src/head/wr_resolver.h +2 -2
  50. data/src/head/wr_server.c +36 -26
  51. data/src/head/wr_server.h +5 -5
  52. data/src/head/wr_worker.c +551 -512
  53. data/src/head/wr_worker.h +33 -20
  54. data/src/helper/wr_config.c +316 -0
  55. data/src/helper/wr_config.h +235 -0
  56. data/src/helper/wr_helper.h +1 -5
  57. data/src/helper/wr_logger.c +4 -4
  58. data/src/helper/wr_scgi.c +3 -4
  59. data/src/helper/wr_scgi.h +2 -0
  60. data/src/helper/wr_string.h +2 -2
  61. data/src/helper/wr_util.c +3 -1
  62. data/src/helper/wr_util.h +0 -0
  63. data/src/helper/wr_yaml_parser.c +30 -0
  64. data/src/helper/wr_yaml_parser.h +1 -0
  65. data/src/ruby_lib/exception_tracker/instrumentation/action_controller.rb +2 -1
  66. data/src/ruby_lib/mailer/smtpmail.rb +7 -4
  67. data/src/ruby_lib/profiler/instrumentation/action_controller.rb +2 -1
  68. data/src/ruby_lib/profiler/instrumentation/active_record.rb +3 -0
  69. data/src/ruby_lib/rack/adapter/rails.rb +14 -7
  70. data/src/ruby_lib/ruby_interface/client.rb +1 -1
  71. data/src/ruby_lib/ruby_interface/version.rb +2 -2
  72. data/src/ruby_lib/webroar_app_loader.rb +4 -2
  73. data/src/worker/wkr_controller.c +200 -140
  74. data/src/worker/wkr_http.c +14 -28
  75. data/src/worker/wkr_http.h +4 -4
  76. data/src/worker/wkr_http_request.c +12 -11
  77. data/src/worker/wkr_http_request.h +7 -8
  78. data/src/worker/wkr_http_response.c +10 -14
  79. data/src/worker/wkr_http_response.h +0 -1
  80. data/src/worker/wkr_main.c +74 -140
  81. data/src/worker/wkr_static.c +295 -108
  82. data/src/worker/wkr_static.h +20 -7
  83. data/src/worker/worker.c +245 -70
  84. data/src/worker/worker.h +46 -34
  85. data/tasks/compile.rake +128 -175
  86. data/tasks/test.rake +345 -469
  87. data/test/spec/webroar_command_spec.rb +23 -0
  88. metadata +173 -43
  89. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/README +0 -34
  90. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/Rakefile +0 -13
  91. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/init.rb +0 -5
  92. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/action_mailer_tls.rb +0 -16
  93. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/lib/smtp_tls.rb +0 -123
  94. data/src/admin_panel/vendor/plugins/action_mailer_optional_tls/test/tls_test.rb +0 -42
  95. data/src/head/wr_config.h +0 -165
  96. data/src/ruby_lib/mailer/action_mailer_tls.rb +0 -16
  97. data/src/ruby_lib/mailer/smtp_tls.rb +0 -123
data/src/head/wr_config.h DELETED
@@ -1,165 +0,0 @@
1
- /* WebROaR - Ruby Application Server - http://webroar.in/
2
- * Copyright (C) 2009 Goonj LLC
3
- *
4
- * This file is part of WebROaR.
5
- *
6
- * WebROaR is free software: you can redistribute it and/or modify
7
- * it under the terms of the GNU General Public License as published by
8
- * the Free Software Foundation, either version 3 of the License, or
9
- * (at your option) any later version.
10
- *
11
- * WebROaR is distributed in the hope that it will be useful,
12
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
- * GNU General Public License for more details.
15
- *
16
- * You should have received a copy of the GNU General Public License
17
- * along with WebROaR. If not, see <http://www.gnu.org/licenses/>.
18
- */
19
- #ifndef WR_CONFIG_H_
20
- #define WR_CONFIG_H_
21
-
22
- // Default max_worker
23
- #define WR_MAX_WKR 8
24
- // Default min_worker
25
- #define WR_MIN_WKR 4
26
- // Default request listining port
27
- #define WR_DEFAULT_SVR_PORT 3000
28
-
29
- // Maximum value allowed for number of workers
30
- #define WR_ALLOWED_MAX_WORKERS 20
31
-
32
- #define WR_MAX_PENDING_WKR 10
33
- #define WR_MAX_ADD_TIMEOUT_COUNTER 3
34
-
35
- #ifdef HAVE_GNUTLS
36
- // Default SSL listining port
37
- #define WR_DEFAULT_SSL_PORT 443
38
- #endif
39
-
40
- // Default application environment
41
- #define WR_DEFAULT_ENV "production"
42
- // Admin Panel base uri
43
- #define WR_ADMIN_PANEL_BASE_URL "/admin-panel"
44
- // Admin Panel base uri
45
- #define WR_ADMIN_PANEL_APP_NAME "Admin Panel"
46
- // Parameter value to enable application analytics
47
- #define WR_ANALYTICS_ON "enabled"
48
-
49
- // Appliction to serve static files
50
- #define WR_STATIC_FILE_SERVER_NAME "static-worker"
51
- // Minimum number of worker to serve static content
52
- #define WR_STATIC_SVR_MIN_WKR 4
53
- // Maximum number of worker to serve static content
54
- #define WR_STATIC_SVR_MAX_WKR 8
55
- #define WR_HTTP_FILE_PATH "FILE_PATH"
56
- #define WR_HTTP_FILE_PATH_LEN 9
57
-
58
- #define RESP_CODE "RESP_CODE"
59
- #define RESP_CONTENT_LENGTH "RESP_CONTENT_LEN"
60
- #define SCGI_CONTENT_LENGTH "CONTENT_LENGTH"
61
-
62
- /** Folder and file related macros */
63
- // Server control sock path
64
- #define WR_CTL_SOCK_PATH "/tmp/webroar_controller_sock"
65
- // 'webroar-worker' request listining sock path
66
- #define WR_WKR_SOCK_PATH "/tmp/webroar_worker_sock"
67
- // Server log file name
68
- #define WR_LOG_FILE "webroar.log"
69
- // Server configuration file name
70
- #define WR_CONF_FILE "config.yml"
71
- // Path seperator
72
- #define WR_PATH_SEPARATOR "/"
73
- // Ruby library folder name
74
- #define WR_RUBY_LIB_DIR "ruby_lib"
75
- // Admin Panel folder name
76
- #define WR_ADMIN_PANEL_DIR "admin_panel"
77
- // Source folder name
78
- #define WR_SRC_DIR "src"
79
- // Executable directory name
80
- #define WR_BIN_DIR "bin"
81
- // File to store Server control port or sock path
82
- #define WR_TMP_SOCK_FILE "/tmp/webroar.sock"
83
- // File to store process pid having high resident memory
84
- #define WR_HIGH_RSS_PID_FILE "/var/run/high_rss.pid"
85
- // Executable file name used to create workers
86
- #define WR_WKR_BIN "webroar-worker"
87
- // File to store Server process id
88
- #define WR_PID_FILE "/var/run/webroar.pid"
89
- #define WR_SERVER "WebROaR"
90
- #define WR_VERSION "0.3.1"
91
- #define WR_MIME_TYPE_PATH "/conf/mime_type.yml"
92
- #define WR_CONF_PATH "/conf/config.yml"
93
- #define WR_SERVER_INTERNAL_CONF_PATH "/conf/server_internal_config.yml"
94
-
95
- /** Private macros */
96
- /** Application level macros */
97
- // Pending request queue size
98
- #define WR_MSG_QUE_SIZE 2048
99
- // Ratio of pending request and active worker required to add worker
100
- #define WR_MAX_REQ_RATIO 1
101
- // Ratio of pending request and active worker required to remove worker
102
- #define WR_MIN_REQ_RATIO 3
103
- // Number of seconds with ratio higher than WR_MAX_REQ_RATIO to add worker.
104
- #define WR_HIGH_LOAD_LIMIT 2.
105
- // Number of seconds with ratio lower than WR_MIN_REQ_RATIO to remove worker.
106
- #define WR_LOW_LOAD_LIMIT 600.
107
- // Number of seconds to wait for add signal from worker after incrementing the active worker count
108
- #define WR_WKR_ADD_TIMEOUT 25.
109
- // Number of seconds to wait for response before killing worker.
110
- #define WR_WKR_KILL_TIMEOUT 10.
111
-
112
- // Number of seconds worker can remain idle, before sending PING.
113
- #define WR_WKR_IDLE_TIME 60.
114
- // Number of seconds head should wait for PING reply.
115
- #define WR_PING_WAIT_TIME 15.
116
- // Number of time head should try sending PING before killing worker.
117
- #define WR_PING_TRIALS 2
118
-
119
- //Number of seconds head would wait before closing the connection for kepp-alive request
120
- #define WR_SVR_KEEP_ALIVE 1
121
- #define WR_SVR_KEEP_ALIVE_TIME 15.
122
-
123
- // Request body more than this size sholud store in file
124
- #define WR_REQ_BODY_MAX_SIZE 1024*64
125
- // Bufffer size to store request headers in 'webroar-worker'
126
- #define WR_BUF_SIZE (1024 * 10)
127
-
128
- #define WR_TINY_STR_LEN 16
129
- #define WR_SHORT_STR_LEN 32
130
- #define WR_STR_LEN 64
131
- #define WR_LONG_STR_LEN 128
132
- #define WR_LONG_LONG_STR_LEN 512
133
- #define WR_FILE_PATH_LEN 1024
134
-
135
- #define WR_DEFAULT_PREFIX_HASH 5381
136
- #define WR_MSG_SIZE 1024
137
-
138
- #define WR_REQ_CONN_POOL 10
139
- #define WR_CTL_CONN_POOL 5
140
-
141
- /** Request size limitation **/
142
- #define WR_MAX_REQ_URI_LEN 12288 /* 12*1024 */
143
- #define WR_MAX_REQ_PATH_LEN 1024
144
- #define WR_MAX_REQ_FRAG_LEN 1024
145
- #define WR_MAX_REQ_QRY_STR_LEN 10240 /* 10*1024 */
146
- #define WR_MAX_REQ_FIELD_NAME_LEN 256 /* */
147
- #define WR_MAX_REQ_FIELD_VALUE_LEN 81920 /* 80*1024 */
148
- #define WR_MAX_REQ_HEADER_LEN 112640 /* (1024 * (80 + 32)) */
149
- #define WR_MAX_REQ_HEADER_NO 40
150
-
151
- #define WR_STACKTRACE_SIZE 50
152
-
153
- #ifdef L_DEBUG
154
- #define WR_CONN_ID "CONNECTION_ID"
155
- #define WR_CONN_ID_LEN 19
156
- #define WR_REQ_ID "REQ_ID"
157
- #define WR_REQ_ID_LEN 12
158
- #endif
159
-
160
- #define WR_MAX_HOST_NAMES 16
161
-
162
- #define TRUE 1
163
- #define FALSE 0
164
-
165
- #endif /*WR_CONFIG_H_*/
@@ -1,16 +0,0 @@
1
- require "rubygems"
2
- require "action_mailer"
3
-
4
- ActionMailer::Base.class_eval do
5
- private
6
- def perform_delivery_smtp(mail)
7
- destinations = mail.destinations
8
- mail.ready_to_send
9
-
10
- Net::SMTP.start(smtp_settings[:address], smtp_settings[:port], smtp_settings[:domain],
11
- smtp_settings[:user_name], smtp_settings[:password], smtp_settings[:authentication],
12
- smtp_settings[:tls], smtp_settings[:ssl]) do |smtp|
13
- smtp.sendmail(mail.encoded, mail.from, destinations)
14
- end
15
- end
16
- end
@@ -1,123 +0,0 @@
1
- require "openssl"
2
- require "net/smtp"
3
-
4
- Net::SMTP.class_eval do
5
-
6
- def self.start( address, port = nil,
7
- helo = 'localhost.localdomain',
8
- user = nil, secret = nil, authtype = nil, use_tls = false,
9
- use_ssl = false, &block) # :yield: smtp
10
- new(address, port).start(helo, user, secret, authtype, use_tls, use_ssl, &block)
11
- end
12
-
13
- def start( helo = 'localhost.localdomain',
14
- user = nil, secret = nil, authtype = nil, use_tls = false, use_ssl = false ) # :yield: smtp
15
- start_method = use_tls ? :do_tls_start : use_ssl ? :do_ssl_start : :do_start
16
- if block_given?
17
- begin
18
- send start_method, helo, user, secret, authtype
19
- return yield(self)
20
- ensure
21
- do_finish
22
- end
23
- else
24
- send start_method, helo, user, secret, authtype
25
- return self
26
- end
27
- end
28
-
29
- private
30
-
31
- def do_tls_start(helodomain, user, secret, authtype)
32
- raise IOError, 'SMTP session already started' if @started
33
-
34
- if VERSION == '1.8.6'
35
- check_auth_args user, secret, authtype if user or secret
36
- elsif VERSION == '1.8.7'
37
- check_auth_args user, secret
38
- end
39
-
40
- sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
41
- @socket = Net::InternetMessageIO.new(sock)
42
- @socket.read_timeout = 60 #@read_timeout
43
- @socket.debug_output = STDERR #@debug_output
44
-
45
- check_response(critical { recv_response() })
46
- do_helo(helodomain)
47
-
48
- raise 'openssl library not installed' unless defined?(OpenSSL)
49
- starttls
50
- ssl = OpenSSL::SSL::SSLSocket.new(sock)
51
- ssl.sync_close = true
52
- ssl.connect
53
- @socket = Net::InternetMessageIO.new(ssl)
54
- @socket.read_timeout = 60 #@read_timeout
55
- @socket.debug_output = STDERR #@debug_output
56
- do_helo(helodomain)
57
-
58
- authenticate user, secret, authtype if user
59
- @started = true
60
- ensure
61
- unless @started
62
- # authentication failed, cancel connection.
63
- @socket.close if not @started and @socket and not @socket.closed?
64
- @socket = nil
65
- end
66
- end
67
-
68
- def do_ssl_start(helodomain, user, secret, authtype)
69
- raise IOError, 'SMTP session already started' if @started
70
- check_auth_args user, secret, authtype if user or secret
71
-
72
- sock = timeout(@open_timeout) { TCPSocket.open(@address, @port) }
73
- raise 'openssl library not installed' unless defined?(OpenSSL)
74
- ssl = OpenSSL::SSL::SSLSocket.new(sock)
75
- ssl.sync_close = true
76
- ssl.connect
77
- @socket = Net::InternetMessageIO.new(ssl)
78
- @socket.read_timeout = 60 #@read_timeout
79
- @socket.debug_output = STDERR #@debug_output
80
-
81
- check_response(critical { recv_response() })
82
- do_helo(helodomain)
83
-
84
- do_helo(helodomain)
85
-
86
- authenticate user, secret, authtype if user
87
- @started = true
88
- ensure
89
- unless @started
90
- # authentication failed, cancel connection.
91
- @socket.close if not @started and @socket and not @socket.closed?
92
- @socket = nil
93
- end
94
- end
95
-
96
- def do_helo(helodomain)
97
- begin
98
- if @esmtp
99
- ehlo helodomain
100
- else
101
- helo helodomain
102
- end
103
- rescue Net::ProtocolError
104
- if @esmtp
105
- @esmtp = false
106
- @error_occured = false
107
- retry
108
- end
109
- raise
110
- end
111
- end
112
-
113
- def starttls
114
- getok('STARTTLS')
115
- end
116
-
117
- def quit
118
- begin
119
- getok('QUIT')
120
- rescue EOFError, OpenSSL::SSL::SSLError
121
- end
122
- end
123
- end