summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSavetheinternet <savetheinternet@tinyboard.org>2011-06-07 15:22:41 +1000
committerSavetheinternet <savetheinternet@tinyboard.org>2011-06-07 15:22:41 +1000
commita582bf5866c8dbb6d497c0f860475a6eeb73b096 (patch)
treefcceb2c550ef56f073d5b0921c10a7d2e9cc51bc
parent8baf6ca1245fd02c227c183e04c836b69235b9f7 (diff)
"rrdtool" theme for graphing basic stats in development
-rw-r--r--templates/themes/rrdtool/cron.php12
-rw-r--r--templates/themes/rrdtool/info.php37
-rw-r--r--templates/themes/rrdtool/theme.php59
-rw-r--r--templates/themes/rrdtool/thumb.pngbin0 -> 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
new file mode 100644
index 00000000..d4e48a0d
--- /dev/null
+++ b/templates/themes/rrdtool/thumb.png
Binary files differ