passenger 5.2.3 → 5.3.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of passenger might be problematic. Click here for more details.

Files changed (241) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG +13 -0
  3. data/CONTRIBUTORS +5 -1
  4. data/build/agent.rb +22 -2
  5. data/build/cxx_tests.rb +41 -5
  6. data/build/misc.rb +4 -1
  7. data/build/support/cxx_dependency_map.rb +1746 -908
  8. data/build/support/vendor/cxx_hinted_parser/CxxHintedParser.sublime-project +8 -0
  9. data/build/support/vendor/cxx_hinted_parser/Gemfile +5 -0
  10. data/build/support/vendor/cxx_hinted_parser/Gemfile.lock +30 -0
  11. data/{src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core → build/support/vendor/cxx_hinted_parser}/LICENSE.md +1 -1
  12. data/build/support/vendor/cxx_hinted_parser/README.md +95 -0
  13. data/build/support/vendor/cxx_hinted_parser/Rakefile +4 -0
  14. data/{src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/initialize.rb → build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser.rb} +2 -9
  15. data/build/support/vendor/cxx_hinted_parser/lib/cxx_hinted_parser/parser.rb +239 -0
  16. data/dev/ci/README.md +15 -2
  17. data/dev/ci/lib/set-container-envvars.sh +6 -0
  18. data/dev/ci/lib/setup-container.sh +4 -1
  19. data/dev/ci/scripts/debug-console-wrapper.sh +3 -1
  20. data/dev/ci/setup-host +5 -0
  21. data/dev/ci/tests/binaries/Jenkinsfile +105 -0
  22. data/dev/ci/tests/binaries/build-linux +38 -0
  23. data/dev/ci/tests/binaries/build-macos +40 -0
  24. data/dev/ci/tests/binaries/prepare-macos +38 -0
  25. data/dev/ci/tests/binaries/test-linux +45 -0
  26. data/dev/ci/tests/binaries/test-macos +38 -0
  27. data/dev/ci/tests/debian/Jenkinsfile +2 -2
  28. data/dev/ci/tests/rpm/Jenkinsfile +1 -1
  29. data/dev/configkit-schemas/index.json +3 -24
  30. data/dev/vagrant/nginx_rakefile +0 -1
  31. data/package.json +15 -5
  32. data/resources/templates/error_renderer/.editorconfig +19 -0
  33. data/resources/templates/error_renderer/with_details/README.md +9 -0
  34. data/resources/templates/error_renderer/with_details/dist/bundle.js +33 -0
  35. data/resources/templates/error_renderer/with_details/dist/styles.css +17 -0
  36. data/resources/templates/error_renderer/with_details/src/DetailsView.jsx +52 -0
  37. data/resources/templates/error_renderer/with_details/src/GetHelpView.jsx +61 -0
  38. data/resources/templates/error_renderer/with_details/src/JourneyView.css +50 -0
  39. data/resources/templates/error_renderer/with_details/src/JourneyView.jsx +621 -0
  40. data/resources/templates/error_renderer/with_details/src/PageMain.css +114 -0
  41. data/resources/templates/error_renderer/with_details/src/PageMain.jsx +136 -0
  42. data/resources/templates/error_renderer/with_details/src/ProblemDescriptionView.jsx +14 -0
  43. data/resources/templates/error_renderer/with_details/src/ProcessDetailsView.jsx +56 -0
  44. data/resources/templates/error_renderer/with_details/src/SolutionDescriptionView.css +5 -0
  45. data/resources/templates/error_renderer/with_details/src/SolutionDescriptionView.jsx +15 -0
  46. data/resources/templates/error_renderer/with_details/src/SummaryView.jsx +35 -0
  47. data/resources/templates/error_renderer/with_details/src/SystemComponentView.css +34 -0
  48. data/resources/templates/error_renderer/with_details/src/SystemComponentView.jsx +168 -0
  49. data/resources/templates/error_renderer/with_details/src/SystemComponentsView.css +13 -0
  50. data/resources/templates/error_renderer/with_details/src/SystemComponentsView.jsx +116 -0
  51. data/resources/templates/error_renderer/with_details/src/Tab.jsx +12 -0
  52. data/resources/templates/error_renderer/with_details/src/Tabs.jsx +104 -0
  53. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.css +3446 -0
  54. data/resources/templates/error_renderer/with_details/src/bootstrap/bootstrap.js +293 -0
  55. data/resources/templates/error_renderer/with_details/src/bootstrap/config.json +401 -0
  56. data/resources/templates/error_renderer/with_details/src/index.html.template +22 -0
  57. data/resources/templates/error_renderer/with_details/src/index.jsx +23 -0
  58. data/resources/templates/error_renderer/with_details/webpack.config.js +47 -0
  59. data/resources/templates/error_renderer/without_details/dist/bundle.js +1 -0
  60. data/resources/templates/error_renderer/without_details/dist/styles.css +1 -0
  61. data/resources/templates/{undisclosed_error.html.template → error_renderer/without_details/src/index.html.template} +7 -11
  62. data/resources/templates/error_renderer/without_details/src/index.js +1 -0
  63. data/resources/templates/{error_layout.css → error_renderer/without_details/src/main.css} +5 -2
  64. data/resources/templates/error_renderer/without_details/webpack.config.js +42 -0
  65. data/src/agent/AgentMain.cpp +3 -3
  66. data/src/agent/Core/ApplicationPool/BasicProcessInfo.h +13 -0
  67. data/src/agent/Core/ApplicationPool/Common.h +3 -4
  68. data/src/agent/Core/ApplicationPool/Context.h +27 -17
  69. data/src/agent/Core/ApplicationPool/Group.h +3 -1
  70. data/src/agent/Core/ApplicationPool/Group/InitializationAndShutdown.cpp +2 -12
  71. data/src/agent/Core/ApplicationPool/Group/InternalUtils.cpp +55 -10
  72. data/src/agent/Core/ApplicationPool/Group/LifetimeAndBasics.cpp +1 -1
  73. data/src/agent/Core/ApplicationPool/Group/OutOfBandWork.cpp +1 -1
  74. data/src/agent/Core/ApplicationPool/Group/SpawningAndRestarting.cpp +13 -6
  75. data/src/agent/Core/ApplicationPool/Implementation.cpp +16 -100
  76. data/src/agent/Core/ApplicationPool/Options.h +8 -65
  77. data/src/agent/Core/ApplicationPool/Pool.h +4 -21
  78. data/src/agent/Core/ApplicationPool/Pool/AnalyticsCollection.cpp +1 -60
  79. data/src/agent/Core/ApplicationPool/Pool/GeneralUtils.cpp +10 -13
  80. data/src/agent/Core/ApplicationPool/Pool/InitializationAndShutdown.cpp +3 -8
  81. data/src/agent/Core/ApplicationPool/Pool/Miscellaneous.cpp +2 -34
  82. data/src/agent/Core/ApplicationPool/Pool/StateInspection.cpp +1 -1
  83. data/src/agent/Core/ApplicationPool/Process.cpp +17 -12
  84. data/src/agent/Core/ApplicationPool/Process.h +146 -93
  85. data/src/agent/Core/ApplicationPool/Session.h +2 -2
  86. data/src/agent/Core/ApplicationPool/Socket.h +28 -27
  87. data/src/agent/Core/Config.h +1 -3
  88. data/src/agent/Core/ConfigChange.cpp +2 -4
  89. data/src/agent/Core/Controller.h +2 -8
  90. data/src/agent/Core/Controller/BufferBody.cpp +0 -2
  91. data/src/agent/Core/Controller/CheckoutSession.cpp +12 -24
  92. data/src/agent/Core/Controller/Config.h +1 -9
  93. data/src/agent/Core/Controller/ForwardResponse.cpp +0 -34
  94. data/src/agent/Core/Controller/Hooks.cpp +0 -7
  95. data/src/agent/Core/Controller/InitRequest.cpp +0 -43
  96. data/src/agent/Core/Controller/InitializationAndShutdown.cpp +0 -4
  97. data/src/agent/Core/Controller/Request.h +1 -35
  98. data/src/agent/Core/Controller/SendRequest.cpp +0 -32
  99. data/src/agent/Core/CoreMain.cpp +19 -32
  100. data/src/agent/Core/SpawningKit/Config.h +329 -55
  101. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h +369 -0
  102. data/src/agent/Core/SpawningKit/Config/AutoGeneratedCode.h.cxxcodebuilder +307 -0
  103. data/src/agent/Core/SpawningKit/Context.h +211 -0
  104. data/src/agent/Core/SpawningKit/DirectSpawner.h +112 -122
  105. data/src/agent/Core/SpawningKit/DummySpawner.h +59 -20
  106. data/src/agent/Core/SpawningKit/ErrorRenderer.h +117 -0
  107. data/src/agent/Core/SpawningKit/Exceptions.h +1157 -0
  108. data/src/agent/Core/SpawningKit/Factory.h +24 -17
  109. data/src/agent/Core/SpawningKit/{BackgroundIOCapturer.h → Handshake/BackgroundIOCapturer.h} +48 -18
  110. data/src/agent/Core/SpawningKit/Handshake/Perform.h +1650 -0
  111. data/src/agent/Core/SpawningKit/Handshake/Prepare.h +582 -0
  112. data/src/agent/Core/SpawningKit/Handshake/Session.h +91 -0
  113. data/src/agent/Core/SpawningKit/Handshake/WorkDir.h +100 -0
  114. data/src/agent/Core/SpawningKit/Journey.h +561 -0
  115. data/src/agent/Core/SpawningKit/PipeWatcher.h +41 -18
  116. data/src/agent/Core/SpawningKit/README.md +534 -0
  117. data/src/agent/Core/SpawningKit/Result.h +182 -7
  118. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h +69 -0
  119. data/src/agent/Core/SpawningKit/Result/AutoGeneratedCode.h.cxxcodebuilder +110 -0
  120. data/src/agent/Core/SpawningKit/SmartSpawner.h +1027 -562
  121. data/src/agent/Core/SpawningKit/Spawner.h +70 -1134
  122. data/src/agent/Core/SpawningKit/UserSwitchingRules.h +3 -33
  123. data/src/agent/README.md +2 -3
  124. data/src/agent/Shared/ApiServerUtils.h +2 -3
  125. data/src/agent/SpawnEnvSetupper/SpawnEnvSetupperMain.cpp +932 -0
  126. data/src/agent/Watchdog/Config.h +1 -3
  127. data/src/agent/Watchdog/WatchdogMain.cpp +2 -1
  128. data/src/apache2_module/ConfigGeneral/AutoGeneratedDefinitions.cpp +5 -0
  129. data/src/apache2_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.cpp +5 -0
  130. data/src/apache2_module/ConfigGeneral/ManifestGeneration.h +22 -13
  131. data/src/apache2_module/DirConfig/AutoGeneratedCreateFunction.cpp +5 -0
  132. data/src/apache2_module/DirConfig/AutoGeneratedHeaderSerialization.cpp +3 -0
  133. data/src/apache2_module/DirConfig/AutoGeneratedManifestGeneration.cpp +13 -0
  134. data/src/apache2_module/DirConfig/AutoGeneratedMergeFunction.cpp +7 -0
  135. data/src/apache2_module/DirConfig/AutoGeneratedStruct.h +13 -0
  136. data/src/cxx_supportlib/Constants.h +3 -1
  137. data/src/cxx_supportlib/Exceptions.h +0 -121
  138. data/src/cxx_supportlib/LoggingKit/Implementation.cpp +7 -6
  139. data/src/cxx_supportlib/LoggingKit/Logging.h +3 -1
  140. data/src/cxx_supportlib/Utils.cpp +42 -0
  141. data/src/cxx_supportlib/Utils.h +7 -0
  142. data/src/cxx_supportlib/Utils/IOUtils.cpp +58 -0
  143. data/src/cxx_supportlib/Utils/IOUtils.h +13 -0
  144. data/src/cxx_supportlib/Utils/JsonUtils.h +130 -23
  145. data/src/cxx_supportlib/Utils/ScopeGuard.h +9 -4
  146. data/src/cxx_supportlib/Utils/StrIntUtils.cpp +7 -0
  147. data/src/cxx_supportlib/Utils/StrIntUtils.h +1 -0
  148. data/src/cxx_supportlib/Utils/SystemTime.h +1 -1
  149. data/src/cxx_supportlib/Utils/Timer.h +1 -1
  150. data/src/cxx_supportlib/WebSocketCommandReverseServer.h +6 -4
  151. data/src/cxx_supportlib/vendor-copy/adhoc_lve.h +1 -0
  152. data/src/helper-scripts/node-loader.js +54 -59
  153. data/src/helper-scripts/rack-loader.rb +63 -60
  154. data/src/helper-scripts/rack-preloader.rb +125 -72
  155. data/src/helper-scripts/wsgi-loader.py +100 -43
  156. data/src/nginx_module/ConfigGeneral/AutoGeneratedDefinitions.c +120 -112
  157. data/src/nginx_module/ConfigGeneral/AutoGeneratedManifestDefaultsInitialization.c +15 -8
  158. data/src/nginx_module/ConfigGeneral/AutoGeneratedSetterFuncs.c +142 -142
  159. data/src/nginx_module/ConfigGeneral/ManifestGeneration.c +26 -15
  160. data/src/nginx_module/ConfigGeneral/ManifestGeneration.h +3 -0
  161. data/src/nginx_module/LocationConfig/AutoGeneratedCreateFunction.c +76 -70
  162. data/src/nginx_module/LocationConfig/AutoGeneratedHeaderSerialization.c +114 -99
  163. data/src/nginx_module/LocationConfig/AutoGeneratedManifestGeneration.c +170 -156
  164. data/src/nginx_module/LocationConfig/AutoGeneratedMergeFunction.c +38 -35
  165. data/src/nginx_module/LocationConfig/AutoGeneratedStruct.h +5 -1
  166. data/src/ruby_supportlib/phusion_passenger.rb +5 -5
  167. data/src/ruby_supportlib/phusion_passenger/admin_tools/instance.rb +14 -1
  168. data/src/ruby_supportlib/phusion_passenger/apache2/config_options.rb +8 -0
  169. data/src/ruby_supportlib/phusion_passenger/common_library.rb +0 -3
  170. data/src/ruby_supportlib/phusion_passenger/config/nginx_engine_compiler.rb +0 -1
  171. data/src/ruby_supportlib/phusion_passenger/constants.rb +2 -0
  172. data/src/ruby_supportlib/phusion_passenger/loader_shared_helpers.rb +646 -238
  173. data/src/ruby_supportlib/phusion_passenger/nginx/config_options.rb +117 -95
  174. data/src/ruby_supportlib/phusion_passenger/packaging.rb +0 -1
  175. data/src/ruby_supportlib/phusion_passenger/platform_info/depcheck_specs/apache2.rb +5 -1
  176. data/src/ruby_supportlib/phusion_passenger/preloader_shared_helpers.rb +92 -69
  177. data/src/ruby_supportlib/phusion_passenger/public_api.rb +0 -17
  178. data/src/ruby_supportlib/phusion_passenger/rack/thread_handler_extension.rb +0 -3
  179. data/src/ruby_supportlib/phusion_passenger/request_handler.rb +4 -5
  180. data/src/ruby_supportlib/phusion_passenger/request_handler/thread_handler.rb +0 -22
  181. metadata +64 -67
  182. data/resources/templates/error_layout.html.template +0 -86
  183. data/resources/templates/general_error.html.template +0 -1
  184. data/resources/templates/general_error_with_html.html.template +0 -1
  185. data/src/agent/Core/ApplicationPool/ErrorRenderer.h +0 -131
  186. data/src/agent/Core/SpawningKit/Options.h +0 -41
  187. data/src/agent/Core/UnionStation/Connection.h +0 -173
  188. data/src/agent/Core/UnionStation/Context.h +0 -536
  189. data/src/agent/Core/UnionStation/StopwatchLog.h +0 -147
  190. data/src/agent/Core/UnionStation/Transaction.h +0 -249
  191. data/src/agent/SpawnPreparer/SpawnPreparerMain.cpp +0 -208
  192. data/src/cxx_supportlib/UnionStationFilterSupport.cpp +0 -67
  193. data/src/cxx_supportlib/UnionStationFilterSupport.h +0 -1622
  194. data/src/nodejs_supportlib/phusion_passenger/log_express.js +0 -106
  195. data/src/nodejs_supportlib/phusion_passenger/log_mongodb.js +0 -202
  196. data/src/nodejs_supportlib/phusion_passenger/ustreporter.js +0 -227
  197. data/src/nodejs_supportlib/phusion_passenger/ustrouter_connector.js +0 -448
  198. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/CONFIG.md +0 -37
  199. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/Gemfile +0 -17
  200. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/Gemfile.lock +0 -59
  201. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/README-API.md +0 -5
  202. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/README.md +0 -117
  203. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/Rakefile +0 -115
  204. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core.rb +0 -423
  205. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/api.rb +0 -238
  206. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/connection.rb +0 -67
  207. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/context.rb +0 -281
  208. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/lock.rb +0 -62
  209. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/log.rb +0 -66
  210. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/message_channel.rb +0 -157
  211. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter.rb +0 -150
  212. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter/basics.rb +0 -199
  213. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter/controllers.rb +0 -187
  214. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter/misc.rb +0 -303
  215. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/request_reporter/view_rendering.rb +0 -91
  216. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/simple_json.rb +0 -396
  217. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/spec_helper.rb +0 -279
  218. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/time_point.rb +0 -39
  219. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/transaction.rb +0 -173
  220. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/utils.rb +0 -177
  221. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/version.rb +0 -32
  222. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/lib/union_station_hooks_core/version_data.rb +0 -44
  223. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/ruby_versions.yml.example +0 -16
  224. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/ruby_versions.yml.travis +0 -20
  225. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/ruby_versions.yml.travis-with-sudo +0 -18
  226. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_core/union_station_hooks_core.gemspec +0 -23
  227. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/Gemfile +0 -14
  228. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/Gemfile.lock +0 -45
  229. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/LICENSE.md +0 -19
  230. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/README.md +0 -104
  231. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/Rakefile +0 -160
  232. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails.rb +0 -200
  233. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/action_controller_extension.rb +0 -45
  234. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/action_view_subscriber.rb +0 -55
  235. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/active_record_subscriber.rb +0 -41
  236. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/active_support_benchmarkable_extension.rb +0 -47
  237. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/active_support_cache_subscriber.rb +0 -79
  238. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/exception_logger.rb +0 -57
  239. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/version.rb +0 -32
  240. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/lib/union_station_hooks_rails/version_data.rb +0 -44
  241. data/src/ruby_supportlib/phusion_passenger/vendor/union_station_hooks_rails/union_station_hooks_rails.gemspec +0 -34
