-
Notifications
You must be signed in to change notification settings - Fork 21
/
Feed.pm
60 lines (52 loc) · 1.69 KB
/
Feed.pm
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
package TownCrier::Handler::Feed;
use TownCrier::Data;
use Dancer ':syntax';
use Dancer::Plugin::Feed;
use DateTime::Format::ISO8601;
sub index {
my $db = var 'db';
my @events = splice @{$db->match(
class => "TownCrier::Data::Event",
{ sort => sub { my ($a, $b) = @_; $b->ordered_compare($a) } }
) }, 0, 10;
create_feed(
format => "RSS",
title => "FastMail Status",
link => request->uri_base . request->path,
entries => [ map {
my $dt = DateTime::Format::ISO8601->parse_datetime($_->timestamp);
{
title => $_->service->name . " - " . $_->status->name,
issued => $dt,
modified => $dt,
content => $_->message,
id => $_->id,
}
} @events ],
);
}
sub service {
my $db = var 'db';
my $service = $db->match(class => "TownCrier::Data::Service", id => params->{service})->[0];
return status 'not_found' unless $service;
my @events = splice @{$db->match(
class => "TownCrier::Data::Event", service => $service->id,
{ sort => sub { my ($a, $b) = @_; $b->ordered_compare($a) } }
) }, 0, 10;
create_feed(
format => "RSS",
title => "FastMail Status - ".$service->name,
link => request->uri_base . request->path,
entries => [ map {
my $dt = DateTime::Format::ISO8601->parse_datetime($_->timestamp);
{
title => $_->service->name . " - " . $_->status->name,
issued => $dt,
modified => $dt,
content => $_->message,
id => $_->id,
}
} @events ],
);
}
1;