use strict;
use warnings;
use TFLMonitor::Schema;
use Path::Class;
my $libdir=file(__FILE__)->parent;
my $dbfile=$libdir->parent->file('monitor.db');
my $schema=TFLMonitor::Schema->connect(
"dbi:SQLite:dbname=$dbfile",
'','',
{
AutoCommit => 1,
});
my $total_count=$schema->resultset('TFLMonitor::Schema::LineStatus')
->count;
my $overall_rs=$schema->resultset('TFLMonitor::Schema::LineStatus')
->search(undef,{
'+select' => [
{ count => '*' },
],
'+as' => ['count'],
prefetch => [
'status_code',
],
group_by => [
'status_code.code',
],
order_by => {
-asc => [ 'status_code.class','status_code.code' ],
},
});
my %tot_per_class;my $last_class;
while (my $ls=$overall_rs->next) {
if ($last_class && $last_class ne $ls->status_code->class) {
printf "%15s(%15s) %5.3f%%\n",
'',
$last_class,
100*$tot_per_class{$last_class}/$total_count;
}
printf "%-15s(%15s) %5.3f%%\n",
$ls->status_code->description,
$ls->status_code->class,
100*$ls->get_column('count')/$total_count;
$last_class=$ls->status_code->class;
$tot_per_class{$last_class}+=$ls->get_column('count');
}
if ($last_class) {
printf "%15s(%15s) %5.3f%%\n",
'',
$last_class,
100*$tot_per_class{$last_class}/$total_count;
}
print "\n";
my $count_per_line_rs=$schema->resultset('TFLMonitor::Schema::LineStatus')
->search(undef,{
'+select' => [
{ count => '*' },
],
'+as' => [ 'count' ],
prefetch => [
'line_id',
],
group_by => [ 'line_id' ],
});
my %count_per_line=map { $_->line_id->name => $_->get_column('count') } $count_per_line_rs->all;
my $per_line_rs=$schema->resultset('TFLMonitor::Schema::LineStatus')
->search(undef,{
'+select' => [
{ count => '*' },
],
'+as' => ['count'],
prefetch => [
'line_id','status_code',
],
group_by => [
'line_id','status_code.code',
],
order_by => {
-asc => [ 'line_id','status_code.class','status_code.code' ],
},
});
%tot_per_class=();my $last_line;$last_class=undef;
while (my $ls=$per_line_rs->next) {
if ($last_class && $last_class ne $ls->status_code->class) {
printf "%-20s %15s(%15s) %5.3f%%\n",
$last_line,
'',
$last_class,
100*$tot_per_class{$last_class}/$count_per_line{$last_line}
}
if ($last_line && $last_line ne $ls->line_id->name) {
%tot_per_class=();
print "\n";
}
printf "%-20s %-15s(%15s) %5.3f%%\n",
$ls->line_id->name,
$ls->status_code->description,
$ls->status_code->class,
100*$ls->get_column('count')/$count_per_line{$ls->line_id->name};
$last_class=$ls->status_code->class;
$tot_per_class{$last_class}+=$ls->get_column('count');
$last_line=$ls->line_id->name;
}
if ($last_class) {
printf "%-20s %15s(%15s) %5.3f%%\n",
$last_line,
'',
$last_class,
100*$tot_per_class{$last_class}/$count_per_line{$last_line};
}
__END__