passenger 5.3.5 → 5.3.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (211) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +13 -0
  3. data/README.md +2 -1
  4. data/Rakefile +0 -5
  5. data/build/agent.rb +2 -1
  6. data/build/cxx_tests.rb +18 -20
  7. data/build/integration_tests.rb +6 -2
  8. data/build/support/cxx_dependency_map.rb +2019 -1966
  9. data/dev/colorize-logs +272 -0
  10. data/src/agent/Core/AdminPanelConnector.h +3 -3
  11. data/src/agent/Core/ApiServer.h +4 -4
  12. data/src/agent/Core/ApplicationPool/BasicProcessInfo.h +2 -2
  13. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +2 -2
  14. data/src/agent/Core/ApplicationPool/Implementation.cpp +5 -5
  15. data/src/agent/Core/ApplicationPool/Pool.h +4 -4
  16. data/src/agent/Core/ApplicationPool/Process.h +10 -15
  17. data/src/agent/Core/ApplicationPool/Socket.h +2 -2
  18. data/src/agent/Core/ApplicationPool/TestSession.h +3 -3
  19. data/src/agent/Core/Config.h +4 -2
  20. data/src/agent/Core/Controller.h +4 -4
  21. data/src/agent/Core/Controller/Config.h +1 -1
  22. data/src/agent/Core/Controller/SendRequest.cpp +2 -2
  23. data/src/agent/Core/Controller/TurboCaching.h +2 -2
  24. data/src/agent/Core/CoreMain.cpp +2 -2
  25. data/src/agent/Core/OptionParser.h +2 -2
  26. data/src/agent/Core/ResponseCache.h +3 -3
  27. data/src/agent/Core/SecurityUpdateChecker.h +2 -2
  28. data/src/agent/Core/SpawningKit/Config.h +2 -1
  29. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +1 -1
  30. data/src/agent/Core/SpawningKit/Context.h +1 -1
  31. data/src/agent/Core/SpawningKit/DirectSpawner.h +3 -3
  32. data/src/agent/Core/SpawningKit/DummySpawner.h +3 -3
  33. data/src/agent/Core/SpawningKit/ErrorRenderer.h +1 -1
  34. data/src/agent/Core/SpawningKit/Exceptions.h +2 -2
  35. data/src/agent/Core/SpawningKit/Factory.h +1 -1
  36. data/src/agent/Core/SpawningKit/Handshake/BackgroundIOCapturer.h +1 -1
  37. data/src/agent/Core/SpawningKit/Handshake/Perform.h +13 -2
  38. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +3 -3
  39. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +1 -1
  40. data/src/agent/Core/SpawningKit/Journey.h +4 -5
  41. data/src/agent/Core/SpawningKit/PipeWatcher.h +1 -1
  42. data/src/agent/Core/SpawningKit/Result.h +20 -8
  43. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h +1 -1
  44. data/src/agent/Core/SpawningKit/SmartSpawner.h +6 -6
  45. data/src/agent/Core/SpawningKit/Spawner.h +2 -2
  46. data/src/agent/Core/TelemetryCollector.h +13 -7
  47. data/src/agent/ExecHelper/ExecHelperMain.cpp +1 -1
  48. data/src/agent/README.md +1 -1
  49. data/src/agent/Shared/ApiAccountUtils.h +1 -1
  50. data/src/agent/Shared/ApiServerUtils.h +3 -3
  51. data/src/agent/Shared/ApplicationPoolApiKey.h +2 -2
  52. data/src/agent/Shared/Fundamentals/Initialization.cpp +4 -4
  53. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +1 -1
  54. data/src/agent/SystemMetrics/SystemMetricsMain.cpp +4 -3
  55. data/src/agent/Watchdog/ApiServer.h +3 -3
  56. data/src/agent/Watchdog/Config.h +3 -2
  57. data/src/agent/Watchdog/CoreWatcher.cpp +2 -2
  58. data/src/agent/Watchdog/WatchdogMain.cpp +93 -27
  59. data/src/apache2_module/Config.cpp +14 -14
  60. data/src/apache2_module/Config.h +8 -16
  61. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +505 -491
  62. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp.cxxcodebuilder +39 -17
  63. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp +24 -1
  64. data/src/apache2_module/ConfigGeneral/AutoGeneratedSetterFuncs.cpp.cxxcodebuilder +31 -1
  65. data/src/{cxx_supportlib/Utils/MemoryBarrier.h → apache2_module/ConfigGeneral/Common.h} +17 -25
  66. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +12 -1
  67. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp.cxxcodebuilder +16 -1
  68. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +19 -5
  69. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp.cxxcodebuilder +26 -9
  70. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +6 -1
  71. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp.cxxcodebuilder +10 -1
  72. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -1
  73. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp.cxxcodebuilder +11 -1
  74. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +23 -1
  75. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h.cxxcodebuilder +34 -1
  76. data/src/apache2_module/Hooks.cpp +3 -3
  77. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h +24 -1
  78. data/src/apache2_module/ServerConfig/AutoGeneratedStruct.h.cxxcodebuilder +36 -1
  79. data/src/cxx_supportlib/{Utils → Algorithms}/Hasher.cpp +2 -2
  80. data/src/cxx_supportlib/{Utils → Algorithms}/Hasher.h +4 -4
  81. data/src/cxx_supportlib/AppTypeDetector/Detector.h +1 -1
  82. data/src/cxx_supportlib/ConfigKit/Schema.h +2 -2
  83. data/src/cxx_supportlib/ConfigKit/Store.h +1 -1
  84. data/src/cxx_supportlib/Constants.h +1 -1
  85. data/src/cxx_supportlib/{Utils → DataStructures}/HashMap.h +4 -4
  86. data/src/cxx_supportlib/DataStructures/HashedStaticString.h +5 -5
  87. data/src/cxx_supportlib/DataStructures/LString.h +3 -3
  88. data/src/cxx_supportlib/{Utils → DataStructures}/StringMap.h +36 -36
  89. data/src/cxx_supportlib/FileTools/FileManip.cpp +1 -1
  90. data/src/cxx_supportlib/FileTools/PathManip.cpp +2 -2
  91. data/src/cxx_supportlib/FileTools/PathSecurityCheck.cpp +1 -1
  92. data/src/cxx_supportlib/Hooks.h +2 -2
  93. data/src/cxx_supportlib/{Utils → IOTools}/BufferedIO.h +5 -5
  94. data/src/cxx_supportlib/{Utils → IOTools}/IOUtils.cpp +2 -2
  95. data/src/cxx_supportlib/{Utils → IOTools}/IOUtils.h +3 -3
  96. data/src/cxx_supportlib/{Utils → IOTools}/MessageIO.h +7 -7
  97. data/src/cxx_supportlib/{MessageReadersWriters.h → IOTools/MessageSerialization.h} +5 -5
  98. data/src/cxx_supportlib/InstanceDirectory.h +4 -4
  99. data/src/cxx_supportlib/Integrations/LibevJsonUtils.h +3 -3
  100. data/src/cxx_supportlib/{Utils → JsonTools}/JsonUtils.h +5 -5
  101. data/src/cxx_supportlib/LoggingKit/Context.h +2 -2
  102. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +3 -3
  103. data/src/cxx_supportlib/MemoryKit/mbuf.cpp +2 -2
  104. data/src/cxx_supportlib/ProcessManagement/Spawn.cpp +5 -5
  105. data/src/cxx_supportlib/ProcessManagement/Utils.h +10 -0
  106. data/src/cxx_supportlib/RandomGenerator.h +2 -2
  107. data/src/cxx_supportlib/{Crypto.cpp → SecurityKit/Crypto.cpp} +4 -4
  108. data/src/cxx_supportlib/{Crypto.h → SecurityKit/Crypto.h} +4 -4
  109. data/src/cxx_supportlib/{Utils → SecurityKit}/MemZeroGuard.h +0 -0
  110. data/src/cxx_supportlib/ServerKit/AcceptLoadBalancer.h +2 -2
  111. data/src/cxx_supportlib/ServerKit/Channel.h +1 -1
  112. data/src/cxx_supportlib/ServerKit/Context.h +2 -2
  113. data/src/cxx_supportlib/ServerKit/FileBufferedChannel.h +1 -1
  114. data/src/cxx_supportlib/ServerKit/HttpHeaderParser.h +3 -3
  115. data/src/cxx_supportlib/ServerKit/HttpHeaderParserState.h +2 -2
  116. data/src/cxx_supportlib/ServerKit/HttpServer.h +16 -10
  117. data/src/cxx_supportlib/ServerKit/Server.h +3 -3
  118. data/src/cxx_supportlib/{Utils → StrIntTools}/DateParsing.h +5 -5
  119. data/src/cxx_supportlib/{Utils → StrIntTools}/StrIntUtils.cpp +3 -3
  120. data/src/cxx_supportlib/{Utils → StrIntTools}/StrIntUtils.h +0 -0
  121. data/src/cxx_supportlib/{Utils → StrIntTools}/StrIntUtilsNoStrictAliasing.cpp +2 -2
  122. data/src/cxx_supportlib/{Utils → StrIntTools}/StringScanning.h +5 -5
  123. data/src/cxx_supportlib/{Utils → StrIntTools}/Template.h +30 -5
  124. data/src/cxx_supportlib/SystemTools/ContainerHelpers.h +34 -0
  125. data/src/cxx_supportlib/{Utils → SystemTools}/ProcessMetricsCollector.h +6 -6
  126. data/src/cxx_supportlib/{Utils → SystemTools}/SystemMetricsCollector.h +3 -3
  127. data/src/cxx_supportlib/{Utils → SystemTools}/SystemTime.cpp +1 -1
  128. data/src/cxx_supportlib/{Utils → SystemTools}/SystemTime.h +0 -0
  129. data/src/cxx_supportlib/SystemTools/UserDatabase.h +1 -1
  130. data/src/cxx_supportlib/Utils.cpp +2 -2
  131. data/src/cxx_supportlib/Utils/CachedFileStat.hpp +3 -3
  132. data/src/cxx_supportlib/Utils/Curl.h +2 -2
  133. data/src/cxx_supportlib/Utils/FileChangeChecker.h +2 -2
  134. data/src/cxx_supportlib/Utils/MessagePassing.h +1 -1
  135. data/src/cxx_supportlib/Utils/SpeedMeter.h +2 -2
  136. data/src/cxx_supportlib/Utils/Timer.h +2 -2
  137. data/src/cxx_supportlib/Utils/VariantMap.h +3 -3
  138. data/src/cxx_supportlib/WatchdogLauncher.h +3 -3
  139. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +1 -1
  140. data/src/cxx_supportlib/WrapperRegistry/Registry.h +1 -1
  141. data/src/cxx_supportlib/vendor-modified/psg_sysqueue.h +3 -0
  142. data/src/ruby_supportlib/phusion_passenger.rb +1 -1
  143. data/src/ruby_supportlib/phusion_passenger/common_library.rb +11 -11
  144. data/src/ruby_supportlib/phusion_passenger/config/agent_compiler.rb +4 -4
  145. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +1 -1
  146. data/src/ruby_supportlib/phusion_passenger/message_channel.rb +2 -2
  147. data/src/ruby_supportlib/phusion_passenger/packaging.rb +20 -19
  148. data/src/ruby_supportlib/phusion_passenger/platform_info/apache.rb +22 -4
  149. data/src/ruby_supportlib/phusion_passenger/platform_info/ruby.rb +33 -13
  150. data/src/schema_printer/SchemaPrinterMain.cpp +2 -0
  151. metadata +28 -86
  152. data/.editorconfig +0 -134
  153. data/CODE_OF_CONDUCT.md +0 -52
  154. data/dev/boost-patches/0001-Patch-boost-thread-so-that-oxt-thread-can-use-it.patch +0 -48
  155. data/dev/boost-patches/0002-Make-boost-thread_interrupted-derive-from-oxt-tracab.patch +0 -33
  156. data/dev/boost-patches/0003-Disable-a-Clang-pragma-to-prevent-warnings-on-OS-X.patch +0 -25
  157. data/dev/ci/README.md +0 -134
  158. data/dev/ci/lib/functions.sh +0 -129
  159. data/dev/ci/lib/set-container-envvars.sh +0 -53
  160. data/dev/ci/lib/setup-container.sh +0 -46
  161. data/dev/ci/run-tests-natively +0 -24
  162. data/dev/ci/run-tests-with-docker +0 -42
  163. data/dev/ci/scripts/debug-console-wrapper.sh +0 -29
  164. data/dev/ci/scripts/docker-entrypoint-stage2.sh +0 -17
  165. data/dev/ci/scripts/docker-entrypoint.sh +0 -17
  166. data/dev/ci/scripts/inituidgid +0 -17
  167. data/dev/ci/scripts/run-tests-natively-stage2.sh +0 -17
  168. data/dev/ci/scripts/setup-host-natively.sh +0 -11
  169. data/dev/ci/setup-host +0 -56
  170. data/dev/ci/tests/apache2/run +0 -6
  171. data/dev/ci/tests/apache2/setup +0 -4
  172. data/dev/ci/tests/binaries/Jenkinsfile +0 -105
  173. data/dev/ci/tests/binaries/build-linux +0 -38
  174. data/dev/ci/tests/binaries/build-macos +0 -40
  175. data/dev/ci/tests/binaries/prepare-macos +0 -38
  176. data/dev/ci/tests/binaries/test-linux +0 -45
  177. data/dev/ci/tests/binaries/test-macos +0 -38
  178. data/dev/ci/tests/cxx/run +0 -9
  179. data/dev/ci/tests/cxx/setup +0 -4
  180. data/dev/ci/tests/debian/Jenkinsfile +0 -89
  181. data/dev/ci/tests/debian/run +0 -60
  182. data/dev/ci/tests/nginx-dynamic/run +0 -20
  183. data/dev/ci/tests/nginx-dynamic/setup +0 -4
  184. data/dev/ci/tests/nginx/run +0 -5
  185. data/dev/ci/tests/nginx/setup +0 -4
  186. data/dev/ci/tests/nodejs/run +0 -4
  187. data/dev/ci/tests/nodejs/setup +0 -4
  188. data/dev/ci/tests/rpm/Jenkinsfile +0 -68
  189. data/dev/ci/tests/rpm/run +0 -63
  190. data/dev/ci/tests/ruby/run +0 -4
  191. data/dev/ci/tests/ruby/setup +0 -4
  192. data/dev/ci/tests/source-packaging/run +0 -4
  193. data/dev/ci/tests/source-packaging/setup +0 -4
  194. data/dev/ci/tests/standalone/run +0 -4
  195. data/dev/ci/tests/standalone/setup +0 -4
  196. data/dev/configkit-schemas/index.json +0 -1850
  197. data/dev/configkit-schemas/update_schema_inline_comments.rb +0 -118
  198. data/dev/rack.test/config.ru +0 -5
  199. data/dev/rack.test/public/asset.txt +0 -1
  200. data/dev/vagrant/apache_default_site.conf +0 -35
  201. data/dev/vagrant/apache_passenger.conf +0 -5
  202. data/dev/vagrant/apache_passenger.load +0 -1
  203. data/dev/vagrant/apache_ports.conf +0 -24
  204. data/dev/vagrant/apache_rack_test.conf +0 -9
  205. data/dev/vagrant/bashrc +0 -23
  206. data/dev/vagrant/nginx.conf +0 -39
  207. data/dev/vagrant/nginx_rakefile +0 -33
  208. data/dev/vagrant/nginx_start +0 -32
  209. data/dev/vagrant/provision.sh +0 -117
  210. data/dev/vagrant/sudoers.conf +0 -5
  211. data/resources/templates/error_renderer/.editorconfig +0 -19
