From 89948f3b588e8b200b52fc9417ca5d1f1585b5a8 Mon Sep 17 00:00:00 2001 From: dakkar Date: Wed, 30 Jun 2010 19:55:02 +0100 Subject: reporting script --- script/tfl_to_html | 120 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 120 insertions(+) create mode 100644 script/tfl_to_html diff --git a/script/tfl_to_html b/script/tfl_to_html new file mode 100644 index 0000000..daf097e --- /dev/null +++ b/script/tfl_to_html @@ -0,0 +1,120 @@ +#!/usr/bin/env perl +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}; +} -- cgit v1.2.3