mirror of
https://github.com/vichan-devel/vichan.git
synced 2024-11-27 17:00:52 +01:00
(2/2) advanced build. implement a daemon that will build static pages.
implement a queue and a lock. fix notice in bans. and it even works! the daemon is basic right now, it could work in a mode that it will defer building certain pages until a certain time.
This commit is contained in:
parent
e265375475
commit
12e6aba5d4
@ -166,7 +166,7 @@ class Bans {
|
|||||||
|
|
||||||
if ($ban['post']) {
|
if ($ban['post']) {
|
||||||
$post = json_decode($ban['post']);
|
$post = json_decode($ban['post']);
|
||||||
$ban['message'] = $post->body;
|
$ban['message'] = isset($post->body) ? $post->body : 0;
|
||||||
}
|
}
|
||||||
unset($ban['ipstart'], $ban['ipend'], $ban['post'], $ban['creator']);
|
unset($ban['ipstart'], $ban['ipend'], $ban['post'], $ban['creator']);
|
||||||
|
|
||||||
|
@ -103,7 +103,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* ====================
|
* ====================
|
||||||
* Cache settings
|
* Cache, lock and queue settings
|
||||||
* ====================
|
* ====================
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -120,6 +120,7 @@
|
|||||||
// $config['cache']['enabled'] = 'apc';
|
// $config['cache']['enabled'] = 'apc';
|
||||||
// $config['cache']['enabled'] = 'memcached';
|
// $config['cache']['enabled'] = 'memcached';
|
||||||
// $config['cache']['enabled'] = 'redis';
|
// $config['cache']['enabled'] = 'redis';
|
||||||
|
// $config['cache']['enabled'] = 'fs';
|
||||||
|
|
||||||
// Timeout for cached objects such as posts and HTML.
|
// Timeout for cached objects such as posts and HTML.
|
||||||
$config['cache']['timeout'] = 60 * 60 * 48; // 48 hours
|
$config['cache']['timeout'] = 60 * 60 * 48; // 48 hours
|
||||||
@ -142,6 +143,12 @@
|
|||||||
// (this file will be explicitly loaded during cache hit, but not during cache miss).
|
// (this file will be explicitly loaded during cache hit, but not during cache miss).
|
||||||
$config['cache_config'] = false;
|
$config['cache_config'] = false;
|
||||||
|
|
||||||
|
// Define a lock driver.
|
||||||
|
$config['lock']['enabled'] = 'fs';
|
||||||
|
|
||||||
|
// Define a queue driver.
|
||||||
|
$config['queue']['enabled'] = 'fs'; // xD
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ====================
|
* ====================
|
||||||
* Cookie settings
|
* Cookie settings
|
||||||
|
@ -19,6 +19,8 @@ require_once 'inc/database.php';
|
|||||||
require_once 'inc/events.php';
|
require_once 'inc/events.php';
|
||||||
require_once 'inc/api.php';
|
require_once 'inc/api.php';
|
||||||
require_once 'inc/mod/auth.php';
|
require_once 'inc/mod/auth.php';
|
||||||
|
require_once 'inc/lock.php';
|
||||||
|
require_once 'inc/queue.php';
|
||||||
require_once 'inc/polyfill.php';
|
require_once 'inc/polyfill.php';
|
||||||
@include_once 'inc/lib/parsedown/Parsedown.php'; // fail silently, this isn't a critical piece of code
|
@include_once 'inc/lib/parsedown/Parsedown.php'; // fail silently, this isn't a critical piece of code
|
||||||
|
|
||||||
@ -93,6 +95,8 @@ function loadConfig() {
|
|||||||
'db',
|
'db',
|
||||||
'api',
|
'api',
|
||||||
'cache',
|
'cache',
|
||||||
|
'lock',
|
||||||
|
'queue',
|
||||||
'cookies',
|
'cookies',
|
||||||
'error',
|
'error',
|
||||||
'dir',
|
'dir',
|
||||||
@ -1749,7 +1753,6 @@ function buildJavascript() {
|
|||||||
function checkDNSBL() {
|
function checkDNSBL() {
|
||||||
global $config;
|
global $config;
|
||||||
|
|
||||||
|
|
||||||
if (isIPv6())
|
if (isIPv6())
|
||||||
return; // No IPv6 support yet.
|
return; // No IPv6 support yet.
|
||||||
|
|
||||||
@ -2806,17 +2809,17 @@ function generation_strategy($fun, $array=array()) { global $config;
|
|||||||
$action = false;
|
$action = false;
|
||||||
|
|
||||||
foreach ($config['generation_strategies'] as $s) {
|
foreach ($config['generation_strategies'] as $s) {
|
||||||
if ($strategy = $s($fun, $array)) {
|
if ($action = $s($fun, $array)) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
switch ($strategy[0]) {
|
switch ($action[0]) {
|
||||||
case 'immediate':
|
case 'immediate':
|
||||||
return 'rebuild';
|
return 'rebuild';
|
||||||
case 'defer':
|
case 'defer':
|
||||||
// Ok, it gets interesting here :)
|
// Ok, it gets interesting here :)
|
||||||
Queue::add(serialize(array('build', $fun, $array)));
|
get_queue('generate')->push(serialize(array('build', $fun, $array, $action)));
|
||||||
return 'ignore';
|
return 'ignore';
|
||||||
case 'build_on_load':
|
case 'build_on_load':
|
||||||
return 'delete';
|
return 'delete';
|
||||||
@ -2832,5 +2835,32 @@ function strategy_smart_build($fun, $array) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function strategy_sane($fun, $array) { global $config;
|
function strategy_sane($fun, $array) { global $config;
|
||||||
return false;
|
// Well, ideally a sane strategy would involve a more stringent checking,
|
||||||
|
// but let's at least have something to get the ball rolling :^)
|
||||||
|
|
||||||
|
if (php_sapi_name() == 'cli') return false;
|
||||||
|
else if (isset($_POST['mod']) || isset($_POST['json_response'])) return false;
|
||||||
|
else if ($fun == 'sb_thread' || ($fun == 'sb_board' && $array[1] == 1)) return array('immediate');
|
||||||
|
else return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// My first, test strategy.
|
||||||
|
function strategy_first($fun, $array) {
|
||||||
|
switch ($fun) {
|
||||||
|
case 'sb_thread':
|
||||||
|
return array('defer');
|
||||||
|
case 'sb_board':
|
||||||
|
if ($array[1] > 8) return array('build_on_load');
|
||||||
|
else return array('defer');
|
||||||
|
case 'sb_api':
|
||||||
|
return array('defer');
|
||||||
|
case 'sb_catalog':
|
||||||
|
return array('defer');
|
||||||
|
case 'sb_recent':
|
||||||
|
return array('build_on_load');
|
||||||
|
case 'sb_sitemap':
|
||||||
|
return array('build_on_load');
|
||||||
|
case 'sb_ukko':
|
||||||
|
return array('defer');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@ if (!$route) {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
list ($fun, $args) = $route;
|
list ($fun, $args) = $route;
|
||||||
$reached = call_user_func_array($route);
|
$reached = call_user_func_array($fun, $args);
|
||||||
}
|
}
|
||||||
|
|
||||||
function die_404() { global $config;
|
function die_404() { global $config;
|
||||||
|
0
tmp/queue/generate/.gitkeep
Normal file
0
tmp/queue/generate/.gitkeep
Normal file
31
tools/worker.php
Executable file
31
tools/worker.php
Executable file
@ -0,0 +1,31 @@
|
|||||||
|
#!/usr/bin/php
|
||||||
|
<?php
|
||||||
|
/* worker.php - part of advanced build vichan feature */
|
||||||
|
|
||||||
|
require dirname(__FILE__) . '/inc/cli.php';
|
||||||
|
require_once 'inc/controller.php';
|
||||||
|
|
||||||
|
$config['smart_build'] = false; // Let's disable it, so we can build the page for real
|
||||||
|
$config['generation_strategies'] = array('strategy_immediate');
|
||||||
|
|
||||||
|
function after_open_board() { global $config;
|
||||||
|
$config['smart_build'] = false;
|
||||||
|
$config['generation_strategies'] = array('strategy_immediate');
|
||||||
|
};
|
||||||
|
|
||||||
|
echo "Hello world!\n";
|
||||||
|
|
||||||
|
$queue = get_queue('generate');
|
||||||
|
|
||||||
|
while (true) {
|
||||||
|
$q = $queue->pop(2);
|
||||||
|
foreach ($q as $v) {
|
||||||
|
list($__, $func, $ary, $action) = unserialize($v);
|
||||||
|
echo "Starting to generate $func ".implode(" ", $ary)."... ";
|
||||||
|
|
||||||
|
call_user_func_array($func, $ary);
|
||||||
|
|
||||||
|
echo "done!\n";
|
||||||
|
}
|
||||||
|
if (!$q) usleep(20000); // 0.02s
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user