passenger 5.0.4 → 5.0.5
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.
- checksums.yaml +8 -8
- checksums.yaml.gz.asc +7 -7
- data.tar.gz.asc +7 -7
- data/.editorconfig +10 -0
- data/CHANGELOG +21 -0
- data/build/agents.rb +2 -2
- data/build/apache2.rb +6 -5
- data/build/common_library.rb +22 -7
- data/build/cxx_tests.rb +0 -3
- data/build/misc.rb +1 -1
- data/dev/parse_file_descriptor_log +119 -0
- data/doc/CloudLicensingConfiguration.html +387 -0
- data/doc/Design and Architecture.html +2430 -0
- data/doc/Packaging.html +488 -0
- data/doc/Security of user switching support.html +1833 -0
- data/doc/ServerOptimizationGuide.html +659 -0
- data/doc/ServerOptimizationGuide.txt.md +8 -0
- data/doc/Users guide Apache.html +9116 -0
- data/doc/Users guide Apache.idmap.txt +6 -2
- data/doc/Users guide Apache.txt +26 -7
- data/doc/Users guide Nginx.html +9025 -0
- data/doc/Users guide Nginx.idmap.txt +7 -3
- data/doc/Users guide Nginx.txt +29 -6
- data/doc/Users guide Standalone.html +3983 -0
- data/doc/Users guide.html +1748 -0
- data/doc/users_guide_snippets/installation.txt +4 -4
- data/ext/apache2/Configuration.cpp +16 -5
- data/ext/apache2/Configuration.hpp +4 -2
- data/ext/apache2/Hooks.cpp +44 -19
- data/ext/boost/libs/thread/src/pthread/once.cpp +2 -0
- data/ext/boost/libs/thread/src/pthread/once_atomic.cpp +6 -0
- data/ext/common/AgentsStarter.h +3 -2
- data/ext/common/ApplicationPool2/DirectSpawner.h +14 -4
- data/ext/common/ApplicationPool2/DummySpawner.h +12 -7
- data/ext/common/ApplicationPool2/Implementation.cpp +1 -1
- data/ext/common/ApplicationPool2/Process.h +2 -1
- data/ext/common/ApplicationPool2/Session.h +6 -6
- data/ext/common/ApplicationPool2/SmartSpawner.h +19 -4
- data/ext/common/ApplicationPool2/Socket.h +59 -27
- data/ext/common/ApplicationPool2/Spawner.h +2 -2
- data/ext/common/BackgroundEventLoop.cpp +6 -1
- data/ext/common/Constants.h +1 -1
- data/ext/common/EventedClient.h +1 -1
- data/ext/common/EventedServer.h +2 -2
- data/ext/common/FileDescriptor.h +25 -6
- data/ext/common/Logging.cpp +107 -52
- data/ext/common/Logging.h +146 -19
- data/ext/common/MessageClient.h +2 -2
- data/ext/common/MessageServer.h +3 -2
- data/ext/common/RandomGenerator.h +8 -7
- data/ext/common/SafeLibev.h +5 -1
- data/ext/common/ServerKit/AcceptLoadBalancer.h +9 -4
- data/ext/common/ServerKit/FdSinkChannel.h +5 -2
- data/ext/common/ServerKit/FdSourceChannel.h +5 -2
- data/ext/common/ServerKit/FileBufferedChannel.h +2 -0
- data/ext/common/ServerKit/FileBufferedFdSinkChannel.h +7 -2
- data/ext/common/ServerKit/HttpServer.h +6 -0
- data/ext/common/ServerKit/Server.h +40 -3
- data/ext/common/StaticString.h +20 -0
- data/ext/common/UnionStation/Connection.h +3 -1
- data/ext/common/UnionStation/Core.h +6 -4
- data/ext/common/Utils.cpp +4 -3
- data/ext/common/Utils/DateParsing.h +19 -5
- data/ext/common/Utils/FastStringStream.h +183 -0
- data/ext/common/Utils/IOUtils.cpp +47 -28
- data/ext/common/Utils/IOUtils.h +56 -12
- data/ext/common/Utils/MessagePassing.h +3 -3
- data/ext/common/Utils/ProcessMetricsCollector.h +2 -2
- data/ext/common/Utils/ScopeGuard.h +16 -5
- data/ext/common/Utils/SpeedMeter.h +2 -2
- data/ext/common/Utils/StrIntUtils.cpp +6 -6
- data/ext/common/Utils/StrIntUtils.h +2 -1
- data/ext/common/agents/Base.cpp +56 -4
- data/ext/common/agents/Base.h +2 -1
- data/ext/common/agents/HelperAgent/AdminServer.h +122 -11
- data/ext/common/agents/HelperAgent/Main.cpp +16 -5
- data/ext/common/agents/HelperAgent/OptionParser.h +7 -1
- data/ext/common/agents/HelperAgent/RequestHandler.h +1 -1
- data/ext/common/agents/HelperAgent/RequestHandler/Hooks.cpp +10 -1
- data/ext/common/agents/HelperAgent/RequestHandler/Request.h +8 -0
- data/ext/common/agents/HelperAgent/RequestHandler/TurboCaching.h +4 -3
- data/ext/common/agents/LoggingAgent/AdminServer.h +57 -11
- data/ext/common/agents/LoggingAgent/LoggingServer.h +3 -3
- data/ext/common/agents/LoggingAgent/Main.cpp +11 -3
- data/ext/common/agents/Watchdog/AdminServer.h +53 -11
- data/ext/common/agents/Watchdog/AgentWatcher.cpp +3 -3
- data/ext/common/agents/Watchdog/Main.cpp +13 -6
- data/ext/libeio/ecb.h +1 -1
- data/ext/libev/ev.c +13 -1
- data/ext/libev/ev.h +3 -0
- data/ext/nginx/Configuration.c +28 -6
- data/ext/nginx/Configuration.h +2 -1
- data/ext/nginx/ngx_http_passenger_module.c +5 -4
- data/ext/oxt/dynamic_thread_group.hpp +38 -5
- data/lib/phusion_passenger.rb +1 -1
- data/lib/phusion_passenger/common_library.rb +9 -5
- data/lib/phusion_passenger/config/reopen_logs_command.rb +2 -2
- data/lib/phusion_passenger/packaging.rb +23 -37
- data/passenger.gemspec +21 -21
- metadata +4 -453
- metadata.gz.asc +7 -7
- data/.gitignore +0 -68
- data/.travis.yml +0 -16
- data/Gemfile +0 -17
- data/Gemfile.lock +0 -39
- data/Vagrantfile +0 -54
- data/debian.template/README.Debian +0 -15
- data/debian.template/changelog +0 -316
- data/debian.template/compat +0 -1
- data/debian.template/control.erb +0 -91
- data/debian.template/copyright +0 -385
- data/debian.template/libapache2-mod-passenger.install +0 -3
- data/debian.template/libapache2-mod-passenger.postinst +0 -36
- data/debian.template/libapache2-mod-passenger.prerm +0 -15
- data/debian.template/locations.ini.erb +0 -14
- data/debian.template/passenger-dev.install.erb +0 -3
- data/debian.template/passenger-doc.install.erb +0 -2
- data/debian.template/passenger.conf +0 -6
- data/debian.template/passenger.docs +0 -4
- data/debian.template/passenger.install.erb +0 -14
- data/debian.template/passenger.load +0 -3
- data/debian.template/passenger.manpages +0 -3
- data/debian.template/patches/series +0 -0
- data/debian.template/rules.erb +0 -76
- data/debian.template/source/format +0 -1
- data/ext/common/EventedBufferedInput.h +0 -458
- data/packaging/rpm/LICENSE.txt +0 -19
- data/packaging/rpm/Makefile +0 -13
- data/packaging/rpm/README.md +0 -41
- data/packaging/rpm/Vagrantfile +0 -38
- data/packaging/rpm/Vagrantfile.centos +0 -30
- data/packaging/rpm/build +0 -170
- data/packaging/rpm/create_project +0 -41
- data/packaging/rpm/git_update +0 -88
- data/packaging/rpm/image/Dockerfile +0 -37
- data/packaging/rpm/image/Gemfile +0 -3
- data/packaging/rpm/image/Gemfile.lock +0 -12
- data/packaging/rpm/image/RPM-GPG-KEY-amazon-ga +0 -19
- data/packaging/rpm/image/amazon2014-i386.cfg +0 -96
- data/packaging/rpm/image/amazon2014-x86_64.cfg +0 -96
- data/packaging/rpm/image/site-defaults.cfg +0 -168
- data/packaging/rpm/internal/build_tasks.rb +0 -238
- data/packaging/rpm/internal/dummygpg +0 -11
- data/packaging/rpm/internal/exec_build +0 -42
- data/packaging/rpm/internal/get_distro_arch +0 -14
- data/packaging/rpm/internal/get_distro_id +0 -10
- data/packaging/rpm/internal/git_update +0 -27
- data/packaging/rpm/internal/inituidgid +0 -17
- data/packaging/rpm/internal/my_init +0 -344
- data/packaging/rpm/internal/python27 +0 -3
- data/packaging/rpm/internal/repo_update +0 -46
- data/packaging/rpm/internal/setuser +0 -26
- data/packaging/rpm/internal/tracking_helper +0 -40
- data/packaging/rpm/jenkins_release +0 -99
- data/packaging/rpm/lib/build_tasks_support.rb +0 -402
- data/packaging/rpm/lib/preprocessor.rb +0 -341
- data/packaging/rpm/nginx_spec/404.html +0 -119
- data/packaging/rpm/nginx_spec/50x.html +0 -119
- data/packaging/rpm/nginx_spec/index.html +0 -116
- data/packaging/rpm/nginx_spec/nginx-auto-cc-gcc.patch +0 -13
- data/packaging/rpm/nginx_spec/nginx-logo.png +0 -0
- data/packaging/rpm/nginx_spec/nginx-upgrade +0 -13
- data/packaging/rpm/nginx_spec/nginx-upgrade.8 +0 -151
- data/packaging/rpm/nginx_spec/nginx.conf +0 -131
- data/packaging/rpm/nginx_spec/nginx.init +0 -144
- data/packaging/rpm/nginx_spec/nginx.logrotate +0 -13
- data/packaging/rpm/nginx_spec/nginx.service +0 -15
- data/packaging/rpm/nginx_spec/nginx.spec.template +0 -560
- data/packaging/rpm/nginx_spec/nginx.sysconfig +0 -4
- data/packaging/rpm/nginx_spec/passenger.conf +0 -9
- data/packaging/rpm/nginx_spec/poweredby.png +0 -0
- data/packaging/rpm/passenger_spec/apache-passenger.conf.in +0 -26
- data/packaging/rpm/passenger_spec/config.json +0 -30
- data/packaging/rpm/passenger_spec/passenger.logrotate +0 -7
- data/packaging/rpm/passenger_spec/passenger.spec.template +0 -478
- data/packaging/rpm/passenger_spec/passenger_dynamic_thread_group.patch +0 -16
- data/packaging/rpm/passenger_spec/passenger_tests_default_config_example.patch +0 -44
- data/packaging/rpm/passenger_spec/rubygem-passenger-4.0.18-GLIBC_HAVE_LONG_LONG.patch +0 -21
- data/packaging/rpm/repo_update +0 -114
- data/packaging/rpm/setup-system +0 -61
- data/packaging/rpm/shell +0 -10
- data/test/.rspec +0 -4
- data/test/config.json.example +0 -42
- data/test/config.json.rpm-automation +0 -15
- data/test/config.json.travis +0 -15
- data/test/config.json.vagrant +0 -30
- data/test/cxx/ApplicationPool2/DirectSpawnerTest.cpp +0 -124
- data/test/cxx/ApplicationPool2/OptionsTest.cpp +0 -30
- data/test/cxx/ApplicationPool2/PoolTest.cpp +0 -2062
- data/test/cxx/ApplicationPool2/ProcessTest.cpp +0 -130
- data/test/cxx/ApplicationPool2/SmartSpawnerTest.cpp +0 -243
- data/test/cxx/ApplicationPool2/SpawnerTestCases.cpp +0 -823
- data/test/cxx/BufferedIOTest.cpp +0 -364
- data/test/cxx/CachedFileStatTest.cpp +0 -402
- data/test/cxx/CxxTestMain.cpp +0 -181
- data/test/cxx/DataStructures/LStringTest.cpp +0 -275
- data/test/cxx/DataStructures/StringKeyTableTest.cpp +0 -199
- data/test/cxx/DateParsingTest.cpp +0 -75
- data/test/cxx/DechunkerTest.cpp +0 -250
- data/test/cxx/EventedBufferedInputTest.cpp +0 -758
- data/test/cxx/EventedClientTest.cpp +0 -523
- data/test/cxx/FileChangeCheckerTest.cpp +0 -331
- data/test/cxx/FileDescriptorTest.cpp +0 -69
- data/test/cxx/FilterSupportTest.cpp +0 -433
- data/test/cxx/IOUtilsTest.cpp +0 -861
- data/test/cxx/MemoryKit/MbufTest.cpp +0 -213
- data/test/cxx/MessageIOTest.cpp +0 -360
- data/test/cxx/MessagePassingTest.cpp +0 -81
- data/test/cxx/MessageReadersWritersTest.cpp +0 -576
- data/test/cxx/MessageServerTest.cpp +0 -393
- data/test/cxx/ProcessMetricsCollectorTest.cpp +0 -123
- data/test/cxx/RequestHandlerTest.cpp +0 -1463
- data/test/cxx/ResponseCacheTest.cpp +0 -322
- data/test/cxx/ServerKit/ChannelTest.cpp +0 -1467
- data/test/cxx/ServerKit/CookieUtilsTest.cpp +0 -274
- data/test/cxx/ServerKit/FileBufferedChannelTest.cpp +0 -992
- data/test/cxx/ServerKit/HeaderTableTest.cpp +0 -177
- data/test/cxx/ServerKit/HttpServerTest.cpp +0 -1580
- data/test/cxx/ServerKit/ServerTest.cpp +0 -408
- data/test/cxx/StaticStringTest.cpp +0 -220
- data/test/cxx/StringMapTest.cpp +0 -131
- data/test/cxx/SystemTimeTest.cpp +0 -37
- data/test/cxx/TemplateTest.cpp +0 -118
- data/test/cxx/TestSupport.cpp +0 -207
- data/test/cxx/TestSupport.h +0 -333
- data/test/cxx/UnionStationTest.cpp +0 -741
- data/test/cxx/Utils/StrIntUtilsTest.cpp +0 -39
- data/test/cxx/UtilsTest.cpp +0 -672
- data/test/cxx/VariantMapTest.cpp +0 -191
- data/test/gdbinit.example +0 -34
- data/test/integration_tests/apache2_tests.rb +0 -585
- data/test/integration_tests/downloaded_binaries_tests.rb +0 -185
- data/test/integration_tests/native_packaging_spec.rb +0 -368
- data/test/integration_tests/nginx_tests.rb +0 -402
- data/test/integration_tests/shared/example_webapp_tests.rb +0 -289
- data/test/integration_tests/source_packaging_test.rb +0 -201
- data/test/integration_tests/spec_helper.rb +0 -22
- data/test/integration_tests/standalone_tests.rb +0 -392
- data/test/node/line_reader_spec.js +0 -338
- data/test/node/spec_helper.js +0 -65
- data/test/oxt/backtrace_test.cpp +0 -88
- data/test/oxt/counter.hpp +0 -55
- data/test/oxt/dynamic_thread_group_test.cpp +0 -131
- data/test/oxt/oxt_test_main.cpp +0 -27
- data/test/oxt/spin_lock_test.cpp +0 -59
- data/test/oxt/syscall_interruption_test.cpp +0 -39
- data/test/ruby/debug_logging_spec.rb +0 -145
- data/test/ruby/message_channel_spec.rb +0 -196
- data/test/ruby/rack/loader_spec.rb +0 -42
- data/test/ruby/rack/preloader_spec.rb +0 -48
- data/test/ruby/rails3.0/loader_spec.rb +0 -26
- data/test/ruby/rails3.0/preloader_spec.rb +0 -32
- data/test/ruby/rails3.1/loader_spec.rb +0 -26
- data/test/ruby/rails3.1/preloader_spec.rb +0 -32
- data/test/ruby/rails3.2/loader_spec.rb +0 -26
- data/test/ruby/rails3.2/preloader_spec.rb +0 -32
- data/test/ruby/rails4.0/loader_spec.rb +0 -28
- data/test/ruby/rails4.0/preloader_spec.rb +0 -34
- data/test/ruby/rails4.1/loader_spec.rb +0 -28
- data/test/ruby/rails4.1/preloader_spec.rb +0 -34
- data/test/ruby/request_handler_spec.rb +0 -747
- data/test/ruby/shared/loader_sharedspec.rb +0 -247
- data/test/ruby/shared/rails/union_station_extensions_sharedspec.rb +0 -357
- data/test/ruby/shared/ruby_loader_sharedspec.rb +0 -55
- data/test/ruby/spec_helper.rb +0 -114
- data/test/ruby/standalone/runtime_installer_spec.rb +0 -402
- data/test/ruby/union_station_spec.rb +0 -288
- data/test/ruby/utils/file_system_watcher_spec.rb +0 -229
- data/test/ruby/utils/hosts_file_parser.rb +0 -258
- data/test/ruby/utils/tee_input_spec.rb +0 -235
- data/test/ruby/utils/unseekable_socket_spec.rb +0 -66
- data/test/ruby/utils_spec.rb +0 -41
- data/test/stub/apache2/httpd.conf.erb +0 -122
- data/test/stub/apache2/mime.types +0 -748
- data/test/stub/garbage1.dat +0 -0
- data/test/stub/garbage2.dat +0 -0
- data/test/stub/garbage3.dat +0 -0
- data/test/stub/http_request.yml +0 -23
- data/test/stub/index.html +0 -1
- data/test/stub/nginx/koi-utf +0 -109
- data/test/stub/nginx/koi-win +0 -103
- data/test/stub/nginx/mime.types +0 -70
- data/test/stub/nginx/nginx.conf.erb +0 -70
- data/test/stub/nginx/win-utf +0 -126
- data/test/stub/node/app.js +0 -133
- data/test/stub/node/public/.gitignore +0 -0
- data/test/stub/node/tmp/.gitignore +0 -0
- data/test/stub/rack/config.ru +0 -95
- data/test/stub/rack/library.rb +0 -16
- data/test/stub/rack/public/.gitignore +0 -0
- data/test/stub/rack/start.rb +0 -52
- data/test/stub/rack/tmp/.gitignore +0 -0
- data/test/stub/rails3.0/.gitignore +0 -4
- data/test/stub/rails3.0/Gemfile +0 -22
- data/test/stub/rails3.0/Gemfile.lock +0 -80
- data/test/stub/rails3.0/Rakefile +0 -10
- data/test/stub/rails3.0/app/controllers/application_controller.rb +0 -4
- data/test/stub/rails3.0/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails3.0/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails3.0/config.ru +0 -4
- data/test/stub/rails3.0/config/application.rb +0 -48
- data/test/stub/rails3.0/config/boot.rb +0 -13
- data/test/stub/rails3.0/config/database.yml +0 -22
- data/test/stub/rails3.0/config/environment.rb +0 -5
- data/test/stub/rails3.0/config/environments/development.rb +0 -19
- data/test/stub/rails3.0/config/environments/production.rb +0 -48
- data/test/stub/rails3.0/config/environments/test.rb +0 -32
- data/test/stub/rails3.0/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails3.0/config/initializers/inflections.rb +0 -10
- data/test/stub/rails3.0/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails3.0/config/initializers/passenger.rb +0 -2
- data/test/stub/rails3.0/config/initializers/secret_token.rb +0 -7
- data/test/stub/rails3.0/config/initializers/session_store.rb +0 -8
- data/test/stub/rails3.0/config/locales/en.yml +0 -5
- data/test/stub/rails3.0/config/routes.rb +0 -58
- data/test/stub/rails3.0/db/seeds.rb +0 -7
- data/test/stub/rails3.0/doc/README_FOR_APP +0 -2
- data/test/stub/rails3.0/lib/tasks/.gitkeep +0 -0
- data/test/stub/rails3.0/log/.gitignore +0 -0
- data/test/stub/rails3.0/public/404.html +0 -26
- data/test/stub/rails3.0/public/422.html +0 -26
- data/test/stub/rails3.0/public/500.html +0 -26
- data/test/stub/rails3.0/public/favicon.ico +0 -0
- data/test/stub/rails3.0/public/index.html +0 -279
- data/test/stub/rails3.0/public/robots.txt +0 -5
- data/test/stub/rails3.0/public/stylesheets/.gitkeep +0 -0
- data/test/stub/rails3.0/script/rails +0 -9
- data/test/stub/rails3.0/test/performance/browsing_test.rb +0 -9
- data/test/stub/rails3.0/test/test_helper.rb +0 -13
- data/test/stub/rails3.0/vendor/plugins/.gitkeep +0 -0
- data/test/stub/rails3.1/.gitignore +0 -15
- data/test/stub/rails3.1/Gemfile +0 -37
- data/test/stub/rails3.1/Gemfile.lock +0 -115
- data/test/stub/rails3.1/README +0 -261
- data/test/stub/rails3.1/Rakefile +0 -7
- data/test/stub/rails3.1/app/assets/images/rails.png +0 -0
- data/test/stub/rails3.1/app/assets/stylesheets/application.css +0 -7
- data/test/stub/rails3.1/app/controllers/application_controller.rb +0 -3
- data/test/stub/rails3.1/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails3.1/app/mailers/.gitkeep +0 -0
- data/test/stub/rails3.1/app/models/.gitkeep +0 -0
- data/test/stub/rails3.1/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails3.1/config.ru +0 -4
- data/test/stub/rails3.1/config/application.rb +0 -48
- data/test/stub/rails3.1/config/boot.rb +0 -6
- data/test/stub/rails3.1/config/database.yml +0 -25
- data/test/stub/rails3.1/config/environment.rb +0 -5
- data/test/stub/rails3.1/config/environments/development.rb +0 -30
- data/test/stub/rails3.1/config/environments/production.rb +0 -60
- data/test/stub/rails3.1/config/environments/test.rb +0 -39
- data/test/stub/rails3.1/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails3.1/config/initializers/inflections.rb +0 -10
- data/test/stub/rails3.1/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails3.1/config/initializers/passenger.rb +0 -2
- data/test/stub/rails3.1/config/initializers/secret_token.rb +0 -7
- data/test/stub/rails3.1/config/initializers/session_store.rb +0 -8
- data/test/stub/rails3.1/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails3.1/config/locales/en.yml +0 -5
- data/test/stub/rails3.1/config/routes.rb +0 -58
- data/test/stub/rails3.1/db/seeds.rb +0 -7
- data/test/stub/rails3.1/doc/README_FOR_APP +0 -2
- data/test/stub/rails3.1/lib/assets/.gitkeep +0 -0
- data/test/stub/rails3.1/lib/tasks/.gitkeep +0 -0
- data/test/stub/rails3.1/log/.gitkeep +0 -0
- data/test/stub/rails3.1/public/404.html +0 -26
- data/test/stub/rails3.1/public/422.html +0 -26
- data/test/stub/rails3.1/public/500.html +0 -26
- data/test/stub/rails3.1/public/favicon.ico +0 -0
- data/test/stub/rails3.1/public/index.html +0 -241
- data/test/stub/rails3.1/public/robots.txt +0 -5
- data/test/stub/rails3.1/script/rails +0 -6
- data/test/stub/rails3.1/test/fixtures/.gitkeep +0 -0
- data/test/stub/rails3.1/test/functional/.gitkeep +0 -0
- data/test/stub/rails3.1/test/integration/.gitkeep +0 -0
- data/test/stub/rails3.1/test/performance/browsing_test.rb +0 -12
- data/test/stub/rails3.1/test/test_helper.rb +0 -13
- data/test/stub/rails3.1/test/unit/.gitkeep +0 -0
- data/test/stub/rails3.1/vendor/assets/stylesheets/.gitkeep +0 -0
- data/test/stub/rails3.1/vendor/plugins/.gitkeep +0 -0
- data/test/stub/rails3.2/.gitignore +0 -15
- data/test/stub/rails3.2/Gemfile +0 -39
- data/test/stub/rails3.2/Gemfile.lock +0 -113
- data/test/stub/rails3.2/Rakefile +0 -7
- data/test/stub/rails3.2/app/assets/images/rails.png +0 -0
- data/test/stub/rails3.2/app/assets/stylesheets/application.css +0 -13
- data/test/stub/rails3.2/app/controllers/application_controller.rb +0 -3
- data/test/stub/rails3.2/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails3.2/app/mailers/.gitkeep +0 -0
- data/test/stub/rails3.2/app/models/.gitkeep +0 -0
- data/test/stub/rails3.2/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails3.2/config.ru +0 -4
- data/test/stub/rails3.2/config/application.rb +0 -62
- data/test/stub/rails3.2/config/boot.rb +0 -6
- data/test/stub/rails3.2/config/database.yml +0 -25
- data/test/stub/rails3.2/config/environment.rb +0 -5
- data/test/stub/rails3.2/config/environments/development.rb +0 -37
- data/test/stub/rails3.2/config/environments/production.rb +0 -67
- data/test/stub/rails3.2/config/environments/test.rb +0 -37
- data/test/stub/rails3.2/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails3.2/config/initializers/inflections.rb +0 -15
- data/test/stub/rails3.2/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails3.2/config/initializers/passenger.rb +0 -2
- data/test/stub/rails3.2/config/initializers/secret_token.rb +0 -7
- data/test/stub/rails3.2/config/initializers/session_store.rb +0 -8
- data/test/stub/rails3.2/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails3.2/config/locales/en.yml +0 -5
- data/test/stub/rails3.2/config/routes.rb +0 -58
- data/test/stub/rails3.2/db/seeds.rb +0 -7
- data/test/stub/rails3.2/doc/README_FOR_APP +0 -2
- data/test/stub/rails3.2/lib/assets/.gitkeep +0 -0
- data/test/stub/rails3.2/lib/tasks/.gitkeep +0 -0
- data/test/stub/rails3.2/log/.gitkeep +0 -0
- data/test/stub/rails3.2/public/404.html +0 -26
- data/test/stub/rails3.2/public/422.html +0 -26
- data/test/stub/rails3.2/public/500.html +0 -25
- data/test/stub/rails3.2/public/favicon.ico +0 -0
- data/test/stub/rails3.2/public/index.html +0 -241
- data/test/stub/rails3.2/public/robots.txt +0 -5
- data/test/stub/rails3.2/script/rails +0 -6
- data/test/stub/rails3.2/test/fixtures/.gitkeep +0 -0
- data/test/stub/rails3.2/test/functional/.gitkeep +0 -0
- data/test/stub/rails3.2/test/integration/.gitkeep +0 -0
- data/test/stub/rails3.2/test/performance/browsing_test.rb +0 -12
- data/test/stub/rails3.2/test/test_helper.rb +0 -13
- data/test/stub/rails3.2/test/unit/.gitkeep +0 -0
- data/test/stub/rails3.2/vendor/assets/stylesheets/.gitkeep +0 -0
- data/test/stub/rails3.2/vendor/plugins/.gitkeep +0 -0
- data/test/stub/rails4.0/.gitignore +0 -16
- data/test/stub/rails4.0/Gemfile +0 -45
- data/test/stub/rails4.0/Gemfile.lock +0 -126
- data/test/stub/rails4.0/README.rdoc +0 -28
- data/test/stub/rails4.0/Rakefile +0 -6
- data/test/stub/rails4.0/app/assets/images/.keep +0 -0
- data/test/stub/rails4.0/app/assets/javascripts/application.js +0 -16
- data/test/stub/rails4.0/app/assets/stylesheets/application.css +0 -13
- data/test/stub/rails4.0/app/controllers/application_controller.rb +0 -5
- data/test/stub/rails4.0/app/controllers/concerns/.keep +0 -0
- data/test/stub/rails4.0/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails4.0/app/mailers/.keep +0 -0
- data/test/stub/rails4.0/app/models/.keep +0 -0
- data/test/stub/rails4.0/app/models/concerns/.keep +0 -0
- data/test/stub/rails4.0/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails4.0/bin/bundle +0 -3
- data/test/stub/rails4.0/bin/rails +0 -4
- data/test/stub/rails4.0/bin/rake +0 -4
- data/test/stub/rails4.0/config.ru +0 -4
- data/test/stub/rails4.0/config/application.rb +0 -23
- data/test/stub/rails4.0/config/boot.rb +0 -4
- data/test/stub/rails4.0/config/database.yml +0 -25
- data/test/stub/rails4.0/config/environment.rb +0 -5
- data/test/stub/rails4.0/config/environments/development.rb +0 -29
- data/test/stub/rails4.0/config/environments/production.rb +0 -80
- data/test/stub/rails4.0/config/environments/test.rb +0 -36
- data/test/stub/rails4.0/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails4.0/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/stub/rails4.0/config/initializers/inflections.rb +0 -16
- data/test/stub/rails4.0/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails4.0/config/initializers/passenger.rb +0 -2
- data/test/stub/rails4.0/config/initializers/secret_token.rb +0 -12
- data/test/stub/rails4.0/config/initializers/session_store.rb +0 -3
- data/test/stub/rails4.0/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails4.0/config/locales/en.yml +0 -23
- data/test/stub/rails4.0/config/routes.rb +0 -57
- data/test/stub/rails4.0/db/seeds.rb +0 -7
- data/test/stub/rails4.0/lib/assets/.keep +0 -0
- data/test/stub/rails4.0/lib/tasks/.keep +0 -0
- data/test/stub/rails4.0/log/.keep +0 -0
- data/test/stub/rails4.0/public/404.html +0 -58
- data/test/stub/rails4.0/public/422.html +0 -58
- data/test/stub/rails4.0/public/500.html +0 -57
- data/test/stub/rails4.0/public/favicon.ico +0 -0
- data/test/stub/rails4.0/public/robots.txt +0 -5
- data/test/stub/rails4.0/test/controllers/.keep +0 -0
- data/test/stub/rails4.0/test/fixtures/.keep +0 -0
- data/test/stub/rails4.0/test/helpers/.keep +0 -0
- data/test/stub/rails4.0/test/integration/.keep +0 -0
- data/test/stub/rails4.0/test/mailers/.keep +0 -0
- data/test/stub/rails4.0/test/models/.keep +0 -0
- data/test/stub/rails4.0/test/test_helper.rb +0 -15
- data/test/stub/rails4.0/vendor/assets/javascripts/.keep +0 -0
- data/test/stub/rails4.0/vendor/assets/stylesheets/.keep +0 -0
- data/test/stub/rails4.1/.gitignore +0 -16
- data/test/stub/rails4.1/Gemfile +0 -45
- data/test/stub/rails4.1/Gemfile.lock +0 -129
- data/test/stub/rails4.1/README.rdoc +0 -28
- data/test/stub/rails4.1/Rakefile +0 -6
- data/test/stub/rails4.1/app/assets/images/.keep +0 -0
- data/test/stub/rails4.1/app/assets/javascripts/application.js +0 -16
- data/test/stub/rails4.1/app/assets/stylesheets/application.css +0 -13
- data/test/stub/rails4.1/app/controllers/application_controller.rb +0 -5
- data/test/stub/rails4.1/app/controllers/concerns/.keep +0 -0
- data/test/stub/rails4.1/app/helpers/application_helper.rb +0 -2
- data/test/stub/rails4.1/app/mailers/.keep +0 -0
- data/test/stub/rails4.1/app/models/.keep +0 -0
- data/test/stub/rails4.1/app/models/concerns/.keep +0 -0
- data/test/stub/rails4.1/app/views/layouts/application.html.erb +0 -14
- data/test/stub/rails4.1/bin/bundle +0 -3
- data/test/stub/rails4.1/bin/rails +0 -4
- data/test/stub/rails4.1/bin/rake +0 -4
- data/test/stub/rails4.1/config.ru +0 -4
- data/test/stub/rails4.1/config/application.rb +0 -23
- data/test/stub/rails4.1/config/boot.rb +0 -4
- data/test/stub/rails4.1/config/database.yml +0 -25
- data/test/stub/rails4.1/config/environment.rb +0 -5
- data/test/stub/rails4.1/config/environments/development.rb +0 -29
- data/test/stub/rails4.1/config/environments/production.rb +0 -80
- data/test/stub/rails4.1/config/environments/test.rb +0 -36
- data/test/stub/rails4.1/config/initializers/backtrace_silencers.rb +0 -7
- data/test/stub/rails4.1/config/initializers/filter_parameter_logging.rb +0 -4
- data/test/stub/rails4.1/config/initializers/inflections.rb +0 -16
- data/test/stub/rails4.1/config/initializers/mime_types.rb +0 -5
- data/test/stub/rails4.1/config/initializers/passenger.rb +0 -5
- data/test/stub/rails4.1/config/initializers/secret_token.rb +0 -12
- data/test/stub/rails4.1/config/initializers/session_store.rb +0 -3
- data/test/stub/rails4.1/config/initializers/wrap_parameters.rb +0 -14
- data/test/stub/rails4.1/config/locales/en.yml +0 -23
- data/test/stub/rails4.1/config/routes.rb +0 -57
- data/test/stub/rails4.1/db/seeds.rb +0 -7
- data/test/stub/rails4.1/lib/assets/.keep +0 -0
- data/test/stub/rails4.1/lib/tasks/.keep +0 -0
- data/test/stub/rails4.1/log/.keep +0 -0
- data/test/stub/rails4.1/public/404.html +0 -58
- data/test/stub/rails4.1/public/422.html +0 -58
- data/test/stub/rails4.1/public/500.html +0 -57
- data/test/stub/rails4.1/public/favicon.ico +0 -0
- data/test/stub/rails4.1/public/robots.txt +0 -5
- data/test/stub/rails4.1/test/controllers/.keep +0 -0
- data/test/stub/rails4.1/test/fixtures/.keep +0 -0
- data/test/stub/rails4.1/test/helpers/.keep +0 -0
- data/test/stub/rails4.1/test/integration/.keep +0 -0
- data/test/stub/rails4.1/test/mailers/.keep +0 -0
- data/test/stub/rails4.1/test/models/.keep +0 -0
- data/test/stub/rails4.1/test/test_helper.rb +0 -15
- data/test/stub/rails4.1/vendor/assets/javascripts/.keep +0 -0
- data/test/stub/rails4.1/vendor/assets/stylesheets/.keep +0 -0
- data/test/stub/start_error.pl +0 -24
- data/test/stub/upload_data.txt +0 -494
- data/test/stub/wsgi/passenger_wsgi.py +0 -212
- data/test/stub/wsgi/public/.gitignore +0 -0
- data/test/stub/wsgi/tmp/.gitignore +0 -0
- data/test/support/allocate_memory.c +0 -14
- data/test/support/apache2_controller.rb +0 -258
- data/test/support/multipart.rb +0 -62
- data/test/support/nginx_controller.rb +0 -97
- data/test/support/placebo-preloader.rb +0 -88
- data/test/support/test_helper.rb +0 -455
- data/test/support/valgrind.h +0 -2539
- data/test/tut/tut.h +0 -1310
- data/test/tut/tut_reporter.h +0 -256
- data/test/valgrind-osx.supp +0 -7
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010-
|
3
|
+
* Copyright (c) 2010-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -414,7 +414,7 @@ public:
|
|
414
414
|
return;
|
415
415
|
}
|
416
416
|
|
417
|
-
StdioGuard guard(f);
|
417
|
+
StdioGuard guard(f, NULL, 0);
|
418
418
|
bool hasPss = false;
|
419
419
|
bool hasPrivateDirty = false;
|
420
420
|
bool hasSwap = false;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2010
|
3
|
+
* Copyright (c) 2010-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -30,6 +30,7 @@
|
|
30
30
|
#include <boost/thread.hpp>
|
31
31
|
#include <oxt/system_calls.hpp>
|
32
32
|
#include <cstdio>
|
33
|
+
#include <Logging.h>
|
33
34
|
|
34
35
|
namespace Passenger {
|
35
36
|
|
@@ -99,12 +100,17 @@ public:
|
|
99
100
|
: f(0)
|
100
101
|
{ }
|
101
102
|
|
102
|
-
StdioGuard(FILE *_f)
|
103
|
+
StdioGuard(FILE *_f, const char *file, unsigned int line)
|
103
104
|
: f(_f)
|
104
|
-
|
105
|
+
{
|
106
|
+
if (_f != NULL && file != NULL) {
|
107
|
+
P_LOG_FILE_DESCRIPTOR_OPEN3(fileno(_f), file, line);
|
108
|
+
}
|
109
|
+
}
|
105
110
|
|
106
111
|
~StdioGuard() {
|
107
112
|
if (f != NULL) {
|
113
|
+
P_LOG_FILE_DESCRIPTOR_CLOSE(fileno(f));
|
108
114
|
fclose(f);
|
109
115
|
}
|
110
116
|
}
|
@@ -116,14 +122,19 @@ private:
|
|
116
122
|
bool ignoreErrors;
|
117
123
|
|
118
124
|
public:
|
119
|
-
FdGuard(int _fd, bool _ignoreErrors = false)
|
125
|
+
FdGuard(int _fd, const char *file, unsigned int line, bool _ignoreErrors = false)
|
120
126
|
: fd(_fd),
|
121
127
|
ignoreErrors(_ignoreErrors)
|
122
|
-
|
128
|
+
{
|
129
|
+
if (_fd != -1 && file != NULL) {
|
130
|
+
P_LOG_FILE_DESCRIPTOR_OPEN3(_fd, file, line);
|
131
|
+
}
|
132
|
+
}
|
123
133
|
|
124
134
|
~FdGuard() {
|
125
135
|
if (fd != -1) {
|
126
136
|
safelyClose(fd, ignoreErrors);
|
137
|
+
P_LOG_FILE_DESCRIPTOR_CLOSE(fd);
|
127
138
|
}
|
128
139
|
}
|
129
140
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2014 Phusion
|
3
|
+
* Copyright (c) 2014-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -59,7 +59,7 @@ namespace Passenger {
|
|
59
59
|
* ### `maxSamples`
|
60
60
|
*
|
61
61
|
* `maxSamples` dictates the sample buffer size: the maximum number of samples
|
62
|
-
* to hold in memory. Defaults to
|
62
|
+
* to hold in memory. Defaults to 8.
|
63
63
|
*
|
64
64
|
* The more samples you have, the more historical data influences the results.
|
65
65
|
* If you have few samples then recent data have the most impact on the results.
|
@@ -111,8 +111,8 @@ splitIncludeSep(const StaticString &str, char sep, vector<StaticString> &output)
|
|
111
111
|
}
|
112
112
|
|
113
113
|
void
|
114
|
-
truncateBeforeTokens(const char*
|
115
|
-
|
114
|
+
truncateBeforeTokens(const char *str, const StaticString &tokens, int maxBetweenTokens, ostream &sstream) {
|
115
|
+
StaticString source(str);
|
116
116
|
|
117
117
|
if (source.empty()) {
|
118
118
|
return;
|
@@ -233,10 +233,10 @@ stringToUnsignedNumeric(const StaticString &str) {
|
|
233
233
|
string::size_type i = 0;
|
234
234
|
const char *data = str.data();
|
235
235
|
|
236
|
-
while (data[i] == ' '
|
236
|
+
while (i < str.size() && data[i] == ' ') {
|
237
237
|
i++;
|
238
238
|
}
|
239
|
-
while (data[i] >= '0' && data[i] <= '9'
|
239
|
+
while (i < str.size() && data[i] >= '0' && data[i] <= '9') {
|
240
240
|
result *= 10;
|
241
241
|
result += data[i] - '0';
|
242
242
|
i++;
|
@@ -262,14 +262,14 @@ stringToSignedNumeric(const StaticString &str) {
|
|
262
262
|
const char *data = str.data();
|
263
263
|
bool minus = false;
|
264
264
|
|
265
|
-
while (data[i] == ' '
|
265
|
+
while (i < str.size() && data[i] == ' ') {
|
266
266
|
i++;
|
267
267
|
}
|
268
268
|
if (data[i] == '-') {
|
269
269
|
minus = true;
|
270
270
|
i++;
|
271
271
|
}
|
272
|
-
while (data[i] >= '0' && data[i] <= '9'
|
272
|
+
while (i < str.size() && data[i] >= '0' && data[i] <= '9') {
|
273
273
|
result *= 10;
|
274
274
|
result += data[i] - '0';
|
275
275
|
i++;
|
@@ -27,6 +27,7 @@
|
|
27
27
|
|
28
28
|
#include <string>
|
29
29
|
#include <vector>
|
30
|
+
#include <ostream>
|
30
31
|
#include <sstream>
|
31
32
|
#include <stdexcept>
|
32
33
|
#include <new>
|
@@ -134,7 +135,7 @@ void splitIncludeSep(const StaticString & restrict_ref str,
|
|
134
135
|
*
|
135
136
|
* Example: ("hello/world\\path/Splitter.cpp", "\\/", 3, sstream) results in sstream << "hel/wor\\pat/Splitter.cpp"
|
136
137
|
*/
|
137
|
-
void truncateBeforeTokens(const char*
|
138
|
+
void truncateBeforeTokens(const char *str, const StaticString &tokens, int maxBetweenTokens, ostream &sstream);
|
138
139
|
|
139
140
|
/**
|
140
141
|
* Look for 'toFind' inside 'str', replace it with 'replaceWith' and return the result.
|
data/ext/common/agents/Base.cpp
CHANGED
@@ -1518,7 +1518,7 @@ initializeAgent(int argc, char **argv[], const char *processName,
|
|
1518
1518
|
argc - argStartIndex);
|
1519
1519
|
}
|
1520
1520
|
|
1521
|
-
initializeAgentOptions(options, preinit);
|
1521
|
+
initializeAgentOptions(processName, options, preinit);
|
1522
1522
|
} catch (const tracable_exception &e) {
|
1523
1523
|
P_ERROR("*** ERROR: " << e.what() << "\n" << e.backtrace());
|
1524
1524
|
exit(1);
|
@@ -1546,7 +1546,9 @@ initializeAgent(int argc, char **argv[], const char *processName,
|
|
1546
1546
|
}
|
1547
1547
|
|
1548
1548
|
void
|
1549
|
-
initializeAgentOptions(VariantMap &options,
|
1549
|
+
initializeAgentOptions(const char *processName, VariantMap &options,
|
1550
|
+
PreinitializationFunc preinit)
|
1551
|
+
{
|
1550
1552
|
ResourceLocator locator;
|
1551
1553
|
string ruby;
|
1552
1554
|
|
@@ -1579,10 +1581,60 @@ initializeAgentOptions(VariantMap &options, PreinitializationFunc preinit) {
|
|
1579
1581
|
if (preinit != NULL) {
|
1580
1582
|
preinit(options);
|
1581
1583
|
}
|
1584
|
+
|
1582
1585
|
options.setDefaultInt("log_level", DEFAULT_LOG_LEVEL);
|
1583
1586
|
setLogLevel(options.getInt("log_level"));
|
1584
|
-
|
1585
|
-
|
1587
|
+
string logFile;
|
1588
|
+
if (options.has("log_file")) {
|
1589
|
+
logFile = options.get("log_file");
|
1590
|
+
} else if (options.has("debug_log_file")) {
|
1591
|
+
logFile = options.get("debug_log_file");
|
1592
|
+
}
|
1593
|
+
if (!logFile.empty()) {
|
1594
|
+
try {
|
1595
|
+
logFile = absolutizePath(logFile);
|
1596
|
+
} catch (const SystemException &e) {
|
1597
|
+
P_WARN("Cannot absolutize filename '" << logFile
|
1598
|
+
<< "': " << e.what());
|
1599
|
+
}
|
1600
|
+
setLogFile(logFile);
|
1601
|
+
}
|
1602
|
+
|
1603
|
+
if (options.has("file_descriptor_log_file")) {
|
1604
|
+
logFile = options.get("file_descriptor_log_file");
|
1605
|
+
try {
|
1606
|
+
logFile = absolutizePath(logFile);
|
1607
|
+
} catch (const SystemException &e) {
|
1608
|
+
P_WARN("Cannot absolutize filename '" << logFile
|
1609
|
+
<< "': " << e.what());
|
1610
|
+
}
|
1611
|
+
setFileDescriptorLogFile(logFile);
|
1612
|
+
|
1613
|
+
// This information helps dev/parse_file_descriptor_log.
|
1614
|
+
FastStringStream<> stream;
|
1615
|
+
_prepareLogEntry(stream, __FILE__, __LINE__);
|
1616
|
+
stream << "Starting agent: " << processName << "\n";
|
1617
|
+
_writeFileDescriptorLogEntry(stream.data(), stream.size());
|
1618
|
+
|
1619
|
+
P_LOG_FILE_DESCRIPTOR_OPEN4(getFileDescriptorLogFileFd(), __FILE__, __LINE__,
|
1620
|
+
"file descriptor log file " << options.get("file_descriptor_log_file"));
|
1621
|
+
} else {
|
1622
|
+
// This information helps dev/parse_file_descriptor_log.
|
1623
|
+
P_DEBUG("Starting agent: " << processName);
|
1624
|
+
}
|
1625
|
+
|
1626
|
+
if (hasEnvOption("PASSENGER_USE_FEEDBACK_FD")) {
|
1627
|
+
P_LOG_FILE_DESCRIPTOR_OPEN2(FEEDBACK_FD, "feedback FD");
|
1628
|
+
}
|
1629
|
+
if (emergencyPipe1[0] != -1) {
|
1630
|
+
P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe1[0], __FILE__, __LINE__,
|
1631
|
+
"Emergency pipe 1-0");
|
1632
|
+
P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe1[1], __FILE__, __LINE__,
|
1633
|
+
"Emergency pipe 1-1");
|
1634
|
+
P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe2[0], __FILE__, __LINE__,
|
1635
|
+
"Emergency pipe 2-0");
|
1636
|
+
P_LOG_FILE_DESCRIPTOR_OPEN4(emergencyPipe2[1], __FILE__, __LINE__,
|
1637
|
+
"Emergency pipe 2-1");
|
1586
1638
|
}
|
1587
1639
|
}
|
1588
1640
|
|
data/ext/common/agents/Base.h
CHANGED
@@ -43,7 +43,8 @@ bool feedbackFdAvailable();
|
|
43
43
|
VariantMap initializeAgent(int argc, char **argv[], const char *processName,
|
44
44
|
OptionParserFunc optionParser = NULL, PreinitializationFunc preinit = NULL,
|
45
45
|
int argStartIndex = 1);
|
46
|
-
void initializeAgentOptions(VariantMap &options,
|
46
|
+
void initializeAgentOptions(const char *processName, VariantMap &options,
|
47
|
+
PreinitializationFunc preinit = NULL);
|
47
48
|
void installAgentAbortHandler();
|
48
49
|
void installDiagnosticsDumper(DiagnosticsDumper func, void *userData);
|
49
50
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
/*
|
2
2
|
* Phusion Passenger - https://www.phusionpassenger.com/
|
3
|
-
* Copyright (c) 2013-
|
3
|
+
* Copyright (c) 2013-2015 Phusion
|
4
4
|
*
|
5
5
|
* "Phusion Passenger" is a trademark of Hongli Lai & Ninh Bui.
|
6
6
|
*
|
@@ -25,6 +25,7 @@
|
|
25
25
|
#ifndef _PASSENGER_SERVER_AGENT_ADMIN_SERVER_H_
|
26
26
|
#define _PASSENGER_SERVER_AGENT_ADMIN_SERVER_H_
|
27
27
|
|
28
|
+
#include <boost/regex.hpp>
|
28
29
|
#include <oxt/thread.hpp>
|
29
30
|
#include <sstream>
|
30
31
|
#include <string>
|
@@ -75,6 +76,12 @@ private:
|
|
75
76
|
typedef ServerKit::HttpClient<Request> Client;
|
76
77
|
typedef ServerKit::HeaderTable HeaderTable;
|
77
78
|
|
79
|
+
boost::regex serverConnectionPath;
|
80
|
+
|
81
|
+
bool regex_match(const StaticString &str, const boost::regex &e) const {
|
82
|
+
return boost::regex_match(str.data(), str.data() + str.size(), e);
|
83
|
+
}
|
84
|
+
|
78
85
|
bool parseAuthorizationHeader(Request *req, string &username,
|
79
86
|
string &password) const
|
80
87
|
{
|
@@ -126,6 +133,19 @@ private:
|
|
126
133
|
&& constantTimeCompare(password, auth->password);
|
127
134
|
}
|
128
135
|
|
136
|
+
int extractThreadNumberFromClientName(const string &clientName) const {
|
137
|
+
boost::smatch results;
|
138
|
+
boost::regex re("^([0-9]+)-.*");
|
139
|
+
|
140
|
+
if (!boost::regex_match(clientName, results, re)) {
|
141
|
+
return -1;
|
142
|
+
}
|
143
|
+
if (results.size() != 2) {
|
144
|
+
return -1;
|
145
|
+
}
|
146
|
+
return stringToUint(results.str(1));
|
147
|
+
}
|
148
|
+
|
129
149
|
static VariantMap parseQueryString(const StaticString &query) {
|
130
150
|
VariantMap params;
|
131
151
|
const char *pos = query.data();
|
@@ -155,6 +175,52 @@ private:
|
|
155
175
|
return params;
|
156
176
|
}
|
157
177
|
|
178
|
+
static void disconnectClient(RequestHandler *rh, string clientName) {
|
179
|
+
rh->disconnect(clientName);
|
180
|
+
}
|
181
|
+
|
182
|
+
void processServerConnectionOperation(Client *client, Request *req) {
|
183
|
+
if (!authorize(client, req, FULL)) {
|
184
|
+
respondWith401(client, req);
|
185
|
+
} else if (req->method == HTTP_DELETE) {
|
186
|
+
StaticString path = req->getPathWithoutQueryString();
|
187
|
+
boost::smatch results;
|
188
|
+
|
189
|
+
boost::regex_match(path.toString(), results, serverConnectionPath);
|
190
|
+
if (results.size() != 2) {
|
191
|
+
endAsBadRequest(&client, &req, "Invalid URI");
|
192
|
+
return;
|
193
|
+
}
|
194
|
+
|
195
|
+
int threadNumber = extractThreadNumberFromClientName(results.str(1));
|
196
|
+
P_WARN(results.str(1));
|
197
|
+
P_WARN(threadNumber);
|
198
|
+
if (threadNumber < 1 || (unsigned int) threadNumber > requestHandlers.size()) {
|
199
|
+
HeaderTable headers;
|
200
|
+
headers.insert(req->pool, "content-type", "application/json");
|
201
|
+
writeSimpleResponse(client, 400, &headers,
|
202
|
+
"{ \"status\": \"error\", \"reason\": \"Invalid thread number\" }");
|
203
|
+
if (!req->ended()) {
|
204
|
+
endRequest(&client, &req);
|
205
|
+
}
|
206
|
+
return;
|
207
|
+
}
|
208
|
+
|
209
|
+
requestHandlers[threadNumber - 1]->getContext()->libev->runLater(boost::bind(
|
210
|
+
disconnectClient, requestHandlers[threadNumber - 1], results.str(1)));
|
211
|
+
|
212
|
+
HeaderTable headers;
|
213
|
+
headers.insert(req->pool, "content-type", "application/json");
|
214
|
+
writeSimpleResponse(client, 200, &headers,
|
215
|
+
"{ \"status\": \"ok\" }");
|
216
|
+
if (!req->ended()) {
|
217
|
+
endRequest(&client, &req);
|
218
|
+
}
|
219
|
+
} else {
|
220
|
+
respondWith405(client, req);
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
158
224
|
static void inspectRequestHandlerState(RequestHandler *rh, Json::Value *json) {
|
159
225
|
*json = rh->inspectStateAsJson();
|
160
226
|
}
|
@@ -396,6 +462,7 @@ private:
|
|
396
462
|
|
397
463
|
HeaderTable headers;
|
398
464
|
string logFile = getLogFile();
|
465
|
+
string fileDescriptorLogFile = getFileDescriptorLogFile();
|
399
466
|
|
400
467
|
headers.insert(req->pool, "content-type", "application/json");
|
401
468
|
Json::Value doc;
|
@@ -405,6 +472,9 @@ private:
|
|
405
472
|
if (!logFile.empty()) {
|
406
473
|
doc["log_file"] = logFile;
|
407
474
|
}
|
475
|
+
if (!fileDescriptorLogFile.empty()) {
|
476
|
+
doc["file_descriptor_log_file"] = fileDescriptorLogFile;
|
477
|
+
}
|
408
478
|
|
409
479
|
writeSimpleResponse(client, 200, &headers,
|
410
480
|
psg_pstrdup(req->pool, doc.toStyledString()));
|
@@ -438,8 +508,24 @@ private:
|
|
438
508
|
setLogLevel(json["log_level"].asInt());
|
439
509
|
}
|
440
510
|
if (json.isMember("log_file")) {
|
441
|
-
|
442
|
-
|
511
|
+
string logFile = json["log_file"].asString();
|
512
|
+
try {
|
513
|
+
logFile = absolutizePath(logFile);
|
514
|
+
} catch (const SystemException &e) {
|
515
|
+
unsigned int bufsize = 1024;
|
516
|
+
char *message = (char *) psg_pnalloc(req->pool, bufsize);
|
517
|
+
snprintf(message, bufsize, "{ \"status\": \"error\", "
|
518
|
+
"\"message\": \"Cannot absolutize log file filename: %s\" }",
|
519
|
+
e.what());
|
520
|
+
writeSimpleResponse(client, 500, &headers, message);
|
521
|
+
if (!req->ended()) {
|
522
|
+
endRequest(&client, &req);
|
523
|
+
}
|
524
|
+
return;
|
525
|
+
}
|
526
|
+
|
527
|
+
int e;
|
528
|
+
if (!setLogFile(logFile, &e)) {
|
443
529
|
unsigned int bufsize = 1024;
|
444
530
|
char *message = (char *) psg_pnalloc(req->pool, bufsize);
|
445
531
|
snprintf(message, bufsize, "{ \"status\": \"error\", "
|
@@ -468,6 +554,7 @@ private:
|
|
468
554
|
if (req->method != HTTP_POST) {
|
469
555
|
respondWith405(client, req);
|
470
556
|
} else if (authorize(client, req, FULL)) {
|
557
|
+
int e;
|
471
558
|
HeaderTable headers;
|
472
559
|
headers.insert(req->pool, "content-type", "application/json");
|
473
560
|
|
@@ -476,25 +563,46 @@ private:
|
|
476
563
|
writeSimpleResponse(client, 500, &headers, "{ \"status\": \"error\", "
|
477
564
|
"\"code\": \"NO_LOG_FILE\", "
|
478
565
|
"\"message\": \"" PROGRAM_NAME " was not configured with a log file.\" }\n");
|
479
|
-
|
480
|
-
|
481
|
-
|
566
|
+
if (!req->ended()) {
|
567
|
+
endRequest(&client, &req);
|
568
|
+
}
|
569
|
+
return;
|
570
|
+
}
|
571
|
+
|
572
|
+
if (!setLogFile(logFile, &e)) {
|
573
|
+
unsigned int bufsize = 1024;
|
574
|
+
char *message = (char *) psg_pnalloc(req->pool, bufsize);
|
575
|
+
snprintf(message, bufsize, "{ \"status\": \"error\", "
|
576
|
+
"\"code\": \"LOG_FILE_OPEN_ERROR\", "
|
577
|
+
"\"message\": \"Cannot reopen log file %s: %s (errno=%d)\" }",
|
578
|
+
logFile.c_str(), strerror(e), e);
|
579
|
+
writeSimpleResponse(client, 500, &headers, message);
|
580
|
+
if (!req->ended()) {
|
581
|
+
endRequest(&client, &req);
|
582
|
+
}
|
583
|
+
return;
|
584
|
+
}
|
585
|
+
P_NOTICE("Log file reopened.");
|
586
|
+
|
587
|
+
if (hasFileDescriptorLogFile()) {
|
588
|
+
if (!setFileDescriptorLogFile(getFileDescriptorLogFile(), &e)) {
|
482
589
|
unsigned int bufsize = 1024;
|
483
590
|
char *message = (char *) psg_pnalloc(req->pool, bufsize);
|
484
591
|
snprintf(message, bufsize, "{ \"status\": \"error\", "
|
485
|
-
"\"code\": \"
|
486
|
-
"\"message\": \"Cannot reopen log file: %s (errno=%d)\" }",
|
487
|
-
strerror(e), e);
|
592
|
+
"\"code\": \"FD_LOG_FILE_OPEN_ERROR\", "
|
593
|
+
"\"message\": \"Cannot reopen file descriptor log file %s: %s (errno=%d)\" }",
|
594
|
+
getFileDescriptorLogFile().c_str(), strerror(e), e);
|
488
595
|
writeSimpleResponse(client, 500, &headers, message);
|
489
596
|
if (!req->ended()) {
|
490
597
|
endRequest(&client, &req);
|
491
598
|
}
|
492
599
|
return;
|
493
600
|
}
|
494
|
-
P_NOTICE("
|
495
|
-
writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
|
601
|
+
P_NOTICE("File descriptor log file reopened.");
|
496
602
|
}
|
497
603
|
|
604
|
+
writeSimpleResponse(client, 200, &headers, "{ \"status\": \"ok\" }\n");
|
605
|
+
|
498
606
|
if (!req->ended()) {
|
499
607
|
endRequest(&client, &req);
|
500
608
|
}
|
@@ -568,6 +676,8 @@ protected:
|
|
568
676
|
try {
|
569
677
|
if (path == P_STATIC_STRING("/server.json")) {
|
570
678
|
processServerStatus(client, req);
|
679
|
+
} else if (regex_match(path, serverConnectionPath)) {
|
680
|
+
processServerConnectionOperation(client, req);
|
571
681
|
} else if (path == P_STATIC_STRING("/pool.xml")) {
|
572
682
|
processPoolStatusXml(client, req);
|
573
683
|
} else if (path == P_STATIC_STRING("/pool.txt")) {
|
@@ -665,6 +775,7 @@ public:
|
|
665
775
|
|
666
776
|
AdminServer(ServerKit::Context *context)
|
667
777
|
: ParentClass(context),
|
778
|
+
serverConnectionPath("^/server/(.+)\\.json$"),
|
668
779
|
exitEvent(NULL)
|
669
780
|
{ }
|
670
781
|
|