webroar 0.3.1 → 0.4.0

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.
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_server.c CHANGED
@@ -18,12 +18,14 @@
18
18
  */
19
19
  #include <wr_request.h>
20
20
 
21
+ extern config_t *Config;
22
+
21
23
  static struct ev_loop *loop; //Event loop
22
24
  struct ev_idle idle_watcher; //Ideal watcher
23
25
  /************ Private functions **************************/
24
26
 
25
27
  /** Create Server */
26
- wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
28
+ wr_svr_t* wr_svr_new(struct ev_loop* loop) {
27
29
  LOG_FUNCTION
28
30
  wr_svr_t* server = wr_malloc(wr_svr_t);
29
31
 
@@ -35,13 +37,12 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
35
37
  //Get ebb server object
36
38
  ebb_server_init(&(server->ebb_svr),loop);
37
39
 
38
- if(conf->server->flag&WR_SVR_SSL_SUPPORT) {
39
40
  #ifdef HAVE_GNUTLS
40
-
41
+ if(Config->Server.flag & SERVER_SSL_SUPPORT) {
41
42
  //Initialize ebb server for SSL support
42
43
  ebb_server_init(&(server->secure_ebb_svr),loop);
43
44
  // Add GnuTLS support
44
- if(ebb_server_set_secure(&(server->secure_ebb_svr), conf->server->certificate.str, conf->server->key.str) < 0) {
45
+ if(ebb_server_set_secure(&(server->secure_ebb_svr), Config->Server.SSL.certificate.str, Config->Server.SSL.key.str) < 0) {
45
46
  ebb_server_unlisten(&(server->secure_ebb_svr));
46
47
  //free(server);
47
48
  //return NULL;
@@ -50,10 +51,9 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
50
51
  server->secure_ebb_svr.data = server;
51
52
  server->secure_ebb_svr.new_connection = wr_new_conn_cb;
52
53
  }
53
-
54
+ }
54
55
  #endif
55
56
 
56
- }
57
57
  server->ebb_svr.data = server;
58
58
  server->ebb_svr.new_connection = wr_new_conn_cb;
59
59
 
@@ -61,17 +61,26 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
61
61
  server->ctl = wr_svr_ctl_new();
62
62
  if(!server->ctl) {
63
63
  ebb_server_unlisten(&(server->ebb_svr));
64
+ #ifdef HAVE_GNUTLS
65
+ if(Config->Server.flag & SERVER_SSL_SUPPORT) {
66
+ ebb_server_unlisten(&(server->secure_ebb_svr));
67
+ }
68
+ #endif
64
69
  free(server);
65
70
  LOG_ERROR(WARN, "%s() control object allocation failed. Returning ...",__FUNCTION__);
66
71
  return NULL;
67
72
  }
68
73
 
69
- server->conf = conf;
70
74
  server->apps = NULL;
71
75
  server->default_app = NULL;
72
76
  server->resolver = wr_req_resolver_new();
73
77
  if(server->resolver == NULL) {
74
78
  ebb_server_unlisten(&(server->ebb_svr));
79
+ #ifdef HAVE_GNUTLS
80
+ if(Config->Server.flag & SERVER_SSL_SUPPORT) {
81
+ ebb_server_unlisten(&(server->secure_ebb_svr));
82
+ }
83
+ #endif
75
84
  free(server);
76
85
  LOG_ERROR(WARN, "Resolver object allocation failed. Returning ...");
77
86
  return NULL;
@@ -81,19 +90,19 @@ wr_svr_t* wr_svr_new(struct ev_loop* loop, wr_conf_t* conf) {
81
90
  }
82
91
 
83
92
  /** Attach ideal watcher with event loop */
84
- static inline void attach_idle_watcher() {
93
+ void attach_idle_watcher() {
85
94
  if(!ev_is_active(&idle_watcher)) {
86
95
  ev_idle_start (loop, &idle_watcher);
87
96
  }
88
97
  }
89
98
 
90
99
  /** Detach Ideal watcher from event loop*/
91
- static inline void detach_idle_watcher() {
100
+ void detach_idle_watcher() {
92
101
  ev_idle_stop(loop, &idle_watcher);
93
102
  }
94
103
 
95
104
  /** Callback function for Ideal watcher */
96
- static inline void idle_cb (struct ev_loop *loop, struct ev_idle *w, int revents) {
105
+ void idle_cb (struct ev_loop *loop, struct ev_idle *w, int revents) {
97
106
  /*if(clients_in_use_p()) {
98
107
  rb_thread_schedule();
99
108
  } else if(!rb_thread_alone()) {*/
@@ -116,35 +125,35 @@ static inline void idle_cb (struct ev_loop *loop, struct ev_idle *w, int revents
116
125
  *****************************************************/
117
126
 
118
127
  /** Starts listening for requests */
119
- int wr_svr_init(wr_svr_t** server, wr_conf_t *conf) {
128
+ int wr_svr_init(wr_svr_t** server) {
120
129
  //TODO: attach idle watcher
121
130
  //ev_idle_init (&idle_watcher, idle_cb);
122
131
  //attach_idle_watcher();
123
132
 
124
133
  //Create and initialize Server object
125
134
  loop = ev_default_loop (0);
126
- *server = wr_svr_new(loop, conf);
135
+ *server = wr_svr_new(loop);
127
136
 
128
137
  if(*server == NULL) {
129
138
  LOG_ERROR(SEVERE,"Server is NULL");
130
139
  return -1;
131
140
  }
132
141
 
133
- (*server)->conf = conf;
134
- if(conf->server->flag&WR_SVR_SSL_SUPPORT) {
135
142
  #ifdef HAVE_GNUTLS
136
- LOG_DEBUG(DEBUG,"SSL port = %d", conf->server->ssl_port);
137
- if(ebb_server_listen_on_port(&(*server)->secure_ebb_svr, conf->server->ssl_port) < 0) {
138
- LOG_ERROR(SEVERE,"ebb_server_listen_on_port(): failed. Port number = %d",conf->server->ssl_port);
139
- printf("Port %d is already in use.\n", conf->server->ssl_port);
143
+ if(Config->Server.flag & SERVER_SSL_SUPPORT) {
144
+ LOG_DEBUG(DEBUG,"SSL port = %d", Config->Server.SSL.port);
145
+ if(ebb_server_listen_on_port(&(*server)->secure_ebb_svr, Config->Server.SSL.port) < 0) {
146
+ LOG_ERROR(SEVERE,"ebb_server_listen_on_port(): failed. Port number = %d",Config->Server.SSL.port);
147
+ printf("Port %d is already in use.\n", Config->Server.SSL.port);
148
+ return -1;
140
149
  }
141
- #endif
142
-
143
150
  }
144
- LOG_DEBUG(DEBUG,"port = %d", conf->server->port);
151
+ #endif
152
+
153
+ LOG_DEBUG(DEBUG,"port = %d", Config->Server.port);
145
154
  //ebb server starts listening for request
146
- if(ebb_server_listen_on_port(&(*server)->ebb_svr, conf->server->port) < 1) {
147
- printf("Port %d is already in use.\n", conf->server->port);
155
+ if(ebb_server_listen_on_port(&(*server)->ebb_svr, Config->Server.port) < 1) {
156
+ printf("Port %d is already in use.\n", Config->Server.port);
148
157
  return -1;
149
158
  }
150
159
 
@@ -152,8 +161,10 @@ int wr_svr_init(wr_svr_t** server, wr_conf_t *conf) {
152
161
  (*server)->on_app_remove = wr_app_remove_cb;
153
162
  (*server)->on_app_reload = wr_app_reload_cb;
154
163
  (*server)->on_wkr_add = wr_wkr_add_cb;
164
+ (*server)->on_wkr_add_error = wr_wkr_add_error_cb;
155
165
  (*server)->on_wkr_remove = wr_wkr_remove_cb;
156
166
  (*server)->on_wkr_ping = wr_wkr_ping_cb;
167
+ (*server)->on_wkr_conf_req = wr_app_conf_req_cb;
157
168
  (*server)->default_app = (*server)->static_app = NULL;
158
169
 
159
170
  return 0;
@@ -168,11 +179,11 @@ void wr_svr_free(wr_svr_t* server) {
168
179
  #ifdef HAVE_GNUTLS
169
180
 
170
181
  //Destroy ebb server object used for SSL
171
- ebb_server_unlisten(&(server->secure_ebb_svr));
182
+ if(Config->Server.flag & SERVER_SSL_SUPPORT)
183
+ ebb_server_unlisten(&(server->secure_ebb_svr));
172
184
 
173
185
  #endif
174
186
 
175
-
176
187
  // Destroy application list
177
188
  if(server->apps) {
178
189
  wr_app_free(server->apps);
@@ -186,7 +197,6 @@ void wr_svr_free(wr_svr_t* server) {
186
197
 
187
198
  //Destroy Server Control object
188
199
  wr_svr_ctl_free(server->ctl);
189
- wr_conf_free(server->conf);
190
200
  wr_req_resolver_free(server->resolver);
191
201
  free(server);
192
202
  }
data/src/head/wr_server.h CHANGED
@@ -21,7 +21,6 @@
21
21
 
22
22
  #include <wr_configurator.h>
23
23
  #include <ebb.h>
24
- #include <wr_config.h>
25
24
 
26
25
  typedef struct wr_app_s wr_app_t;
27
26
  typedef struct wr_svr_ctl_s wr_svr_ctl_t;
@@ -35,16 +34,15 @@ typedef void (*wr_ctl_signal_cb) (wr_ctl_t*, const wr_ctl_msg_t*);
35
34
  typedef struct {
36
35
  ebb_server ebb_svr; /**< Ebb server */
37
36
 
38
- ebb_server secure_ebb_svr; /**< Ebb server */
39
37
  #ifdef HAVE_GNUTLS
38
+ ebb_server secure_ebb_svr; /**< Ebb server */
40
39
  #endif
41
40
 
42
- wr_conf_t* conf; /**< Configuration pointer */
43
41
  wr_app_t* apps; /**< Application list */
44
42
  wr_app_t* default_app;
45
43
  wr_app_t* static_app;
46
44
  wr_svr_ctl_t* ctl; /**< Server control pointer */
47
- char err_msg[WR_MSG_SIZE]; /**< Error message */
45
+ char err_msg[STR_SIZE1KB]; /**< Error message */
48
46
  wr_req_resolver_t *resolver;
49
47
  short is_running; /**< Keep alive flag */
50
48
 
@@ -55,10 +53,12 @@ typedef struct {
55
53
  wr_ctl_signal_cb on_wkr_add;
56
54
  wr_ctl_signal_cb on_wkr_remove;
57
55
  wr_ctl_signal_cb on_wkr_ping;
56
+ wr_ctl_signal_cb on_wkr_add_error;
57
+ wr_ctl_signal_cb on_wkr_conf_req;
58
58
  }wr_svr_t;
59
59
 
60
60
  /** Initialize Server */
61
- int wr_svr_init(wr_svr_t**, wr_conf_t*);
61
+ int wr_svr_init(wr_svr_t**);
62
62
  /** Destroy Server */
63
63
  void wr_svr_free(wr_svr_t*);
64
64