From a582bf5866c8dbb6d497c0f860475a6eeb73b096 Mon Sep 17 00:00:00 2001 From: Savetheinternet Date: Tue, 7 Jun 2011 15:22:41 +1000 Subject: [PATCH] "rrdtool" theme for graphing basic stats in development --- templates/themes/rrdtool/cron.php | 12 ++++++ templates/themes/rrdtool/info.php | 37 ++++++++++++++++++ templates/themes/rrdtool/theme.php | 59 +++++++++++++++++++++++++++++ templates/themes/rrdtool/thumb.png | Bin 0 -> 2967 bytes 4 files changed, 108 insertions(+) create mode 100644 templates/themes/rrdtool/cron.php create mode 100644 templates/themes/rrdtool/info.php create mode 100644 templates/themes/rrdtool/theme.php create mode 100644 templates/themes/rrdtool/thumb.png 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 @@ + '', '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 @@ + '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 @@ +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 0000000000000000000000000000000000000000..d4e48a0d5a85839db4edb425cddbe54c8e63e0e5 GIT binary patch literal 2967 zcmc(hdpHvcAIIk&HJ5}AavLeP$#I#>XofanlB4F<5s}DcuG8?kO{66!bRu#amP?{^ zWG0e2HFL>58&TWTa$7F5w&T3-`|tbT`#k6K{4Rg~zTe;T{GR8R=jm|@D5EL^004kU zgp=1^C-0^AKC!(z@AwJ<0EhuR-MpO*3=GmMg?mt`R5LR(ZEbB86_sbto*|J)G#b6V zz0Kip=yZB%X(*e&9;Tf-? zPH1y0M^r%WRs5)kh=?;P$}=#}!rH|r>~3)KAA1q-zX=M*k_H$5b}rl*`8PawbOYzbmWV4(U_aULAhk6*t%Iq!FllVvKbid_!(rrVw5+z^GDoA;TLPk|_nT#n?}bJoo?&CPpk{ZrP@J$&NQ zm^9pM>r&*KS&w!e46|ix^|4m$sq4_w#X3^EJBzkdlp1*EKCCeuH(qsBe+SQY=$ziZ z(a}OV0{z8~UZnBOe{xt%7_J93_up8n->oZk0Doa!+UdF%SfV+ZE=|VyqQI5o!|ftl zD2Cs}nC9fjTZR{vF7$ACg{_W*hH4pR2*j=KA88}5`92V)#m5gstD-8ZFECt-Ei0M% zv%_1X9}61`* zj0(vhoveKH6fBVvZhvWra*0stEKJIVJV%*rj@LJ(@#2zrVAQstYiO(QW#}*5H;{8% zy_?-*{!i?tiqrZkY>-A+p4uymz!Da-V1<+^@GzNz>vbCm+bzfkU?~+)gxOCnx5Tz_ zf6ij8>mOm=-*S&wwjVFmf6;!iZXh$D`6-b$`vh^}QM(LJ%2)j~vQPArxJlK@iL0t1 zy<5pKn|H&|^TvV$KNc0QaT>j0jId@%-I7^ou4UnoY-&geHCw*D9L*Q5+hVWl2 z`ro+kgK4r{XDQRll6W>aaX?o0x1@((mpCiP&j^L6)Oq3bnwSTvRQ;hQ53 zr7Ne$GpgD1W!3mu=OH`HBaLqsqRWxLZvd(; zlyrGeJ_c?$w+Y5@`nA{JPGwQM|l@hSroUU(q^0 zqg$R~fvKV|dI!|L>S3KUsj{x=-LE$`ckU=2XGqs9&0B0@H zB0O|GrUCLg79>Y|f0DHP5JE>RL5|ffTVmpt)rQM-?RADT3_t$v`50l^fC%FfL}L#H zLDZxq_ZJ^_&{6-c41^V$o}C6@ul#!N%&}NR3_fQTh?C%Six5%DC|IguN*Q+o=C)Rd zABZeWRPrzQ33?`BRTpk|G=SKai?@tz%4p)Elc$s##RJUmUENLoD2v{&k(_O$ETQco zCo1A&h1uJZVx{Ye&F4AYRrxv+;PXi=VwEFH%vG~L_;69-K&WTZ@`(!L6DBa+{ulE) zO5e1&C3kExm(*|DKj4OXq=I+~zdw}Zx-Lznsa$*KeX}Kc&?}F=*|qTcVyA5gdFFLo zvh3195p3im%Be}%xya-=avN9wK5p*s0) zI(50~mki{g+4S~{AmEBBubUUjRV^T_=CHLc1~y^Y#iT>5{*DSx*jz{YKDI4&N2V0P zM!F;ztC!E~evr3=IsEz1;gsf7a!zla)=Qxp;)DgzlGO60H?%>*WYk=()>v)yLAc+1 zq+f;xs6zQ&%ZlGod(~Rmx4JP&O~AK+?&#ake)zS==}PX_rorS_98qvJWS zO^`_+!7%bWsHpJQg9*70&5bjicFGr5pLmDOc?U3;!PT7$+O`B4tNtP2!k0C-KBGir zh@