puma 2.2.0 → 8.0.2
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.
- checksums.yaml +7 -0
- data/History.md +3334 -0
- data/LICENSE +23 -20
- data/README.md +387 -100
- data/bin/puma-wild +25 -0
- data/bin/pumactl +1 -1
- data/docs/5.0-Upgrade.md +98 -0
- data/docs/6.0-Upgrade.md +56 -0
- data/docs/7.0-Upgrade.md +52 -0
- data/docs/8.0-Upgrade.md +100 -0
- data/docs/architecture.md +74 -0
- data/docs/compile_options.md +55 -0
- data/docs/deployment.md +137 -0
- data/docs/fork_worker.md +41 -0
- data/docs/grpc.md +62 -0
- data/docs/images/favicon.svg +1 -0
- data/docs/images/puma-connection-flow-no-reactor.png +0 -0
- data/docs/images/puma-connection-flow.png +0 -0
- data/docs/images/puma-general-arch.png +0 -0
- data/docs/images/running-puma.svg +1 -0
- data/docs/images/standard-logo.svg +1 -0
- data/docs/java_options.md +54 -0
- data/docs/jungle/README.md +9 -0
- data/docs/jungle/rc.d/README.md +74 -0
- data/docs/jungle/rc.d/puma +61 -0
- data/docs/jungle/rc.d/puma.conf +10 -0
- data/docs/kubernetes.md +73 -0
- data/docs/nginx.md +5 -5
- data/docs/plugins.md +42 -0
- data/docs/rails_dev_mode.md +28 -0
- data/docs/restart.md +65 -0
- data/docs/signals.md +98 -0
- data/docs/stats.md +148 -0
- data/docs/systemd.md +253 -0
- data/docs/testing_benchmarks_local_files.md +150 -0
- data/docs/testing_test_rackup_ci_files.md +36 -0
- data/ext/puma_http11/PumaHttp11Service.java +2 -2
- data/ext/puma_http11/extconf.rb +59 -2
- data/ext/puma_http11/http11_parser.c +319 -487
- data/ext/puma_http11/http11_parser.h +15 -13
- data/ext/puma_http11/http11_parser.java.rl +64 -94
- data/ext/puma_http11/http11_parser.rl +27 -24
- data/ext/puma_http11/http11_parser_common.rl +8 -8
- data/ext/puma_http11/mini_ssl.c +696 -38
- data/ext/puma_http11/no_ssl/PumaHttp11Service.java +15 -0
- data/ext/puma_http11/org/jruby/puma/EnvKey.java +241 -0
- data/ext/puma_http11/org/jruby/puma/Http11.java +241 -145
- data/ext/puma_http11/org/jruby/puma/Http11Parser.java +174 -221
- data/ext/puma_http11/org/jruby/puma/MiniSSL.java +413 -193
- data/ext/puma_http11/puma_http11.c +183 -175
- data/lib/puma/app/status.rb +77 -29
- data/lib/puma/binder.rb +349 -119
- data/lib/puma/cli.rb +163 -801
- data/lib/puma/client.rb +627 -144
- data/lib/puma/client_env.rb +171 -0
- data/lib/puma/cluster/worker.rb +183 -0
- data/lib/puma/cluster/worker_handle.rb +127 -0
- data/lib/puma/cluster.rb +634 -0
- data/lib/puma/cluster_accept_loop_delay.rb +91 -0
- data/lib/puma/commonlogger.rb +115 -0
- data/lib/puma/configuration.rb +420 -198
- data/lib/puma/const.rb +266 -115
- data/lib/puma/control_cli.rb +219 -120
- data/lib/puma/detect.rb +56 -2
- data/lib/puma/dsl.rb +1562 -0
- data/lib/puma/error_logger.rb +115 -0
- data/lib/puma/events.rb +44 -60
- data/lib/puma/io_buffer.rb +48 -5
- data/lib/puma/jruby_restart.rb +2 -51
- data/lib/puma/json_serialization.rb +96 -0
- data/lib/puma/launcher/bundle_pruner.rb +102 -0
- data/lib/puma/launcher.rb +501 -0
- data/lib/puma/log_writer.rb +153 -0
- data/lib/puma/minissl/context_builder.rb +96 -0
- data/lib/puma/minissl.rb +355 -37
- data/lib/puma/null_io.rb +79 -12
- data/lib/puma/plugin/systemd.rb +90 -0
- data/lib/puma/plugin/tmp_restart.rb +36 -0
- data/lib/puma/plugin.rb +111 -0
- data/lib/puma/rack/builder.rb +297 -0
- data/lib/puma/rack/urlmap.rb +93 -0
- data/lib/puma/rack_default.rb +21 -4
- data/lib/puma/reactor.rb +102 -133
- data/lib/puma/response.rb +532 -0
- data/lib/puma/runner.rb +211 -0
- data/lib/puma/sd_notify.rb +146 -0
- data/lib/puma/server.rb +582 -445
- data/lib/puma/server_plugin_control.rb +32 -0
- data/lib/puma/single.rb +72 -0
- data/lib/puma/state_file.rb +69 -0
- data/lib/puma/thread_pool.rb +389 -57
- data/lib/puma/util.rb +125 -0
- data/lib/puma.rb +80 -6
- data/lib/rack/handler/puma.rb +125 -47
- data/tools/Dockerfile +26 -0
- data/tools/trickletest.rb +44 -0
- metadata +88 -148
- data/COPYING +0 -55
- data/Gemfile +0 -10
- data/History.txt +0 -302
- data/Manifest.txt +0 -60
- data/Rakefile +0 -165
- data/TODO +0 -5
- data/docs/config.md +0 -0
- data/ext/puma_http11/ext_help.h +0 -15
- data/ext/puma_http11/io_buffer.c +0 -154
- data/lib/puma/accept_nonblock.rb +0 -23
- data/lib/puma/capistrano.rb +0 -34
- data/lib/puma/compat.rb +0 -11
- data/lib/puma/daemon_ext.rb +0 -20
- data/lib/puma/delegation.rb +0 -11
- data/lib/puma/java_io_buffer.rb +0 -45
- data/lib/puma/rack_patch.rb +0 -25
- data/puma.gemspec +0 -45
- data/test/test_app_status.rb +0 -88
- data/test/test_cli.rb +0 -171
- data/test/test_config.rb +0 -16
- data/test/test_http10.rb +0 -27
- data/test/test_http11.rb +0 -126
- data/test/test_integration.rb +0 -154
- data/test/test_iobuffer.rb +0 -38
- data/test/test_minissl.rb +0 -25
- data/test/test_null_io.rb +0 -31
- data/test/test_persistent.rb +0 -238
- data/test/test_puma_server.rb +0 -224
- data/test/test_rack_handler.rb +0 -10
- data/test/test_rack_server.rb +0 -141
- data/test/test_thread_pool.rb +0 -146
- data/test/test_unix_socket.rb +0 -39
- data/test/test_ws.rb +0 -89
- data/tools/jungle/init.d/README.md +0 -54
- data/tools/jungle/init.d/puma +0 -332
- data/tools/jungle/init.d/run-puma +0 -3
- data/tools/jungle/upstart/README.md +0 -61
- data/tools/jungle/upstart/puma-manager.conf +0 -31
- data/tools/jungle/upstart/puma.conf +0 -52
data/lib/puma/app/status.rb
CHANGED
|
@@ -1,55 +1,103 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
require_relative '../json_serialization'
|
|
3
|
+
|
|
1
4
|
module Puma
|
|
2
5
|
module App
|
|
6
|
+
# Check out {#call}'s source code to see what actions this web application
|
|
7
|
+
# can respond to.
|
|
3
8
|
class Status
|
|
4
|
-
def initialize(server, cli)
|
|
5
|
-
@server = server
|
|
6
|
-
@cli = cli
|
|
7
|
-
@auth_token = nil
|
|
8
|
-
end
|
|
9
9
|
OK_STATUS = '{ "status": "ok" }'.freeze
|
|
10
|
+
READ_ONLY_COMMANDS = %w[gc-stats stats].freeze
|
|
10
11
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
12
|
+
# @param launcher [::Puma::Launcher]
|
|
13
|
+
# @param token [String, nil] the token used for authentication
|
|
14
|
+
# @param data_only [Boolean] if true, restrict to read-only data commands
|
|
15
|
+
#
|
|
16
|
+
def initialize(launcher, token: nil, data_only: false)
|
|
17
|
+
@launcher = launcher
|
|
18
|
+
@auth_token = token
|
|
19
|
+
@enabled_commands = READ_ONLY_COMMANDS if data_only
|
|
16
20
|
end
|
|
17
21
|
|
|
22
|
+
# most commands call methods in `::Puma::Launcher` based on command in
|
|
23
|
+
# `env['PATH_INFO']`
|
|
18
24
|
def call(env)
|
|
19
25
|
unless authenticate(env)
|
|
20
26
|
return rack_response(403, 'Invalid auth token', 'text/plain')
|
|
21
27
|
end
|
|
22
28
|
|
|
23
|
-
case
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
29
|
+
# resp_type is processed by following case statement, return
|
|
30
|
+
# is a number (status) or a string used as the body of a 200 response
|
|
31
|
+
command = env['PATH_INFO'][/\/([^\/]+)$/, 1]
|
|
32
|
+
if @enabled_commands && !@enabled_commands.include?(command)
|
|
33
|
+
return rack_response(404, "Command #{command.inspect} unavailable", 'text/plain')
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
resp_type =
|
|
37
|
+
case command
|
|
38
|
+
when 'stop'
|
|
39
|
+
@launcher.stop ; 200
|
|
40
|
+
|
|
41
|
+
when 'halt'
|
|
42
|
+
@launcher.halt ; 200
|
|
43
|
+
|
|
44
|
+
when 'restart'
|
|
45
|
+
@launcher.restart ; 200
|
|
46
|
+
|
|
47
|
+
when 'phased-restart'
|
|
48
|
+
@launcher.phased_restart ? 200 : 404
|
|
49
|
+
|
|
50
|
+
when 'refork'
|
|
51
|
+
@launcher.refork ? 200 : 404
|
|
27
52
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
return rack_response(200, OK_STATUS)
|
|
53
|
+
when 'reload-worker-directory'
|
|
54
|
+
@launcher.send(:reload_worker_directory) ? 200 : 404
|
|
31
55
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
56
|
+
when 'gc'
|
|
57
|
+
GC.start ; 200
|
|
58
|
+
|
|
59
|
+
when 'gc-stats'
|
|
60
|
+
Puma::JSONSerialization.generate GC.stat
|
|
61
|
+
|
|
62
|
+
when 'stats'
|
|
63
|
+
Puma::JSONSerialization.generate @launcher.stats
|
|
64
|
+
|
|
65
|
+
when 'thread-backtraces'
|
|
66
|
+
backtraces = []
|
|
67
|
+
@launcher.thread_status do |name, backtrace|
|
|
68
|
+
backtraces << { name: name, backtrace: backtrace }
|
|
69
|
+
end
|
|
70
|
+
Puma::JSONSerialization.generate backtraces
|
|
35
71
|
|
|
36
|
-
return rack_response(200, OK_STATUS)
|
|
37
72
|
else
|
|
38
|
-
return rack_response(
|
|
73
|
+
return rack_response(404, "Unsupported action", 'text/plain')
|
|
39
74
|
end
|
|
40
75
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
76
|
+
case resp_type
|
|
77
|
+
when String
|
|
78
|
+
rack_response 200, resp_type
|
|
79
|
+
when 200
|
|
80
|
+
rack_response 200, OK_STATUS
|
|
81
|
+
when 404
|
|
82
|
+
str = env['PATH_INFO'][/\/(\S+)/, 1].tr '-', '_'
|
|
83
|
+
rack_response 404, "{ \"error\": \"#{str} not available\" }"
|
|
45
84
|
end
|
|
46
|
-
|
|
47
|
-
rack_response 404, "Unsupported action", 'text/plain'
|
|
48
85
|
end
|
|
49
86
|
|
|
50
87
|
private
|
|
88
|
+
|
|
89
|
+
def authenticate(env)
|
|
90
|
+
return true unless @auth_token
|
|
91
|
+
env['QUERY_STRING'].to_s.split(/[&;]/).include? "token=#{@auth_token}"
|
|
92
|
+
end
|
|
93
|
+
|
|
51
94
|
def rack_response(status, body, content_type='application/json')
|
|
52
|
-
|
|
95
|
+
headers = {
|
|
96
|
+
'content-type' => content_type,
|
|
97
|
+
'content-length' => body.bytesize.to_s
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
[status, headers, [body]]
|
|
53
101
|
end
|
|
54
102
|
end
|
|
55
103
|
end
|