website plugin rpc: add cacheing - processing the data could be slow

also reduce the amount of data in the bus routes list - no bounding box or end stop. it's enough to identify routes, and much faster
This commit is contained in:
Jon Atkins 2014-06-07 22:29:45 +01:00
parent 704968ae9e
commit 3dfe9df628

View File

@ -2,6 +2,8 @@
include "phpcoord/phpcoord-2.3.php"; include "phpcoord/phpcoord-2.3.php";
$cachedir = "/dev/shm";
header("Content-Type: text/plain"); header("Content-Type: text/plain");
function load_csv_callback($filename,$callback) { function load_csv_callback($filename,$callback) {
@ -101,33 +103,66 @@ class Stops {
}; };
$result = Array();
function cache_file_ok($cachefile,$datafile) {
if ( file_exists($cachefile) ) {
$cachetime = filemtime($cachefile);
// the file is downloaded with 'wget' - this preserves server timestamps, so 'wrong' from a cache point of view
$datatime = max (filemtime($datafile), filectime($datafile));
if ($cachetime > $datatime) {
return TRUE;
}
}
return FALSE;
}
$result = NULL;
switch ($_REQUEST['method']) { switch ($_REQUEST['method']) {
case 'bus-routes': case 'bus-routes':
$cachefile = "$cachedir/iitc-rpc-bus-routes.json";
if ( cache_file_ok($cachefile,"bus-sequences.csv") ) {
$result = file_get_contents($cachefile);
} else {
$routes = new Routes(); $routes = new Routes();
load_csv_callback("bus-sequences.csv", Array($routes,'add_route')); load_csv_callback("bus-sequences.csv", Array($routes,'add_route'));
$result = Array('bus-routes'=>$routes->routes); $result = json_encode(Array('bus-routes'=>$routes->routes));
$tmpfile = tempnam($cachedir,"iitc-rpc");
file_put_contents($tmpfile,$result) && rename($tmpfile, $cachefile);
}
break; break;
case 'bus-stops': case 'bus-stops':
$route = $_REQUEST['route']; $route = $_REQUEST['route'];
$run = (int)$_REQUEST['run']; $run = (int)$_REQUEST['run'];
$cachefile = "$cachedir/iitc-rpc-bus-stops-$route-$run.json";
if ( cache_file_ok($cachefile,"bus-sequences.csv") ) {
$result = file_get_contents($cachefile);
} else {
$stops = new Stops(); $stops = new Stops();
$stops->route_run($route, $run); $stops->route_run($route, $run);
load_csv_callback("bus-sequences.csv", Array($stops,'add_stop')); load_csv_callback("bus-sequences.csv", Array($stops,'add_stop'));
$result = Array('route' => $route, 'run' => $run, 'stops' => $stops->stops); $result = json_encode(Array('route' => $route, 'run' => $run, 'stops' => $stops->stops));
$tmpfile = tempnam($cachedir,"iitc-rpc");
file_put_contents($tmpfile,$result) && rename($tmpfile, $cachefile);
}
break; break;
default: default:
$result = Array('error'=>'Method not found'); $result = json_encode(Array('error'=>'Method not found'));
break; break;
} }
@ -141,7 +176,7 @@ else
if (isset($_REQUEST['jsonp'])) if (isset($_REQUEST['jsonp']))
print($_REQUEST['jsonp']."("); print($_REQUEST['jsonp']."(");
print json_encode($result); print $result;
if (isset($_REQUEST['jsonp'])) if (isset($_REQUEST['jsonp']))
print(");"); print(");");