summaryrefslogtreecommitdiff
path: root/htetc
diff options
context:
space:
mode:
authorivan <ivan>2002-09-23 14:27:28 +0000
committerivan <ivan>2002-09-23 14:27:28 +0000
commit536d684c3e17375d45a5d62bc5d748fec0224860 (patch)
tree77cf0d1f159f5d4261d4ec06fd40fdda4079f5a2 /htetc
parentf95dffea25ebcdac0b6a4e0355a3c087ea28de0c (diff)
global.asa changes for profiling redirects
header-handling changes necessary for chart .cgis
Diffstat (limited to 'htetc')
-rw-r--r--htetc/global.asa117
-rw-r--r--htetc/handler.pl4
2 files changed, 110 insertions, 11 deletions
diff --git a/htetc/global.asa b/htetc/global.asa
index 3c8380f..4f1ca45 100644
--- a/htetc/global.asa
+++ b/htetc/global.asa
@@ -1,20 +1,26 @@
+#BEGIN { eval "use Devel::AutoProfiler;"; } #only if installed...
+#BEGIN { package Devel::AutoProfiler; use vars qw(%caller_info); }
+use Devel::AutoProfiler;
+
use strict;
use vars qw( $cgi $p );
use CGI;
#use CGI::Carp qw(fatalsToBrowser);
use Date::Format;
use Date::Parse;
+use Time::Local;
use Tie::IxHash;
use HTML::Entities;
use IO::Handle;
use IO::File;
use String::Approx qw(amatch);
+use Chart::LinesPoints;
use HTML::Widgets::SelectLayers 0.02;
use FS::UID qw(cgisuidsetup dbh getotaker datasrc driver_name);
use FS::Record qw(qsearch qsearchs fields dbdef);
use FS::Conf;
use FS::CGI qw(header menubar popurl table itable ntable idiot eidiot
- small_custview myexit);
+ small_custview myexit http_header);
use FS::Msgcat qw(gettext geterror);
use FS::agent;
@@ -68,22 +74,113 @@ sub Script_OnStart {
&cgisuidsetup($cgi);
$p = popurl(2);
#print $cgi->header( '-expires' => 'now' );
+ dbh->{'private_profile'} = {} if dbh->can('sprintProfile');
+
+ #really should check for FS::Profiler or something
+ # Devel::AutoProfiler _our_ VERSION? thanks a fucking lot
+ if ( Devel::AutoProfiler->can('__recursively_fetch_subs_in_package') ) {
+ #should check to see it's my special version. well, switch to FS::Profiler
+
+ #nicked from Devel::AutoProfiler::INIT
+ my %subs = Devel::AutoProfiler::__recursively_fetch_subs_in_package('main');
+
+
+ SUB : while( my ($name, $ref) = each(%subs) )
+ {
+ #next if $name =~ /^(main::)?Apache::/;
+ next unless $name =~ /FS/;
+ foreach my $sub (@Devel::AutoProfiler::do_not_instrument_this_sub)
+ {
+ if ($name =~ /$sub/)
+ {
+ next SUB;
+ }
+ }
+ next if ($Devel::AutoProfiler::do_not_instrument_this_sub{$name});
+ #warn "INIT name is $name \n";
+ Devel::AutoProfiler::__instrument_sub($name, $ref);
+ }
+
+ }
+
}
sub Script_OnFlush {
my $ref = $Response->{BinaryRef};
- $$ref = $cgi->header( @FS::CGI::header ) . $$ref;
+ #$$ref = $cgi->header( @FS::CGI::header ) . $$ref;
+ #$$ref = $cgi->header() . $$ref;
if ( dbh->can('sprintProfile') ) {
-
- $$ref =~ s/<\/BODY>[\s\n]*<\/HTML>[\s\n]*$//i
- or warn "can't remove";
+ if ( lc($Response->{ContentType}) eq 'text/html' ) {
+ $$ref =~ s/<\/BODY>[\s\n]*<\/HTML>[\s\n]*$//i
+ or warn "can't remove";
- #$$ref .= '<PRE>'. ("\n"x96). encode_entities(dbh->sprintProfile()). '</PRE>';
- # wtf? konqueror...
- $$ref .= '<PRE>'. ("\n"x4096). encode_entities(dbh->sprintProfile()). '</PRE>';
+ #$$ref .= '<PRE>'. ("\n"x96). encode_entities(dbh->sprintProfile()). '</PRE>';
+ # wtf? konqueror...
+ $$ref .= '<PRE>'. ("\n"x4096). encode_entities(dbh->sprintProfile()).
+ "\n\n". &sprintAutoProfile(). '</PRE>';
- $$ref .= '</BODY></HTML>';
-
+ $$ref .= '</BODY></HTML>';
+ }
dbh->{'private_profile'} = {};
}
}
+
+if ( defined(@DBIx::Profile::ISA) && DBIx::Profile::db->can('sprintProfile') ) {
+
+ #warn "enabling profiling redirects";
+ *CGI::redirect = sub {
+ my( $self, $location) = @_;
+ my $page =
+ $cgi->header.
+ qq!<HTML><BODY>Redirect to <A HREF="$location">$location</A><BR><BR>!.
+ '<PRE>'. encode_entities(dbh->sprintProfile()).
+ "\n\n". &sprintAutoProfile(). '</PRE>'.
+ '</BODY></HTML>';
+ dbh->{'private_profile'} = {};
+ return $page;
+ };
+
+}
+
+sub by_total_time
+{
+ return $a->{total_time_in_sub} <=> $b->{total_time_in_sub};
+}
+
+sub sprintAutoProfile {
+ my %caller_info = %Devel::AutoProfiler::caller_info;
+ return unless keys %caller_info;
+
+ %Devel::AutoProfiler::caller_info = ();
+
+ my @keys = keys(%caller_info);
+
+ foreach my $key (@keys)
+ {
+ my $href = $caller_info{$key};
+
+ $href->{who_am_i} = $key;
+ }
+
+ my @subs = values(%caller_info);
+
+ #my @sorted = sort by_total_time ( @subs );
+ my @sorted = reverse sort by_total_time ( @subs );
+
+ # print Dumper \@sorted;
+
+ my @readable_info;
+
+ foreach my $sort (@sorted)
+ {
+ push(@readable_info, delete($sort->{who_am_i}));
+ push(@readable_info, $sort);
+ }
+
+ use Data::Dumper;
+ return encode_entities(Dumper(\@readable_info));
+
+}
+
+1;
+
diff --git a/htetc/handler.pl b/htetc/handler.pl
index 49bcbc0..d55ba33 100644
--- a/htetc/handler.pl
+++ b/htetc/handler.pl
@@ -61,17 +61,19 @@ sub handler
#use CGI::Carp qw(fatalsToBrowser);
use Date::Format;
use Date::Parse;
+ use Time::Local;
use Tie::IxHash;
use HTML::Entities;
use IO::Handle;
use IO::File;
use String::Approx qw(amatch);
+ use Chart::LinesPoints;
use HTML::Widgets::SelectLayers 0.02;
use FS::UID qw(cgisuidsetup dbh getotaker datasrc driver_name);
use FS::Record qw(qsearch qsearchs fields dbdef);
use FS::Conf;
use FS::CGI qw(header menubar popurl table itable ntable idiot eidiot
- small_custview myexit);
+ small_custview myexit http_header);
use FS::Msgcat qw(gettext geterror);
use FS::agent;