aggregate: Write timestamp next aggregation can happen to .ikiwiki/aggregatetime, to allow for more sophisticated cron jobs.
parent
7e3fb8b8a2
commit
2dd0c177a6
|
@ -298,7 +298,7 @@ sub loadstate () {
|
||||||
return if $state_loaded;
|
return if $state_loaded;
|
||||||
$state_loaded=1;
|
$state_loaded=1;
|
||||||
if (-e "$config{wikistatedir}/aggregate") {
|
if (-e "$config{wikistatedir}/aggregate") {
|
||||||
open(IN, "$config{wikistatedir}/aggregate") ||
|
open(IN, "<", "$config{wikistatedir}/aggregate") ||
|
||||||
die "$config{wikistatedir}/aggregate: $!";
|
die "$config{wikistatedir}/aggregate: $!";
|
||||||
while (<IN>) {
|
while (<IN>) {
|
||||||
$_=IkiWiki::possibly_foolish_untaint($_);
|
$_=IkiWiki::possibly_foolish_untaint($_);
|
||||||
|
@ -335,7 +335,7 @@ sub savestate () {
|
||||||
garbage_collect();
|
garbage_collect();
|
||||||
my $newfile="$config{wikistatedir}/aggregate.new";
|
my $newfile="$config{wikistatedir}/aggregate.new";
|
||||||
my $cleanup = sub { unlink($newfile) };
|
my $cleanup = sub { unlink($newfile) };
|
||||||
open (OUT, ">$newfile") || error("open $newfile: $!", $cleanup);
|
open (OUT, ">", $newfile) || error("open $newfile: $!", $cleanup);
|
||||||
foreach my $data (values %feeds, values %guids) {
|
foreach my $data (values %feeds, values %guids) {
|
||||||
my @line;
|
my @line;
|
||||||
foreach my $field (keys %$data) {
|
foreach my $field (keys %$data) {
|
||||||
|
@ -356,6 +356,20 @@ sub savestate () {
|
||||||
close OUT || error("save $newfile: $!", $cleanup);
|
close OUT || error("save $newfile: $!", $cleanup);
|
||||||
rename($newfile, "$config{wikistatedir}/aggregate") ||
|
rename($newfile, "$config{wikistatedir}/aggregate") ||
|
||||||
error("rename $newfile: $!", $cleanup);
|
error("rename $newfile: $!", $cleanup);
|
||||||
|
|
||||||
|
my $timestamp=undef;
|
||||||
|
foreach my $feed (keys %feeds) {
|
||||||
|
my $t=$feeds{$feed}->{lastupdate}+$feeds{$feed}->{updateinterval};
|
||||||
|
if (! defined $timestamp || $timestamp > $t) {
|
||||||
|
$timestamp=$t;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$newfile=~s/\.new$/time/;
|
||||||
|
open (OUT, ">", $newfile) || error("open $newfile: $!", $cleanup);
|
||||||
|
if (defined $timestamp) {
|
||||||
|
print OUT $timestamp."\n";
|
||||||
|
}
|
||||||
|
close OUT || error("save $newfile: $!", $cleanup);
|
||||||
}
|
}
|
||||||
|
|
||||||
sub garbage_collect () {
|
sub garbage_collect () {
|
||||||
|
|
|
@ -3,6 +3,8 @@ ikiwiki (3.20100705) UNRELEASED; urgency=low
|
||||||
* img: Add a margin around images displayed by this directive.
|
* img: Add a margin around images displayed by this directive.
|
||||||
* comments: Added commentmoderation directive for easy linking to the
|
* comments: Added commentmoderation directive for easy linking to the
|
||||||
comment moderation queue.
|
comment moderation queue.
|
||||||
|
* aggregate: Write timestamp next aggregation can happen to
|
||||||
|
.ikiwiki/aggregatetime, to allow for more sophisticated cron jobs.
|
||||||
|
|
||||||
-- Joey Hess <joeyh@debian.org> Mon, 05 Jul 2010 13:59:42 -0400
|
-- Joey Hess <joeyh@debian.org> Mon, 05 Jul 2010 13:59:42 -0400
|
||||||
|
|
||||||
|
|
|
@ -5,9 +5,13 @@ This plugin allows content from other feeds to be aggregated into the
|
||||||
wiki. To specify feeds to aggregate, use the
|
wiki. To specify feeds to aggregate, use the
|
||||||
[[ikiwiki/directive/aggregate]] [[ikiwiki/directive]].
|
[[ikiwiki/directive/aggregate]] [[ikiwiki/directive]].
|
||||||
|
|
||||||
The [[meta]] and [[tag]] plugins are also recommended. Either the
|
## requirements
|
||||||
[[htmltidy]] or [[htmlbalance]] plugin is suggested, since feeds can easily
|
|
||||||
contain html problems, some of which these plugins can fix.
|
The [[meta]] and [[tag]] plugins are also recommended to be used with this
|
||||||
|
one. Either the [[htmltidy]] or [[htmlbalance]] plugin is suggested, since
|
||||||
|
feeds can easily contain html problems, some of which these plugins can fix.
|
||||||
|
|
||||||
|
## triggering aggregation
|
||||||
|
|
||||||
You will need to run ikiwiki periodically from a cron job, passing it the
|
You will need to run ikiwiki periodically from a cron job, passing it the
|
||||||
--aggregate parameter, to make it check for new posts. Here's an example
|
--aggregate parameter, to make it check for new posts. Here's an example
|
||||||
|
@ -15,6 +19,11 @@ crontab entry:
|
||||||
|
|
||||||
*/15 * * * * ikiwiki --setup my.wiki --aggregate --refresh
|
*/15 * * * * ikiwiki --setup my.wiki --aggregate --refresh
|
||||||
|
|
||||||
|
The plugin updates a file `.ikiwiki/aggregatetime` with the unix time stamp
|
||||||
|
when the next aggregation run could occur. (The file may be empty, if no
|
||||||
|
aggregation is required.) This can be integrated into more complex cron
|
||||||
|
jobs or systems to trigger aggregation only when needed.
|
||||||
|
|
||||||
Alternatively, you can allow `ikiwiki.cgi` to trigger the aggregation. You
|
Alternatively, you can allow `ikiwiki.cgi` to trigger the aggregation. You
|
||||||
should only need this if for some reason you cannot use cron, and instead
|
should only need this if for some reason you cannot use cron, and instead
|
||||||
want to use a service such as [WebCron](http://webcron.org). To enable
|
want to use a service such as [WebCron](http://webcron.org). To enable
|
||||||
|
|
Loading…
Reference in New Issue