summaryrefslogtreecommitdiff
path: root/script/tfl_to_html
blob: daf097e1fac2b3fb48349e3833303dc6b6aba3d0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
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};
}