@@ -1,91 +0,0 @@
1
- # Union Station - https://www.unionstationapp.com/
2
- # Copyright (c) 2010-2015 Phusion Holding B.V.
3
- #
4
- # "Union Station" and "Passenger" are trademarks of Phusion Holding B.V.
5
- #
6
- # Permission is hereby granted, free of charge, to any person obtaining a copy
7
- # of this software and associated documentation files (the "Software"), to deal
8
- # in the Software without restriction, including without limitation the rights
9
- # to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
10
- # copies of the Software, and to permit persons to whom the Software is
11
- # furnished to do so, subject to the following conditions:
12
- #
13
- # The above copyright notice and this permission notice shall be included in
14
- # all copies or substantial portions of the Software.
15
- #
16
- # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17
- # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18
- # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19
- # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20
- # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21
- # OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
22
- # THE SOFTWARE.
23
-
24
- UnionStationHooks.require_lib 'utils'
25
-
26
- module UnionStationHooks
27
- class RequestReporter
28
- ###### Logging view rendering-related information ######
29
-
30
- # Logs timing information about the rendering of a single view, template or
31
- # partial. This form expects a block, which is to perform the
32
- # view/template/partial rendering. Timing information is collected before
33
- # and after the block returns.
34
- #
35
- # The `union_station_hooks_rails` gem automatically calls this for you
36
- # if your application is a Rails app. It will call this on every view
37
- # or partial rendering.
38
- #
39
- # @param [String] name Name of the view, template or partial that is being
40
- # rendered.
41
- # @yield The given block is expected to perform the actual view rendering.
42
- # @return The return value of the block.
43
- def log_view_rendering_block(name, &block)
44
- if null?
45
- do_nothing_on_null(:log_view_rendering_block)
46
- yield
47
- else
48
- @transaction.log_activity_block(next_view_rendering_name,
49
- name, &block)
50
- end
51
- end
52
-
53
- # Logs timing information about the rendering of a single view, template or
54
- # partial.
55
- #
56
- # Unlike {#log_view_rendering_block}, this form does not expect a block.
57
- # However, you are expected to pass timing information to the options
58
- # hash.
59
- #
60
- # The `union_station_hooks_rails` gem automatically calls
61
- # {#log_view_rendering_block} for you if your application is a Rails app.
62
- # It will call this on every view or partial rendering.
63
- #
64
- # @option options [String] :name Name of the view, template or partial
65
- # that is being rendered.
66
- # @option options [TimePoint or Time] :begin_time The time at which this
67
- # view rendering begun. See {UnionStationHooks.now} to learn more.
68
- # @option options [TimePoint or Time] :end_time The time at which this view
69
- # rendering ended. See {UnionStationHooks.now} to learn more.
70
- # @option options [Boolean] :has_error (optional) Whether an uncaught
71
- # exception occurred during the view rendering. Default: false.
72
- def log_view_rendering(options)
73
- return do_nothing_on_null(:log_view_rendering) if null?
74
- Utils.require_key(options, :name)
75
- Utils.require_key(options, :begin_time)
76
- Utils.require_key(options, :end_time)
77
-
78
- @transaction.log_activity(next_view_rendering_name,
79
- options[:begin_time], options[:end_time],
80
- options[:name], options[:has_error])
81
- end
82
-
83
- private
84
-
85
- def next_view_rendering_name
86
- result = @next_view_rendering_number
87
- @next_view_rendering_number += 1
88
- "view rendering #{result}"
89
- end
90
- end
91
- end
@@ -1,396 +0,0 @@
1
- # encoding: utf-8
2
- #
3
- ## Stupid small pure Ruby JSON parser & generator.
4
- #
5
- # Copyright © 2013 Mislav Marohnić
6
- #
7
- # Permission is hereby granted, free of charge, to any person obtaining a copy of this
8
- # software and associated documentation files (the “Software”), to deal in the Software
9
- # without restriction, including without limitation the rights to use, copy, modify,
10
- # merge, publish, distribute, sublicense, and/or sell copies of the Software, and to
11
- # permit persons to whom the Software is furnished to do so, subject to the following
12
- # conditions:
13
- #
14
- # The above copyright notice and this permission notice shall be included in all copies or
15
- # substantial portions of the Software.
16
- #
17
- # THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
18
- # INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
19
- # PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
- # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT
21
- # OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22
- # OTHER DEALINGS IN THE SOFTWARE.
23
-
24
- # We use this in Phusion Passenger at places where we cannot depend on the JSON
25
- # gem being available, for example in 'passenger start' before the RuntimeInstaller
26
- # has run.
27
-
28
- require 'strscan'
29
- require 'forwardable'
30
-
31
- module UnionStationHooks
32
-
33
- # @private
34
- module SimpleJSON
35
-
36
- # Usage:
37
- #
38
- # JSON.parse(json_string) => Array/Hash
39
- # JSON.generate(object) => json string
40
- #
41
- # Run tests by executing this file directly. Pipe standard input to the script to have it
42
- # parsed as JSON and to display the result in Ruby.
43
- class JSON
44
- def self.parse(data) new(data).parse end
45
-
46
- WSP = /(\s|\/\/.*?\n|\/\*.*?\*\/)+/m
47
- OBJ = /[{\[]/; HEN = /\}/; AEN = /\]/
48
- COL = /\s*:\s*/; KEY = /\s*,\s*/
49
- NUM = /-?\d+(?:\.\d+)?(?:[eE][+-]?\d+)?/
50
- BOL = /true|false/; NUL = /null/
51
-
52
- extend Forwardable
53
-
54
- attr_reader :scanner
55
- alias_method :s, :scanner
56
- def_delegators :scanner, :scan, :matched
57
- private :s, :scan, :matched
58
-
59
- def initialize data
60
- @scanner = StringScanner.new data.to_s
61
- end
62
-
63
- def parse
64
- space
65
- object
66
- end
67
-
68
- private
69
-
70
- def space() scan WSP end
71
-
72
- def endkey() scan(KEY) or space end
73
-
74
- def object
75
- matched == '{' ? hash : array if scan(OBJ)
76
- end
77
-
78
- def value
79
- object or string or
80
- scan(NUL) ? nil :
81
- scan(BOL) ? matched.size == 4:
82
- scan(NUM) ? eval(matched) :
83
- error
84
- end
85
-
86
- def hash
87
- obj = {}
88
- space
89
- repeat_until(HEN) do
90
- space
91
- k = string
92
- scan(COL)
93
- obj[k] = value
94
- endkey
95
- end
96
- obj
97
- end
98
-
99
- def array
100
- ary = []
101
- space
102
- repeat_until(AEN) do
103
- space
104
- ary << value
105
- endkey
106
- end
107
- ary
108
- end
109
-
110
- SPEC = {'b' => "\b", 'f' => "\f", 'n' => "\n", 'r' => "\r", 't' => "\t"}
111
- UNI = 'u'; CODE = /[a-fA-F0-9]{4}/
112
- STR = /"/; STE = '"'
113
- ESC = '\\'
114
-
115
- def string
116
- if scan(STR)
117
- str, esc = '', false
118
- while c = s.getch
119
- if esc
120
- str << (c == UNI ? (s.scan(CODE) || error).to_i(16).chr : SPEC[c] || c)
121
- esc = false
122
- else
123
- case c
124
- when ESC then esc = true
125
- when STE then break
126
- else str << c
127
- end
128
- end
129
- end
130
- str
131
- end
132
- end
133
-
134
- def error
135
- raise "parse error at: #{scan(/.{1,20}/m).inspect}"
136
- end
137
-
138
- def repeat_until reg
139
- until scan(reg)
140
- pos = s.pos
141
- yield
142
- error unless s.pos > pos
143
- end
144
- end
145
-
146
- module Generator
147
- def generate(obj)
148
- raise ArgumentError unless obj.is_a? Array or obj.is_a? Hash
149
- generate_type(obj)
150
- end
151
- alias dump generate
152
-
153
- private
154
-
155
- def generate_type(obj)
156
- type = obj.is_a?(Numeric) ? :Numeric : obj.class.name
157
- begin send(:"generate_#{type}", obj)
158
- rescue NoMethodError; raise ArgumentError, "can't serialize #{type}"
159
- end
160
- end
161
-
162
- ESC_MAP = Hash.new {|h,k| k }.update \
163
- "\r" => 'r',
164
- "\n" => 'n',
165
- "\f" => 'f',
166
- "\t" => 't',
167
- "\b" => 'b'
168
-
169
- def quote(str) %("#{str}") end
170
-
171
- def generate_String(str)
172
- quote str.gsub(/[\r\n\f\t\b"\\]/) { "\\#{ESC_MAP[$&]}"}
173
- end
174
-
175
- def generate_simple(obj) obj.inspect end
176
- alias generate_Numeric generate_simple
177
- alias generate_TrueClass generate_simple
178
- alias generate_FalseClass generate_simple
179
-
180
- def generate_Symbol(sym) generate_String(sym.to_s) end
181
-
182
- def generate_Time(time)
183
- quote time.strftime(time.utc? ? "%F %T UTC" : "%F %T %z")
184
- end
185
- def generate_Date(date) quote date.to_s end
186
-
187
- def generate_NilClass(*) 'null' end
188
-
189
- def generate_Array(ary) '[%s]' % ary.map {|o| generate_type(o) }.join(', ') end
190
-
191
- def generate_Hash(hash)
192
- '{%s}' % hash.map { |key, value|
193
- "#{generate_String(key.to_s)}: #{generate_type(value)}"
194
- }.join(', ')
195
- end
196
- end
197
-
198
- extend Generator
199
- end
200
-
201
- if __FILE__ == $0
202
- if !$stdin.tty?
203
- data = JSON.parse $stdin.read
204
- require 'pp'
205
- pp data
206
- else
207
- require 'test/unit'
208
- require 'date'
209
- class ParserTest < Test::Unit::TestCase
210
- PARSED = JSON.parse DATA.read
211
- def parsed() PARSED end
212
- def parse_string(str) JSON.parse(%(["#{str}"]).gsub('\\\\', '\\')).first end
213
- def test_string
214
- assert_equal "Pagination library for \"Rails 3\", Sinatra, Merb, DataMapper, and more",
215
- parsed['head']['repository']['description']
216
- end
217
- def test_string_specials
218
- assert_equal "\r\n\t\f\b", parse_string('\r\n\t\f\b')
219
- assert_equal "aA", parse_string('\u0061\u0041')
220
- assert_equal "\e", parse_string('\u001B')
221
- assert_equal "xyz", parse_string('\x\y\z')
222
- assert_equal '"\\/', parse_string('\"\\\\\\/')
223
- assert_equal 'no #{interpolation}', parse_string('no #{interpolation}')
224
- end
225
- def test_hash
226
- assert_equal %w[label ref repository sha user], parsed['head'].keys.sort
227
- end
228
- def test_number
229
- assert_equal 124.3e2, parsed['head']['repository']['size']
230
- end
231
- def test_bool
232
- assert_equal true, parsed['head']['repository']['fork']
233
- assert_equal false, parsed['head']['repository']['private']
234
- end
235
- def test_nil
236
- assert_nil parsed['head']['user']['company']
237
- end
238
- def test_array
239
- assert_equal ["4438f", {"a" => "b"}], parsed['head']['sha']
240
- end
241
- def test_invalid
242
- assert_raises(RuntimeError) { JSON.parse %({) }
243
- assert_raises(RuntimeError) { JSON.parse %({ "foo": }) }
244
- assert_raises(RuntimeError) { JSON.parse %([ "foo": "bar" ]) }
245
- assert_raises(RuntimeError) { JSON.parse %([ ~"foo" ]) }
246
- assert_raises(RuntimeError) { JSON.parse %([ "foo ]) }
247
- assert_raises(RuntimeError) { JSON.parse %([ "foo\\" ]) }
248
- assert_raises(RuntimeError) { JSON.parse %([ "foo\\uabGd" ]) }
249
- end
250
- def test_single_line_comments
251
- source = %Q{
252
- // comment before document
253
- {
254
- // comment
255
- "foo": "1",
256
- "bar": "2",
257
- // another comment
258
- "baz": "3",
259
- "array": [
260
- // comment inside array
261
- 1, 2, 3
262
- // comment at end of array
263
- ]
264
- // comment at end of hash
265
- }
266
- // comment after document
267
- }
268
- doc = { "foo" => "1", "bar" => "2", "baz" => "3", "array" => [1, 2, 3] }
269
- assert_equal(doc, JSON.parse(source))
270
- end
271
- def test_multi_line_comments
272
- source = %Q{
273
- /* comment before
274
- * document */
275
- {
276
- /* comment */
277
- "foo": "1",
278
- "bar": "2",
279
- /* another
280
- comment
281
- */
282
- "baz": "3",
283
- "array": [
284
- /* comment inside array */
285
- 1, 2, 3,
286
- 4, /* comment inside an array */ 5,
287
- /*
288
- // "nested" comments
289
- { "faux json": "inside comment" }
290
- */
291
- 6, 7
292
- /**
293
- * comment at end of array
294
- */
295
- ]
296
- /**************************
297
- comment at end of hash
298
- **************************/
299
- }
300
- /* comment after
301
- document */
302
- }
303
- doc = { "foo" => "1", "bar" => "2", "baz" => "3", "array" => [1, 2, 3, 4, 5, 6, 7] }
304
- assert_equal(doc, JSON.parse(source))
305
- end
306
- end
307
-
308
- class GeneratorTest < Test::Unit::TestCase
309
- def generate(obj) JSON.generate(obj) end
310
- def test_array
311
- assert_equal %([1, 2, 3]), generate([1, 2, 3])
312
- end
313
- def test_bool
314
- assert_equal %([true, false]), generate([true, false])
315
- end
316
- def test_null
317
- assert_equal %([null]), generate([nil])
318
- end
319
- def test_string
320
- assert_equal %(["abc\\n123"]), generate(["abc\n123"])
321
- end
322
- def test_string_unicode
323
- assert_equal %(["ć\\"č\\nž\\tš\\\\đ"]), generate(["ć\"č\nž\tš\\đ"])
324
- end
325
- def test_time
326
- time = Time.utc(2012, 04, 19, 1, 2, 3)
327
- assert_equal %(["2012-04-19 01:02:03 UTC"]), generate([time])
328
- end
329
- def test_date
330
- time = Date.new(2012, 04, 19)
331
- assert_equal %(["2012-04-19"]), generate([time])
332
- end
333
- def test_symbol
334
- assert_equal %(["abc"]), generate([:abc])
335
- end
336
- def test_hash
337
- json = generate(:abc => 123, 123 => 'abc')
338
- assert_match /^\{/, json
339
- assert_match /\}$/, json
340
- assert_equal [%("123": "abc"), %("abc": 123)], json[1...-1].split(', ').sort
341
- end
342
- def test_nested_structure
343
- json = generate(:hash => {1=>2}, :array => [1,2])
344
- assert json.include?(%("hash": {"1": 2}))
345
- assert json.include?(%("array": [1, 2]))
346
- end
347
- def test_invalid_json
348
- assert_raises(ArgumentError) { generate("abc") }
349
- end
350
- def test_invalid_object
351
- err = assert_raises(ArgumentError) { generate("a" => Object.new) }
352
- assert_equal "can't serialize Object", err.message
353
- end
354
- end
355
- end
356
- end
357
-
358
- end # module SimpleJSON
359
- end # module UnionStationHooks
360
-
361
- __END__
362
- {
363
- "head": {
364
- "ref": "master",
365
- "repository": {
366
- "forks": 0,
367
- "integrate_branch": "rails3",
368
- "watchers": 1,
369
- "language": "Ruby",
370
- "description": "Pagination library for \"Rails 3\", Sinatra, Merb, DataMapper, and more",
371
- "has_downloads": true,
372
- "fork": true,
373
- "created_at": "2011/10/24 03:20:48 -0700",
374
- "homepage": "http://github.com/mislav/will_paginate/wikis",
375
- "size": 124.3e2,
376
- "private": false,
377
- "has_wiki": true,
378
- "name": "will_paginate",
379
- "owner": "dbackeus",
380
- "url": "https://github.com/dbackeus/will_paginate",
381
- "has_issues": false,
382
- "open_issues": 0,
383
- "pushed_at": "2011/10/25 05:44:05 -0700"
384
- },
385
- "label": "dbackeus:master",
386
- "sha": ["4438f", { "a" : "b" }],
387
- "user": {
388
- "name": "David Backeus",
389
- "company": null,
390
- "gravatar_id": "ebe96524f5db9e92188f0542dc9d1d1a",
391
- "location": "Stockholm (Sweden)",
392
- "type": "User",
393
- "login": "dbackeus"
394
- }
395
- }
396
- }