summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDylan William Hardison <dylan@hardison.net>2018-02-16 02:49:33 +0100
committerGitHub <noreply@github.com>2018-02-16 02:49:33 +0100
commitc345cbc05311d8ecc51752c59b102d0323bcfb6c (patch)
tree417969289899fa6f561a1db3af0398639a4441b7
parentdacda12b6d8ab2802eaa562dd1267e3799673166 (diff)
downloadbugzilla-c345cbc05311d8ecc51752c59b102d0323bcfb6c.tar.gz
bugzilla-c345cbc05311d8ecc51752c59b102d0323bcfb6c.tar.xz
no bug - add USE_NYTPROF to PerlPassEnv (#395)
-rw-r--r--Bugzilla/Install/Filesystem.pm17
-rw-r--r--README.rst12
-rw-r--r--mod_perl.pl11
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';
</html>
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();