From c345cbc05311d8ecc51752c59b102d0323bcfb6c Mon Sep 17 00:00:00 2001 From: Dylan William Hardison Date: Thu, 15 Feb 2018 20:49:33 -0500 Subject: no bug - add USE_NYTPROF to PerlPassEnv (#395) --- Bugzilla/Install/Filesystem.pm | 17 ++++++++++------- README.rst | 12 ++++++++++++ mod_perl.pl | 11 ++++++++++- 3 files changed, 32 insertions(+), 8 deletions(-) diff --git a/Bugzilla/Install/Filesystem.pm b/Bugzilla/Install/Filesystem.pm index 89a1e5d93..e1e9a47d7 100644 --- a/Bugzilla/Install/Filesystem.pm +++ b/Bugzilla/Install/Filesystem.pm @@ -102,13 +102,16 @@ use constant INDEX_HTML => <<'EOT'; EOT -sub HTTPD_ENV_CONF { +use constant HTTPD_ENV => qw( + LOCALCONFIG_ENV + BUGZILLA_UNSAFE_AUTH_DELEGATION + USE_NYTPROF + NYTPROF_DIR +); - return join( "\n", - "PerlPassEnv LOCALCONFIG_ENV", - "PerlPassEnv BUGZILLA_UNSAFE_AUTH_DELEGATION", - map { "PerlPassEnv " . $_ } ENV_KEYS - ) . "\n"; +sub HTTPD_ENV_CONF { + my @env = (ENV_KEYS, HTTPD_ENV); + return join( "\n", map { "PerlPassEnv " . $_ } @env ) . "\n"; } ############### @@ -304,7 +307,7 @@ sub FILESYSTEM { js => { files => WS_SERVE, dirs => DIR_WS_SERVE }, static => { files => WS_SERVE, - dirs => DIR_WS_SERVE }, + dirs => DIR_WS_SERVE }, $skinsdir => { files => WS_SERVE, dirs => DIR_WS_SERVE }, 'docs/*/html' => { files => WS_SERVE, diff --git a/README.rst b/README.rst index 6c150dba4..555d5f951 100644 --- a/README.rst +++ b/README.rst @@ -282,6 +282,18 @@ HTTPD_MaxRequestsPerChild will die. If MaxRequestsPerChild is 0, then the process will never expire. Default: 4000 +USE_NYTPROF + Write `Devel::NYTProf`_ profiles out for each requests. + These will be named /app/data/nytprof.$host.$script.$n.$pid, where $host is + the hostname of the container, script is the name of the script (without + extension), $n is a number starting from 1 and incrementing for each + request to the worker process, and $pid is the worker process id. + +NYTPROF_DIR + Alternative location to store profiles from the above option. + +.. _`Devel::NYTProf`: https://metacpan.org/pod/Devel::NYTProf + Persistent Data Volume ---------------------- diff --git a/mod_perl.pl b/mod_perl.pl index f94b7f7d4..09fd80850 100644 --- a/mod_perl.pl +++ b/mod_perl.pl @@ -23,8 +23,14 @@ BEGIN { } use Bugzilla::ModPerl::StartupFix; +use Taint::Util qw(untaint); use constant USE_NYTPROF => !! $ENV{USE_NYTPROF}; +use constant NYTPROF_DIR => do { + my $dir = $ENV{NYTPROF_DIR}; + untaint($dir); + $dir; +}; BEGIN { if (USE_NYTPROF) { $ENV{NYTPROF} = "savesrc=0:start=no:addpid=1"; @@ -132,6 +138,7 @@ use base qw(ModPerl::Registry); use Bugzilla; use Bugzilla::Constants qw(USAGE_MODE_REST bz_locations); use Time::HiRes; +use Sys::Hostname; sub handler : method { my $class = shift; @@ -150,9 +157,11 @@ sub handler : method { if (Bugzilla::ModPerl::USE_NYTPROF) { state $count = {}; + state $dir = Bugzilla::ModPerl::NYTPROF_DIR // bz_locations()->{datadir}; + state $host = (split(/\./, hostname()))[0]; my $script = File::Basename::basename($ENV{SCRIPT_FILENAME}); $script =~ s/\.cgi$//; - my $file = bz_locations()->{datadir} . "/nytprof.$script." . ++$count->{$$}; + my $file = $dir . "/nytprof.$host.$script." . ++$count->{$$}; DB::enable_profile($file); } Bugzilla::init_page(); -- cgit v1.2.3-24-g4f1b