diff options
| author | Savetheinternet <savetheinternet@tinyboard.org> | 2011-06-07 15:22:41 +1000 |
|---|---|---|
| committer | Savetheinternet <savetheinternet@tinyboard.org> | 2011-06-07 15:22:41 +1000 |
| commit | a582bf5866c8dbb6d497c0f860475a6eeb73b096 (patch) | |
| tree | fcceb2c550ef56f073d5b0921c10a7d2e9cc51bc | |
| parent | 8baf6ca1245fd02c227c183e04c836b69235b9f7 (diff) | |
"rrdtool" theme for graphing basic stats in development
| -rw-r--r-- | templates/themes/rrdtool/cron.php | 12 | ||||
| -rw-r--r-- | templates/themes/rrdtool/info.php | 37 | ||||
| -rw-r--r-- | templates/themes/rrdtool/theme.php | 59 | ||||
| -rw-r--r-- | templates/themes/rrdtool/thumb.png | bin | 0 -> 2967 bytes |
4 files changed, 108 insertions, 0 deletions
diff --git a/templates/themes/rrdtool/cron.php b/templates/themes/rrdtool/cron.php new file mode 100644 index 00000000..4608e959 --- /dev/null +++ b/templates/themes/rrdtool/cron.php @@ -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');
+?>
\ No newline at end of file diff --git a/templates/themes/rrdtool/info.php b/templates/themes/rrdtool/info.php new file mode 100644 index 00000000..fa1844e9 --- /dev/null +++ b/templates/themes/rrdtool/info.php @@ -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'; +?>
\ No newline at end of file diff --git a/templates/themes/rrdtool/theme.php b/templates/themes/rrdtool/theme.php new file mode 100644 index 00000000..0482c688 --- /dev/null +++ b/templates/themes/rrdtool/theme.php @@ -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())); + } + } + } + } + }; + +?>
\ No newline at end of file diff --git a/templates/themes/rrdtool/thumb.png b/templates/themes/rrdtool/thumb.png Binary files differnew file mode 100644 index 00000000..d4e48a0d --- /dev/null +++ b/templates/themes/rrdtool/thumb.png |
