Update to current Perl
This commit is contained in:
parent
ebd46d86d4
commit
3cc88f8150
57 changed files with 11638 additions and 665 deletions
195
lib/WGDev/Command/Optimize.pm
Normal file
195
lib/WGDev/Command/Optimize.pm
Normal file
|
|
@ -0,0 +1,195 @@
|
|||
package WGDev::Command::Optimize;
|
||||
# ABSTRACT: Scans your site and suggests various optimizations
|
||||
use strict;
|
||||
use warnings;
|
||||
use 5.008008;
|
||||
|
||||
use parent qw(WGDev::Command::Base::Verbosity);
|
||||
|
||||
sub config_options {
|
||||
return qw(
|
||||
assets
|
||||
macros
|
||||
db
|
||||
);
|
||||
}
|
||||
|
||||
sub process {
|
||||
my $self = shift;
|
||||
my $wgd = $self->wgd;
|
||||
|
||||
if ( $self->option('assets') ) {
|
||||
$self->optimise_assets();
|
||||
}
|
||||
|
||||
if ( $self->option('macros') ) {
|
||||
$self->optimise_macros();
|
||||
}
|
||||
|
||||
if ( $self->option('db') ) {
|
||||
$self->optimise_db();
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub optimise_assets {
|
||||
my $self = shift;
|
||||
my $wgd = $self->wgd;
|
||||
my $session = $wgd->session();
|
||||
|
||||
my @assets;
|
||||
for my $asset ( sort keys %{ $session->config->get('assets') } ) {
|
||||
if (
|
||||
!$session->db->quickScalar(
|
||||
'select count(*) from asset where className = ?', [$asset] ) )
|
||||
{
|
||||
push @assets, $asset;
|
||||
}
|
||||
}
|
||||
|
||||
if (@assets) {
|
||||
$self->report(
|
||||
"The following Assets do not appear in your Asset table:\n");
|
||||
for my $asset (@assets) {
|
||||
$self->report("\t$asset\n");
|
||||
}
|
||||
my $config = $wgd->config_file();
|
||||
my $message = <<"END_MESSAGE";
|
||||
If you are sure any of these Assets are not being used on your site,
|
||||
you can reduce memory usage by removing them from the "assets" section of
|
||||
your site config file, which is located at:
|
||||
\t$config
|
||||
|
||||
Keep in mind:
|
||||
*) Some assets such as FilePile will not appear in your Assets table but
|
||||
are still used to provide funcitonality (in the case of FilePile
|
||||
providing a way for users to upload multiple Files).
|
||||
END_MESSAGE
|
||||
$self->report("$message");
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
sub optimise_macros {
|
||||
my $self = shift;
|
||||
my $wgd = $self->wgd;
|
||||
my $session = $wgd->session();
|
||||
|
||||
my @macros;
|
||||
for my $macro ( sort keys %{ $session->config->get('macros') } ) {
|
||||
if (
|
||||
!$session->db->quickScalar(
|
||||
'select count(*) from template where template like ? or template like ?',
|
||||
[ "%^$macro;%", "%^$macro(%" ] ) )
|
||||
{
|
||||
push @macros, $macro;
|
||||
}
|
||||
}
|
||||
|
||||
if (@macros) {
|
||||
my $macros = join q{}, map {"\t$_\n"} @macros;
|
||||
my $config = $wgd->config_file();
|
||||
my $message = <<"END_MESSAGE";
|
||||
The following Macros do not appear in the template field of the template table:
|
||||
$macros
|
||||
|
||||
If you are sure any of these Macros are not being used on your site,
|
||||
you can reduce memory usage by removing them from the "macros" section of
|
||||
your site config file, which is located at:
|
||||
\t$config
|
||||
|
||||
Keep in mind:
|
||||
*) Macros can be references from lots of places other then just Templates,
|
||||
for example the mailFooter setting in the Settings table
|
||||
END_MESSAGE
|
||||
$self->report($message);
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
use constant OPTIMIZE_TABLES_LIMIT => 10;
|
||||
|
||||
sub optimise_db {
|
||||
my $self = shift;
|
||||
my $wgd = $self->wgd;
|
||||
my $session = $wgd->session();
|
||||
|
||||
my $sth = $session->db->read('show table status');
|
||||
|
||||
my @tables;
|
||||
while ( my $r = $sth->hashRef ) {
|
||||
push @tables, [ $r->{Name}, $r->{Data_length}, $r->{Rows} ];
|
||||
}
|
||||
|
||||
$self->report("Top 10 Tables, sorted by Data_length\n");
|
||||
my $ctr;
|
||||
for my $table ( sort { $b->[1] <=> $a->[1] } @tables ) {
|
||||
## no critic (ProhibitParensWithBuiltins)
|
||||
$self->report( sprintf( "%10d\t%s\n", $table->[1], $table->[0] ) );
|
||||
last
|
||||
if ++$ctr == OPTIMIZE_TABLES_LIMIT;
|
||||
}
|
||||
$self->report("\n");
|
||||
|
||||
$self->report("Top 10 Tables, sorted by Rows\n");
|
||||
$ctr = 0;
|
||||
for my $table ( sort { $b->[2] <=> $a->[2] } @tables ) {
|
||||
## no critic (ProhibitParensWithBuiltins)
|
||||
$self->report( sprintf( "%10d\t%s\n", $table->[2], $table->[0] ) );
|
||||
last
|
||||
if ++$ctr == OPTIMIZE_TABLES_LIMIT;
|
||||
}
|
||||
$self->report("\n");
|
||||
|
||||
$self->report(<<'END_ADVICE');
|
||||
To reduce row count, you may want to investigate deleting old/unused data.
|
||||
To reduce row size, apart from deleting rows, you might want to investigate mysql's "optimize table" command.
|
||||
END_ADVICE
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
1;
|
||||
|
||||
=head1 SYNOPSIS
|
||||
|
||||
wgd optimize [--assets] [--macros]
|
||||
|
||||
=head1 DESCRIPTION
|
||||
|
||||
Scans your site and suggests various optimizations
|
||||
|
||||
=head1 OPTIONS
|
||||
|
||||
=over 8
|
||||
|
||||
=item C<--assets>
|
||||
|
||||
Suggests Assets that you might be able to disable to reduce memory consumption
|
||||
|
||||
=item C<--macros>
|
||||
|
||||
Suggests Macros that you might be able to disable to reduce memory consumption
|
||||
|
||||
=item C<--db>
|
||||
|
||||
Suggests database tables that may be able to be adjusted to increase speed.
|
||||
|
||||
=back
|
||||
|
||||
=method C<optimise_assets>
|
||||
|
||||
Suggests Assets that you might be able to disable to reduce memory consumption
|
||||
|
||||
=method C<optimise_macros>
|
||||
|
||||
Suggests Macros that you might be able to disable to reduce memory consumption
|
||||
|
||||
=method C<optimise_db>
|
||||
|
||||
Suggests database tables that may be able to be adjusted to increase speed.
|
||||
|
||||
=cut
|
||||
|
||||
Loading…
Add table
Add a link
Reference in a new issue