root/lang/perl/Ulgori/trunk/lib/Ulgori/Model/Log.pm @ 13525

Revision 13525, 2.2 kB (checked in by tokuhirom, 7 years ago)

entries_per_page is controller things.

Line 
1package Ulgori::Model::Log;
2use Moose;
3use MooseX::Method;
4use Ulgori::Config;
5use MooseX::Params::Validate;
6use Template;
7use Encode;
8use Data::Page;
9use Ulgori::Util;
10
11has path => (
12    is       => 'ro',
13    isa      => 'Str',
14    required => 1,
15);
16
17has encoding => (
18    is       => 'ro',
19    isa      => 'Str',
20    required => 1,
21);
22
23method retrieve_all => named(
24    keyword => { isa => 'Str | Undef', required => 1, },
25    date    => { isa => 'DateTime',    required => 1 },
26    page    => { isa => 'Int',         default  => 1 },
27  ) => sub {
28    my ( $self, $args ) = @_;
29
30    my $log_fname = $self->_log_fname( date => $args->{date} );
31    if ( -f $log_fname ) {
32        return $self->_read_logs(
33            fname   => $log_fname,
34            keyword => $args->{keyword},
35            page    => $args->{page},
36        );
37    }
38    else {
39        return {
40            pager => Data::Page->new(),
41            rows  => [ "log file does not exists: " . $args->{date}->ymd ]
42        };
43    }
44  };
45
46method _read_logs => named(
47    fname            => { is => 'Str', required => 1 },
48    keyword          => { is => 'Str' },
49    page             => { is => 'Int', required => 1 },
50    entries_per_page => { is => 'Int', default  => 20 },
51) => sub {
52    my ( $self, $args ) = @_;
53
54    my $entries_per_page = $args->{entries_per_page};
55    my $encoding         = $self->encoding;
56
57    open my $fh, '<', $args->{fname} or die "$! $args->{fname}";
58    my @lines = reverse map { decode $encoding, $_ } <$fh>;
59    if ( defined $args->{keyword} ) {
60        @lines = grep { $_ =~ $args->{keyword} } @lines;
61    }
62    close $fh;
63
64    my $pager = Data::Page->new( scalar(@lines), $entries_per_page, $args->{page} );
65    return {
66        pager => $pager,
67        rows  => [
68            @lines[
69              $entries_per_page *
70              ( $args->{page} - 1 ) .. $entries_per_page *
71              $args->{page}
72            ]
73        ]
74    };
75};
76
77method '_log_fname' => named( date => { isa => 'DateTime', required => 1 }, ) =>
78  sub {
79    my ( $self, $params ) = @_;
80
81    my $tt = Template->new;
82    $tt->process( \( $self->path ), $params, \my $fname ) or die $tt->error;
83    $fname;
84  };
85
86no Moose;
87__PACKAGE__->meta->make_immutable;
881;
Note: See TracBrowser for help on using the browser.