@@ -0,0 +1,272 @@
1
+ #!/usr/bin/env ruby
2
+ require 'optparse'
3
+
4
+ RED = "\e[31m"
5
+ YELLOW = "\e[33m"
6
+ WHITE = "\e[37m"
7
+ BRIGHTWHITE = "\e[37;1m"
8
+ ORANGE = "\e[38;5;208m"
9
+ GREEN34 = "\e[38;5;34m"
10
+ GREEN48 = "\e[38;5;48m"
11
+ UNDERLINE = "\e[4m"
12
+ BOLD = "\e[1m"
13
+ RESET = "\e[0m"
14
+
15
+ TERMINATION_SIGNALS = [
16
+ Signal.list['INT'],
17
+ Signal.list['TERM'],
18
+ Signal.list['HUP']
19
+ ]
20
+
21
+ def main
22
+ STDOUT.sync = true
23
+ STDERR.sync = true
24
+
25
+ options = parse_options(ARGV)
26
+
27
+ if should_use_pager?(options)
28
+ # Pipe our output to 'less'. We *must* replace the current
29
+ # process with 'less' (and move ourselves into the background),
30
+ # instead of having 'less' run as a child process. This is
31
+ # in order to properly handle signals sent to the entire
32
+ # process group, such as when the user presses Ctrl-C.
33
+ #
34
+ # The problem with running 'less' as a child process is as follows:
35
+ #
36
+ # Imagine you're running the following pipeline in
37
+ # bash:
38
+ #
39
+ # tail -n 1000 -f nginx-error.log | ./dev/colorize-logs | less
40
+ #
41
+ # No problem here when we press Ctrl-C. Ctrl-C sends SIGINT to
42
+ # the entire process group, so to all three processes. 'tail' and
43
+ # 'colorize-logs' exit, while 'less' ignores the signal and keeps
44
+ # running until you press 'q'.
45
+ #
46
+ # Now consider the following pipeline:
47
+ #
48
+ # tail -n 1000 -f nginx-error.log | ./dev/colorize-logs
49
+ #
50
+ # Same thing, but colorize-logs spawns 'less'. Bash does not know
51
+ # about it: it only waits for 'tail' and 'colorize-logs', not 'less'.
52
+ # When you press Ctrl-C now, bash tries to take back control of the
53
+ # terminal as soon as 'tail' and 'colorize-logs' exit. So although
54
+ # 'less' ignores SIGINT, the fact that bash tries to take control
55
+ # of the terminal breaks it.
56
+ #
57
+ # To avoid this scenario from happening, we inverse the process
58
+ # hierarchy. We replace 'colorize-logs' with 'less' (through the use
59
+ # of #exec) so that it's as if bash waits for 'tail' and 'less'.
60
+
61
+ a, b = IO.pipe
62
+
63
+ fork do
64
+ begin
65
+ a.close
66
+ STDOUT.reopen(b)
67
+ input = open_input(options)
68
+ begin
69
+ process_input(input)
70
+ ensure
71
+ kill_input_program(input)
72
+ end
73
+ rescue SignalException => e
74
+ if TERMINATION_SIGNALS.include?(e.signo)
75
+ # Stop upon receiving any of these signals.
76
+ exit 1
77
+ else
78
+ raise e
79
+ end
80
+ rescue Errno::EPIPE
81
+ # Stop when 'less' exits.
82
+ rescue Exception => e
83
+ STDERR.puts "#{e} (#{e.class})\n#{e.backtrace.join("\n")}"
84
+ end
85
+ end
86
+
87
+ STDIN.reopen(a)
88
+ b.close
89
+ exec('less', '-R')
90
+ else
91
+ input = open_input(options)
92
+ begin
93
+ process_input(input)
94
+ rescue SignalException => e
95
+ if TERMINATION_SIGNALS.include?(e.signo)
96
+ # Stop upon receiving any of these signals.
97
+ exit 1
98
+ else
99
+ raise e
100
+ end
101
+ rescue Errno::EPIPE
102
+ # Ignore error when unable to write to piped program.
103
+ ensure
104
+ kill_input_program(input)
105
+ end
106
+ end
107
+ end
108
+
109
+ def parse_options(argv)
110
+ options = {}
111
+
112
+ parser = OptionParser.new do |opts|
113
+ opts.banner =
114
+ "Usage 1: ./dev/colorize-logs [options] <filename>\n" \
115
+ "Usage 2: some command | ./dev/colorize-logs [options]"
116
+
117
+ opts.separator ''
118
+ opts.separator 'This is a tool for reading big Passenger log files,' \
119
+ ' which can be hard to parse because they contain so much information.' \
120
+ ' This tool colorizes the logs based on log level (error, warning,' \
121
+ ' notice, debug, etc.) and type (LoggingKit vs app output), hopefully' \
122
+ ' making it easier to read.'
123
+ opts.separator ''
124
+ opts.separator 'You can have it read a file (usage 1), or you can pipe' \
125
+ ' data into it (usage 2).'
126
+ opts.separator ''
127
+ opts.separator "Output will automatically be displayed in 'less' if:" \
128
+ " (1) running in a terminal, (2) a filename is given, and (3) -f is NOT given."
129
+ opts.separator ''
130
+ opts.separator 'Options:'
131
+
132
+ opts.on('-f', '--follow', "Follow given file (like 'tail -f'). Only applicable when given a filename") do
133
+ options[:follow] = true
134
+ end
135
+ opts.on('-h', '--help', 'Display this help message') do
136
+ options[:help] = true
137
+ end
138
+ end
139
+
140
+ begin
141
+ parser.parse!(argv)
142
+ rescue OptionParser::ParseError => e
143
+ STDERR.puts e
144
+ STDERR.puts
145
+ STDERR.puts "Please see '--help' for valid options."
146
+ exit 1
147
+ end
148
+
149
+ if options[:help]
150
+ puts parser
151
+ exit
152
+ end
153
+
154
+ if argv.size > 1
155
+ STDERR.puts 'ERROR: too many filenames given.'
156
+ STDERR.puts
157
+ STDERR.puts "Please see '--help' for usage."
158
+ exit 1
159
+ end
160
+
161
+ if argv.size == 1 && argv[0] != '-'
162
+ options[:filename] = argv[0]
163
+ end
164
+
165
+ if options[:follow] && !options[:filename]
166
+ STDERR.puts 'ERROR: --follow can only be used when given a filename.'
167
+ STDERR.puts
168
+ STDERR.puts "Please see '--help' for usage."
169
+ exit 1
170
+ end
171
+
172
+ options
173
+ end
174
+
175
+ def open_input(options)
176
+ if options[:filename]
177
+ if options[:follow]
178
+ IO.popen(['tail', '-n', '0', '-f', options[:filename]], 'r:utf-8')
179
+ else
180
+ File.open(options[:filename], 'r:utf-8')
181
+ end
182
+ else
183
+ STDIN
184
+ end
185
+ end
186
+
187
+ def kill_input_program(input)
188
+ if input.pid
189
+ begin
190
+ Process.kill('TERM', input.pid)
191
+ rescue Errno::ESRCH
192
+ # Ignore error
193
+ rescue SystemCallError => e
194
+ STDERR.puts "WARNING: unable to kill 'tail -f' (PID #{input.pid}): #{e}"
195
+ end
196
+ end
197
+ end
198
+
199
+ def should_use_pager?(options)
200
+ STDOUT.tty? && options[:filename] && !options[:follow]
201
+ end
202
+
203
+ def process_input(input)
204
+ last_message_color = nil
205
+ while !input.eof?
206
+ line, last_message_color = colorize(input.readline.chomp, last_message_color)
207
+ puts line
208
+ end
209
+ end
210
+
211
+ def colorize(line, last_message_color)
212
+ if line=~ /^\[ .+? \]: /
213
+ colorize_loggingkit_line(line)
214
+ elsif line =~ /^App [0-9]+ output: /
215
+ colorize_app_output_line(line)
216
+ else
217
+ ["#{last_message_color}#{line}#{RESET}", last_message_color]
218
+ end
219
+ end
220
+
221
+ def colorize_loggingkit_line(line)
222
+ case line
223
+ when /^\[ [CE]/
224
+ prefix_color = "\e[38;5;88m"
225
+ message_color = RED
226
+ when /^\[ W/
227
+ prefix_color = "\e[38;5;136m"
228
+ message_color = YELLOW
229
+ when /^\[ N/
230
+ prefix_color = "\e[38;5;250m"
231
+ message_color = BRIGHTWHITE
232
+ when /^\[ I/
233
+ prefix_color = "\e[38;5;246m"
234
+ message_color = "\e[38;5;255m"
235
+ when /^\[ D /
236
+ prefix_color = "\e[38;5;169m"
237
+ message_color = "\e[38;5;213m"
238
+ when /^\[ D2/
239
+ prefix_color = "\e[38;5;96m"
240
+ message_color = "\e[38;5;132m"
241
+ when /^\[ D3/
242
+ prefix_color = "\e[38;5;74m"
243
+ message_color = "\e[38;5;117m"
244
+ else
245
+ prefix_color = "\e[38;5;245m"
246
+ message_color = RESET
247
+ end
248
+
249
+ message_start_index = line.index(' ]: ') + 3
250
+ prefix = line[0 .. message_start_index - 1]
251
+ message = line[message_start_index + 1 .. -1]
252
+
253
+ if message =~ /^\[.+?\]/
254
+ offset = Regexp.last_match.offset(0)
255
+ subprefix = message[0 .. offset.last - 1]
256
+ submessage = message[offset.last + 1 .. -1]
257
+
258
+ ["#{prefix_color}#{prefix}#{RESET} #{UNDERLINE}#{message_color}#{subprefix}#{RESET} #{message_color}#{submessage}#{RESET}", message_color]
259
+ else
260
+ ["#{prefix_color}#{prefix}#{RESET} #{message_color}#{message}#{RESET}", message_color]
261
+ end
262
+ end
263
+
264
+ def colorize_app_output_line(line)
265
+ message_start_index = line.index(' output: ') + 8
266
+ prefix = line[0 .. message_start_index - 1]
267
+ message = line[message_start_index .. -1]
268
+
269
+ ["#{GREEN34}#{prefix}#{RESET}#{GREEN48}#{message}#{RESET}", WHITE]
270
+ end
271
+
272
+ main
@@ -49,8 +49,8 @@
49
49
  #include <FileTools/FileManip.h>
50
50
  #include <SystemTools/UserDatabase.h>
51
51
  #include <Utils.h>
52
- #include <Utils/StrIntUtils.h>
53
- #include <Utils/IOUtils.h>
52
+ #include <StrIntTools/StrIntUtils.h>
53
+ #include <IOTools/IOUtils.h>
54
54
  #include <Utils/AsyncSignalSafeUtils.h>
55
55
  #include <LoggingKit/Context.h>
56
56
 
@@ -470,7 +470,7 @@ private:
470
470
  dup2(pipe.second, STDOUT_FILENO);
471
471
  pipe.first.close();
472
472
  pipe.second.close();
473
- closeAllFileDescriptors(2, true);
473
+ closeAllFileDescriptors(2);
474
474
 
475
475
  execvp(execArgs[0], (char * const *) &execArgs[0]);
476
476
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2013-2017 Phusion Holding B.V.
3
+ * Copyright (c) 2013-2018 Phusion Holding B.V.
4
4
  *
5
5
  * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
6
  * trademarks of Phusion Holding B.V.
@@ -50,9 +50,9 @@
50
50
  #include <LoggingKit/LoggingKit.h>
51
51
  #include <LoggingKit/Context.h>
52
52
  #include <Constants.h>
53
- #include <Utils/StrIntUtils.h>
54
- #include <Utils/BufferedIO.h>
55
- #include <Utils/MessageIO.h>
53
+ #include <IOTools/BufferedIO.h>
54
+ #include <IOTools/MessageIO.h>
55
+ #include <StrIntTools/StrIntUtils.h>
56
56
 
57
57
  namespace Passenger {
58
58
  namespace Core {
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2014-2017 Phusion Holding B.V.
3
+ * Copyright (c) 2014-2018 Phusion Holding B.V.
4
4
  *
5
5
  * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
6
  * trademarks of Phusion Holding B.V.
@@ -33,7 +33,7 @@
33
33
 
34
34
  #include <StaticString.h>
35
35
  #include <Exceptions.h>
36
- #include <Utils/JsonUtils.h>
36
+ #include <JsonTools/JsonUtils.h>
37
37
  #include <Core/ApplicationPool/BasicGroupInfo.h>
38
38
  #include <Core/SpawningKit/Result.h>
39
39
 
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2011-2017 Phusion Holding B.V.
3
+ * Copyright (c) 2011-2018 Phusion Holding B.V.
4
4
  *
5
5
  * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
6
  * trademarks of Phusion Holding B.V.
@@ -24,7 +24,7 @@
24
24
  * THE SOFTWARE.
25
25
  */
26
26
  #include <Core/ApplicationPool/Group.h>
27
- #include <MessageReadersWriters.h>
27
+ #include <IOTools/MessageSerialization.h>
28
28
 
29
29
  /*************************************************************************
30
30
  *
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2011-2017 Phusion Holding B.V.
3
+ * Copyright (c) 2011-2018 Phusion Holding B.V.
4
4
  *
5
5
  * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
6
  * trademarks of Phusion Holding B.V.
@@ -37,12 +37,12 @@
37
37
  #include <oxt/backtrace.hpp>
38
38
  #include <Exceptions.h>
39
39
  #include <Hooks.h>
40
- #include <MessageReadersWriters.h>
40
+ #include <IOTools/MessageSerialization.h>
41
41
  #include <Utils.h>
42
- #include <Utils/IOUtils.h>
42
+ #include <IOTools/IOUtils.h>
43
43
  #include <Utils/ScopeGuard.h>
44
- #include <Utils/MessageIO.h>
45
- #include <Utils/JsonUtils.h>
44
+ #include <IOTools/MessageIO.h>
45
+ #include <JsonTools/JsonUtils.h>
46
46
  #include <Core/ApplicationPool/Pool.h>
47
47
  #include <Core/ApplicationPool/Group.h>
48
48
  #include <Core/ApplicationPool/Pool/InitializationAndShutdown.cpp>
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2011-2017 Phusion Holding B.V.
3
+ * Copyright (c) 2011-2018 Phusion Holding B.V.
4
4
  *
5
5
  * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
6
  * trademarks of Phusion Holding B.V.
@@ -52,13 +52,13 @@
52
52
  #include <ConfigKit/ConfigKit.h>
53
53
  #include <Exceptions.h>
54
54
  #include <Hooks.h>
55
+ #include <SystemTools/SystemMetricsCollector.h>
56
+ #include <SystemTools/ProcessMetricsCollector.h>
57
+ #include <SystemTools/SystemTime.h>
55
58
  #include <Utils/Lock.h>
56
59
  #include <Utils/AnsiColorConstants.h>
57
- #include <Utils/SystemTime.h>
58
60
  #include <Utils/MessagePassing.h>
59
61
  #include <Utils/VariantMap.h>
60
- #include <Utils/ProcessMetricsCollector.h>
61
- #include <Utils/SystemMetricsCollector.h>
62
62
  #include <Core/ApplicationPool/Common.h>
63
63
  #include <Core/ApplicationPool/Context.h>
64
64
  #include <Core/ApplicationPool/Process.h>
@@ -1,6 +1,6 @@
1
1
  /*
2
2
  * Phusion Passenger - https://www.phusionpassenger.com/
3
- * Copyright (c) 2011-2017 Phusion Holding B.V.
3
+ * Copyright (c) 2011-2018 Phusion Holding B.V.
4
4
  *
5
5
  * "Passenger", "Phusion Passenger" and "Union Station" are registered
6
6
  * trademarks of Phusion Holding B.V.
@@ -43,10 +43,10 @@
43
43
  #include <Constants.h>
44
44
  #include <FileDescriptor.h>
45
45
  #include <LoggingKit/LoggingKit.h>
46
- #include <Utils/SystemTime.h>
47
- #include <Utils/StrIntUtils.h>
46
+ #include <SystemTools/ProcessMetricsCollector.h>
47
+ #include <SystemTools/SystemTime.h>
48
+ #include <StrIntTools/StrIntUtils.h>
48
49
  #include <Utils/Lock.h>
49
- #include <Utils/ProcessMetricsCollector.h>
50
50
  #include <Core/ApplicationPool/Common.h>
51
51
  #include <Core/ApplicationPool/Socket.h>
52
52
  #include <Core/ApplicationPool/Session.h>
@@ -156,12 +156,7 @@ private:
156
156
  */
157
157
  unsigned long long spawnEndTime;
158
158
 
159
- /**
160
- * If true, then indicates that this Process does not refer to a real OS
161
- * process. The sockets in the socket list are fake and need not be deleted,
162
- * the admin socket need not be closed, etc.
163
- */
164
- bool dummy;
159
+ SpawningKit::Result::Type type;
165
160
 
166
161
  /**
167
162
  * Whether it is required that triggerShutdown() and cleanup() must be called
@@ -458,7 +453,7 @@ public:
458
453
  spawnerCreationTime(getJsonUint64Field(args, "spawner_creation_time")),
459
454
  spawnStartTime(getJsonUint64Field(args, "spawn_start_time")),
460
455
  spawnEndTime(SystemTime::getUsec()),
461
- dummy(args["type"] == "dummy"),
456
+ type(args["type"] == "dummy" ? SpawningKit::Result::DUMMY : SpawningKit::Result::UNKNOWN),
462
457
  requiresShutdown(false),
463
458
  refcount(1),
464
459
  index(-1),
@@ -483,7 +478,7 @@ public:
483
478
  spawnerCreationTime(getJsonUint64Field(args, "spawner_creation_time")),
484
479
  spawnStartTime(skResult.spawnStartTime),
485
480
  spawnEndTime(skResult.spawnEndTime),
486
- dummy(skResult.dummy),
481
+ type(skResult.type),
487
482
  requiresShutdown(false),
488
483
  refcount(1),
489
484
  index(-1),
@@ -620,7 +615,7 @@ public:
620
615
  assert(canCleanup());
621
616
 
622
617
  P_TRACE(2, "Cleaning up process " << inspect());
623
- if (!dummy) {
618
+ if (type != SpawningKit::Result::DUMMY) {
624
619
  SocketList::iterator it, end = sockets.end();
625
620
  for (it = sockets.begin(); it != end; it++) {
626
621
  if (getSocketAddressType(it->address) == SAT_UNIX) {
@@ -676,7 +671,7 @@ public:
676
671
  }
677
672
 
678
673
  bool isDummy() const {
679
- return dummy;
674
+ return type == SpawningKit::Result::DUMMY;
680
675
  }
681
676
 
682
677
 
@@ -720,7 +715,7 @@ public:
720
715
  * same PID.
721
716
  */
722
717
  bool osProcessExists() const {
723
- if (!dummy && m_osProcessExists) {
718
+ if (type != SpawningKit::Result::DUMMY && m_osProcessExists) {
724
719
  if (syscalls::kill(getPid(), 0) == 0) {
725
720
  /* On some environments, e.g. Heroku, the init process does
726
721
  * not properly reap adopted zombie processes, which can interfere