root/branches/release-30/lib/MT/Util/PerformanceData.pm @ 1412

Revision 1412, 2.3 kB (checked in by auno, 21 months ago)

Initial commit for performance logging data viewer. BugzID:69003

Line 
1package MT::Util::PerformanceData;
2
3use strict;
4use File::Spec;
5use IO::File;
6
7sub new {
8    my $class = shift;
9    my $self = bless {}, $class;
10    $self->init(@_);
11    $self;
12}
13
14sub init {
15    my $self  = shift;
16    my %param = @_;
17    my $file  = File::Spec->catfile( $param{path}, $param{file} );
18    $self->{fh}           = IO::File->new( $file, "r" );
19    $self->{system_info}  = {};
20    $self->{request_data} = [];
21    $self->readfile;
22    undef $self->{fh};
23}
24
25sub readfile {
26    my $self = shift;
27    my $fh   = $self->{fh};
28    my @data;
29    while ( my $line = $fh->getline ) {
30        chomp $line;
31        if ( $line =~ /^#/ ) {
32            $line =~ s/^# //;
33            $self->_system_info($line);
34        }
35        else {
36            push @data, $self->_request_data($line);
37        }
38    }
39    $self->{request_data} = \@data;
40}
41
42sub _system_info {
43    my ( $self, $line ) = @_;
44    $line =~ m/^(.[^:]+): (.+)$/;
45    my ( $key, $value ) = ( $1, $2 );
46    $self->{system_info}->{$key} = $value;
47}
48
49sub _request_data {
50    my ( $self, $line ) = @_;
51    $line =~ m/^(.+): (.+)$/;
52    my ( $info, $data ) = ( $1, $2 );
53    my @fields = split q{, }, $data;
54    $info =~ m/\[(.+)\]\s*(.[^ ]+)\s*pt-times/;
55    my ( $date, $hostname ) = ( $1, $2 );
56    my %request_data = (
57        date     => $date,
58        hostname => $hostname,
59    );
60    my @mt_process;
61
62    foreach my $field (@fields) {
63        $field =~ m/(.[^=]+)=(.+)/;
64        my $key   = $1;
65        my $value = $2;
66        $value =~ s/\[(.+)\]/$1/;
67        if ( $key =~ m/^MT/ or $key =~ m/^total:rebuild/ ) {
68            push @mt_process, { $key => $value };
69        }
70        else {
71            $request_data{ lc $key } = $value;
72        }
73    }
74    $request_data{mt_process} = \@mt_process;
75    \%request_data;
76}
77
78sub report {
79    my $self         = shift;
80    my %param        = @_;
81    my $sys_info     = $self->{system_info};
82    my $request_data = $self->_sort_data( $self->{request_data}, $param{sort} );
83
84    # temporary data dump
85    use Data::Dumper;
86    print Dumper($sys_info);
87    print Dumper($request_data);
88}
89
90sub _sort_data {
91    my $self = shift;
92    my ( $data, $sort_key ) = @_;
93    return $data if !$sort_key;
94    my @sorted =
95      map  { $_->[0] }
96      sort { $b->[1] <=> $a->[1] }               # sort data in descending order
97      map  { [ $_, $_->{$sort_key} ] } @$data;
98    \@sorted;
99}
100
1011;
Note: See TracBrowser for help on using the browser.