passenger 5.3.5 → 5.3.6

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 (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