summaryrefslogtreecommitdiff
path: root/templates/themes/rrdtool/theme.php
blob: 37b92cd96cb9ea456b46ce965d62b2655c3fdb53 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
<?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));
						$count = $query->fetch();
						$count = $count['count'];
						
						if(!rrd_update($file, Array(
								'-t',
								'posts',
								'N:' . $count)))
								error('RRDtool failed: ' . htmlentities(rrd_error()));
						}
				}
			}
		}
	};
	
?>