Changeset 2337

Show
Ignore:
Timestamp:
05/14/08 23:35:55 (21 months ago)
Author:
bchoate
Message:

Cleanup for TheSchwartz logging. Added support for 'leak' switch to help trace object leaks.

Location:
branches/release-38
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • branches/release-38/lib/MT/TheSchwartz.pm

    r2336 r2337  
    3030    my $class = shift; 
    3131    $class->instance->SUPER::insert(@_); 
     32} 
     33 
     34sub default_logger { 
     35    my ($msg, $job) = @_; 
     36    # suppress TheSchwartz::Job's 'job completed' 
     37    return if $msg eq 'job completed'; 
     38 
     39    $msg =~ s/\s+$//; 
     40    print STDERR "$msg\n"; 
    3241} 
    3342 
     
    4150    # Reports object usage inbetween jobs if Devel::Leak::Object is loaded 
    4251    $OBJECT_REPORT = 1 if $Devel::Leak::Object::VERSION; 
     52 
     53    $param{verbose} = \&default_logger 
     54        if $param{verbose} && (ref $param{verbose} ne 'CODE'); 
    4355 
    4456    my $client = $class->SUPER::new(%param); 
     
    134146    my $did_work = 0; 
    135147 
     148    # holds state of objects at start 
     149    my %obj_start; 
    136150    if ($OBJECT_REPORT) { 
    137         Devel::Leak::Object::status(); 
    138         print "\n\n"; 
     151        %obj_start = %Devel::Leak::Object::OBJECT_COUNT; 
    139152    } 
    140153 
    141154    while (1) { 
     155        my %obj_pre; 
     156        if ($OBJECT_REPORT) { 
     157            %obj_pre = %Devel::Leak::Object::OBJECT_COUNT; 
     158        } 
     159 
    142160        if ($client->work_once) { 
    143161            $did_work = 1; 
     
    157175            $did_work = 0; 
    158176            if ($OBJECT_REPORT) { 
    159                 Devel::Leak::Object::status(); 
    160                 print "\n\n"; 
     177                leak_report(\%obj_start, \%obj_pre, \%Devel::Leak::Object::OBJECT_COUNT); 
    161178            } 
    162179        } 
    163180 
    164181        sleep $delay; 
     182    } 
     183} 
     184 
     185our %persistent; 
     186BEGIN { 
     187    %persistent = map { $_ => 1 } qw( MT::Task MT::Plugin MT::Component MT::ArchiveType MT::TaskMgr MT::WeblogPublisher MT::Serializer TheSchwartz::Job TheSchwartz::JobHandle ); 
     188} 
     189sub leak_report { 
     190    my ($start, $pre, $post) = @_; 
     191    my $reported; 
     192    foreach my $class (sort keys %$post) { 
     193        # skip reporting classes that are persistent in nature 
     194        next if exists $persistent{$class}; 
     195 
     196        my $post_count = $post->{$class}; 
     197        next if ! $post_count; 
     198        my $pre_count = $pre->{$class} || 0; 
     199        my $start_count = $start->{$class} || 0; 
     200        next if $post_count == 1;  # ignores most singletons 
     201        if (($pre_count != $post_count) || ($post_count != $start_count)) { 
     202            print "Leak report (class, total, delta from last job(s), delta since process start):\n" unless $reported; 
     203            printf "%-40s %-10d %-10d %-10d\n", $class, $post_count, $post_count - $pre_count, $post_count - $start_count; 
     204            $reported = 1; 
     205        } 
    165206    } 
    166207} 
  • branches/release-38/lib/MT/Worker/Publish.pm

    r2332 r2337  
    5959 
    6060        my $priority = $job->priority ? ", priority " . $job->priority : ""; 
    61         $job->debug("MT::Worker::Publish publishing " . $fi->file_path . "$priority"); 
    6261 
    6362        # Important: prevents requeuing! 
     
    8281        } 
    8382 
    84         ## MT::TheSchwartz->debug("Publishing: " . RebuildQueue::Daemon::_summary($fi)); 
    85         MT::TheSchwartz->debug("Publishing file " . $fi->file_path . "..."); 
     83        $job->debug("Publishing " . $fi->file_path . $priority); 
     84 
    8685        my $res = $mt->publisher->rebuild_from_fileinfo($fi); 
    8786        if (defined $res) { 
     
    9695                $job->completed(); 
    9796            } 
    98             # This is way too noisy and clutters the activity log 
    99             # for active sites. 
    100             # $mt->log({ 
    101             #     ($fi->blog_id ? ( blog_id => $fi->blog_id ) : () ), 
    102             #     message => $mt->translate('Background Publishing Done'), 
    103             #     metadata => log_time() . ' ' 
    104             #         . $mt->translate('Published: [_1]', $fi->file_path), 
    105             #     category => "publish", 
    106             #     level => MT::Log::INFO(), 
    107             # }); 
    10897            $rebuilt++; 
    10998        } else { 
  • branches/release-38/tools/run-periodic-tasks

    r2272 r2337  
    1 #!/usr/bin/perl -w 
     1#!/opt/local/bin/perl -w 
    22 
    33# Movable Type (r) Open Source (C) 2001-2008 Six Apart, Ltd. 
     
    1010 
    1111use lib 'lib', '../lib'; 
    12 use MT::Bootstrap; 
    13 use MT; 
     12 
     13my $daemonize = 0; 
     14my $sleep     = 5; 
     15my $help      = 0; 
     16my $load      = 10; 
     17my $verbose   = 0; 
     18my $scoreboard; 
     19my $randomize_jobs = 0; 
     20my $trace_objects = 0; 
     21 
     22require Getopt::Long; 
     23Getopt::Long::GetOptions( 
     24    "daemon"       => \$daemonize, 
     25    "sleep=i"      => \$sleep, 
     26    "load=i"       => \$load, 
     27    "scoreboard=s" => \$scoreboard, 
     28    "randomly"     => \$randomize_jobs, 
     29    "verbose"      => \$verbose, 
     30    "leak"         => \$trace_objects, 
     31); 
     32 
     33if ( $trace_objects ) { 
     34    require Devel::Leak::Object; 
     35    Devel::Leak::Object->import( qw{ GLOBAL_bless } ); 
     36} 
     37 
     38my %cfg; 
     39$cfg{verbose} = $verbose; 
     40$cfg{scoreboard} = $scoreboard; 
     41$cfg{prioritize} = 1; 
     42$cfg{randomize} = $randomize_jobs; 
     43 
     44require MT::Bootstrap; 
     45require MT; 
    1446 
    1547my $mt = MT->new() or die MT->errstr; 
     
    2153$mt->{plugin_template_path} = 'tmpl'; 
    2254$mt->run_callbacks('init_app', $mt); 
    23  
    24 require Getopt::Long; 
    25 my $daemonize = 0; 
    26 my $sleep     = 5; 
    27 my $help      = 0; 
    28 my $load      = 10; 
    29 my $verbose   = 0; 
    30 my $scoreboard; 
    31 my $randomize_jobs = 0; 
    32  
    33 Getopt::Long::GetOptions( 
    34     "daemon"       => \$daemonize, 
    35     "sleep=i"      => \$sleep, 
    36     "load=i"       => \$load, 
    37     "scoreboard=s" => \$scoreboard, 
    38     "randomly"     => \$randomize_jobs, 
    39     "verbose"      => \$verbose, 
    40 ); 
    41  
    42 my %cfg; 
    43 $cfg{verbose} = $verbose; 
    44 $cfg{scoreboard} = $scoreboard; 
    45 $cfg{prioritize} = 1; 
    46 $cfg{randomize} = $randomize_jobs; 
    4755 
    4856my $client = eval {