Savetheinternet
13 years ago
4 changed files with 108 additions and 0 deletions
@ -0,0 +1,12 @@ |
|||||
|
<?php |
||||
|
$_SERVER = Array('REQUEST_URI' => '', 'HTTP_HOST' => '', 'SCRIPT_FILENAME' => ''); |
||||
|
chdir('/var/www'); |
||||
|
|
||||
|
require 'inc/functions.php'; |
||||
|
require 'inc/display.php'; |
||||
|
require 'inc/template.php'; |
||||
|
require 'inc/database.php'; |
||||
|
|
||||
|
require 'theme.php'; |
||||
|
rebuildTheme('rrdtool', 'cron'); |
||||
|
?> |
@ -0,0 +1,37 @@ |
|||||
|
<?php |
||||
|
$theme = Array(); |
||||
|
|
||||
|
// Theme name |
||||
|
$theme['name'] = 'RRDtool'; |
||||
|
// Description (you can use Tinyboard markup here) |
||||
|
$theme['description'] = 'Graph basic statistics using the PHP RRDtool extension.'; |
||||
|
$theme['version'] = 'v0.1'; |
||||
|
|
||||
|
// Theme configuration |
||||
|
$theme['config'] = Array(); |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Path', |
||||
|
'name' => 'path', |
||||
|
'type' => 'text', |
||||
|
'default' => str_replace('\\', '/', dirname(__FILE__)) . '/data', |
||||
|
'size' => '50' |
||||
|
); |
||||
|
|
||||
|
$__boards = listBoards(); |
||||
|
$__default_boards = Array(); |
||||
|
foreach($__boards as $__board) |
||||
|
$__default_boards[] = $__board['uri']; |
||||
|
|
||||
|
$theme['config'][] = Array( |
||||
|
'title' => 'Boards', |
||||
|
'name' => 'boards', |
||||
|
'type' => 'text', |
||||
|
'comment' => '(boards to graph; space seperated)', |
||||
|
'size' => 24, |
||||
|
'default' => implode(' ', $__default_boards) |
||||
|
); |
||||
|
|
||||
|
// Unique function name for building everything |
||||
|
$theme['build_function'] = 'rrdtool_build'; |
||||
|
?> |
@ -0,0 +1,59 @@ |
|||||
|
<?php |
||||
|
require 'info.php'; |
||||
|
|
||||
|
function rrdtool_build($action, $settings) { |
||||
|
// Possible values for $action: |
||||
|
// - all (rebuild everything, initialization) |
||||
|
// - news (news has been updated) |
||||
|
// - boards (board list changed) |
||||
|
// - post (a post has been made) |
||||
|
|
||||
|
$b = new TB_RRDTool(); |
||||
|
$b->build($action, $settings); |
||||
|
} |
||||
|
|
||||
|
// Wrap functions in a class so they don't interfere with normal Tinyboard operations |
||||
|
class TB_RRDTool { |
||||
|
public function build($action, $settings) { |
||||
|
global $config, $_theme; |
||||
|
|
||||
|
$this->boards = explode(' ', $settings['boards']); |
||||
|
$this->interval = 60; |
||||
|
|
||||
|
if($action == 'cron') { |
||||
|
if(!file_exists($settings['path'])) |
||||
|
mkdir($settings['path']); |
||||
|
|
||||
|
foreach($this->boards as &$board) { |
||||
|
$file = $settings['path'] . '/' . $board . '.rrd'; |
||||
|
|
||||
|
if(!file_exists($file)) { |
||||
|
// Create graph |
||||
|
if(!rrd_create($file, Array( |
||||
|
'-s ' . $this->interval, |
||||
|
'DS:posts:ABSOLUTE:120:0:100000000', |
||||
|
'RRA:AVERAGE:0.5:1:2880', |
||||
|
'RRA:AVERAGE:0.5:30:672', |
||||
|
'RRA:AVERAGE:0.5:120:732', |
||||
|
'RRA:AVERAGE:0.5:720:1460'))) |
||||
|
error('RRDtool failed: ' . htmlentities(rrd_error())); |
||||
|
} |
||||
|
|
||||
|
if($action == 'cron') { |
||||
|
$query = prepare(sprintf("SELECT COUNT(*) AS `count` FROM `posts_%s` WHERE `time` >= :time", $board)); |
||||
|
$query->bindValue(':time', time() - $this->interval, PDO::PARAM_INT): |
||||
|
$query->exeucte() or error(db_error($query)); |
||||
|
$query->fetch(); |
||||
|
|
||||
|
if(!rrd_update($file, Array( |
||||
|
'-t', |
||||
|
'posts', |
||||
|
'N:'))) |
||||
|
error('RRDtool failed: ' . htmlentities(rrd_error())); |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
}; |
||||
|
|
||||
|
?> |
After Width: | Height: | Size: 2.9 KiB |
Loading…
Reference in new issue