source: subversion/sites/namefinder/cron-updates/daily.php @ 12160

Last change on this file since 12160 was 10371, checked in by david, 11 years ago

add scripts for daily update processing

File size: 3.7 KB
Line 
1<?php
2
3$dailyplaneturl = "http://planet.openstreetmap.org/daily/";
4$mailto = "whoever@wherever.com";
5$mailfrom = "gazetteer@openstreetmap.org";
6$localplanetdirectory = "/home/namefinder/planet"; // which is called cron-updates in svn
7$localupdatedirectory = "/home/namefinder/namefinder/util";
8$outputscriptname = "{$localplanetdirectory}/update-daily.sh";
9$namefindersqlpassword = "CHANGEME";
10
11$scriptheader =<<<EOD
12#!/bin/sh
13cd {$localupdatedirectory}
14
15EOD;
16
17file_put_contents($outputscriptname, $scriptheader);
18chmod($outputscriptname, 0700);
19
20$dailypage = file_get_contents($dailyplaneturl);
21if ($dailypage === FALSE) {
22  mailerror("cannot read daily planets");
23}
24
25if (! preg_match_all('/\\<a href\\=\\"([0-9]{8}-[0-9]{8}\\.osc\\.gz)\\"\\>/', 
26                     $dailypage, $matches, PREG_PATTERN_ORDER)) 
27{
28  mailerror("cannot find any files on daily planets page");
29}
30
31$files = $matches[1];
32
33foreach ($files as $file) {
34  $localfile = "{$localplanetdirectory}/{$file}";
35  if (! file_exists($localfile) && ! file_exists("{$localfile}.done")) {
36    echo "fetching {$file}...\n";
37    $ch = curl_init("{$dailyplaneturl}{$file}");
38    $fp = fopen($localfile, "w");
39    if ($fp === FALSE) { mailerror("cannot open output file {$localfile}"); }
40    curl_setopt($ch, CURLOPT_FILE, $fp);
41    curl_setopt($ch, CURLOPT_HEADER, 0);
42    if (curl_exec($ch) === FALSE) { mailerror("cannot fetch {$file}"); }
43    curl_close($ch);
44    fclose($fp);
45  }
46}
47
48$processed = "files queued:\n";
49$d = dir($localplanetdirectory);
50$entries = array();
51$dones = array();
52while (FALSE !== ($entry = $d->read())) {
53  if (preg_match('/^([0-9]{8})-([0-9]{8})\\.osc\\.gz$/', $entry, $matches)) {
54    $entries[$matches[2]] = $entry;
55  } else if (preg_match('/^([0-9]{8})-([0-9]{8})\\.osc\\.gz\\.done$/', $entry, $matches)) {
56    $dones[$matches[2]] = $entry;
57  }
58}
59
60if (count($entries) == 0) { mailerror ("no entries to update"); }
61
62asort($dones);
63asort($entries);
64if (count($dones) == 0) {
65  $dates = array();
66} else {
67  $lastdate = '';
68  foreach ($dones as $date => $entry) { $lastdate = $date; }
69  $dates = array(strtotime($lastdate));
70}
71foreach ($entries as $date => $entry) { $dates[] = strtotime($date); }
72
73/* check now that entries are consecutive and the first one leads on from the last done */
74if (count($dates) > 1) {
75  for ($i = 1; $i < count($dates); $i++) {
76    if ($dates[$i] != $dates[$i-1] + 24 * 60 * 60) {
77      if ($dates[$i] != $dates[$i-1] + 23 * 60 * 60 && $dates[$i] != $dates[$i-1] + 25 * 60 * 60) {
78        // special cases for daylight saving change
79        mailerror("updates are not consecutive");
80      }
81    }
82  }
83}
84
85$plus = '';
86foreach ($entries as $entry) {
87  $localfile = "{$localplanetdirectory}/{$entry}";
88  $command =<<<EOD
89php -d memory_limit=128M import.php {$plus}{$localfile} &> {$localfile}.import.log
90rm {$localfile} 
91touch {$localfile}.done
92
93EOD;
94  if (file_put_contents($outputscriptname, $command, FILE_APPEND) === FALSE) {
95    rename ($outputscriptname, "{$outputscriptname}.error");
96    mailerror("cannot append to $outputscriptname");
97  }
98  $filesize = filesize($localfile);
99  $processed .= $entry . ' ' . $filesize . "\n";
100  $plus = '+';
101}
102$d->close();
103
104$command = "php -d memory_limit=128M update.php &> {$localfile}.update.log\n";
105if (file_put_contents($outputscriptname, $command, FILE_APPEND) === FALSE) {
106  rename ($outputscriptname, "{$outputscriptname}.error");
107  mailerror("cannot append to $outputscriptname");
108}
109
110sendmail("updates running", $processed);
111
112// --------------------------------------------------
113function mailerror($s) {
114  sendmail($s);
115  die($s."\n");
116}
117
118// --------------------------------------------------
119function sendmail($s, $c=NULL) {
120  global $mailto, $mailfrom;
121  if (is_null($c)) { $c = $s; }
122  mail($mailto, "namefinder: ".$s, $c, "From: {$mailfrom}\r\n");
123}
124
125?>
Note: See TracBrowser for help on using the repository browser.