aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--graph.php14
-rw-r--r--inc/collectd.inc.php17
-rw-r--r--plugin/cpu.php21
-rw-r--r--plugin/df.php16
-rw-r--r--plugin/disk.php24
-rw-r--r--plugin/entropy.php14
-rw-r--r--plugin/interface.php23
-rw-r--r--plugin/irq.php23
-rw-r--r--plugin/load.php14
-rw-r--r--plugin/memory.php20
-rw-r--r--plugin/processes.php20
-rw-r--r--plugin/sensors.php28
-rw-r--r--plugin/swap.php22
-rw-r--r--plugin/users.php14
-rw-r--r--type/Default.class.php142
-rw-r--r--type/GenericIO.class.php51
-rw-r--r--type/GenericStacked.class.php59
17 files changed, 198 insertions, 324 deletions
diff --git a/graph.php b/graph.php
index cc3aeb1..77bfcb6 100644
--- a/graph.php
+++ b/graph.php
@@ -2,26 +2,20 @@
2 2
3require_once 'conf/common.inc.php'; 3require_once 'conf/common.inc.php';
4 4
5$host = $_GET['h'];
6$plugin = $_GET['p'];
7$pinstance = $_GET['pi'];
8$type = $_GET['t'];
9$tinstance = $_GET['ti'];
10$width = empty($_GET['x']) ? $CONFIG['width'] : $_GET['x']; 5$width = empty($_GET['x']) ? $CONFIG['width'] : $_GET['x'];
11$heigth = empty($_GET['y']) ? $CONFIG['heigth'] : $_GET['y']; 6$heigth = empty($_GET['y']) ? $CONFIG['heigth'] : $_GET['y'];
12$seconds = $_GET['s'];
13 7
14if (!preg_match('/^[a-z]+$/', $plugin)) { 8if (!preg_match('/^[a-z]+$/', $_GET['p'])) {
15 die_img('Error: plugin contains unknown characters.'); 9 die_img('Error: plugin contains unknown characters.');
16 exit; 10 exit;
17} 11}
18 12
19if (!file_exists($CONFIG['webdir']."/plugin/$plugin.php")) { 13if (!file_exists($CONFIG['webdir'].'/plugin/'.$_GET['p'].'.php')) {
20 die_img(sprintf('Error: plugin not available (%s).', $plugin)); 14 die_img(sprintf('Error: plugin not available (%s).', $_GET['p']));
21 exit; 15 exit;
22} 16}
23 17
24include $CONFIG['webdir']."/plugin/$plugin.php"; 18include $CONFIG['webdir'].'/plugin/'.$_GET['p'].'.php';
25 19
26 20
27function die_img($msg) { 21function die_img($msg) {
diff --git a/inc/collectd.inc.php b/inc/collectd.inc.php
index 3ef9102..2a44fba 100644
--- a/inc/collectd.inc.php
+++ b/inc/collectd.inc.php
@@ -221,21 +221,4 @@ function collectd_flush($identifier) {
221 } 221 }
222} 222}
223 223
224# generate identifiers from args
225function ident_from_args($args) {
226 if (is_array($args['tinstance'])) {
227 foreach($args['tinstance'] as $ti) {
228 $instances[] = collectd_identifier($args['host'],
229 $args['plugin'], $args['pinstance'],
230 $args['type'], $ti);
231 }
232 } else {
233 $instances[] = collectd_identifier($args['host'],
234 $args['plugin'], $args['pinstance'],
235 $args['type'], $args['tinstance']);
236 }
237
238 return $instances;
239}
240
241?> 224?>
diff --git a/plugin/cpu.php b/plugin/cpu.php
index 4cc74f6..d4097b0 100644
--- a/plugin/cpu.php
+++ b/plugin/cpu.php
@@ -4,6 +4,7 @@
4 4
5require_once 'conf/common.inc.php'; 5require_once 'conf/common.inc.php';
6require_once 'type/GenericStacked.class.php'; 6require_once 'type/GenericStacked.class.php';
7require_once 'inc/collectd.inc.php';
7 8
8## LAYOUT 9## LAYOUT
9# cpu-X/ 10# cpu-X/
@@ -16,19 +17,7 @@ require_once 'type/GenericStacked.class.php';
16# cpu-X/cpu-user.rrd 17# cpu-X/cpu-user.rrd
17# cpu-X/cpu-wait.rrd 18# cpu-X/cpu-wait.rrd
18 19
19# grouped 20$obj = new Type_GenericStacked($CONFIG['datadir']);
20require_once 'inc/collectd.inc.php';
21$tinstance = collectd_plugindetail($host, $plugin, 'ti');
22
23$obj = new Type_GenericStacked;
24$obj->datadir = $CONFIG['datadir'];
25$obj->args = array(
26 'host' => $host,
27 'plugin' => $plugin,
28 'pinstance' => $pinstance,
29 'type' => $type,
30 'tinstance' => $tinstance,
31);
32$obj->data_sources = array('value'); 21$obj->data_sources = array('value');
33$obj->order = array('idle', 'nice', 'user', 'wait', 'system', 'softirq', 'interrupt', 'steal'); 22$obj->order = array('idle', 'nice', 'user', 'wait', 'system', 'softirq', 'interrupt', 'steal');
34$obj->ds_names = array( 23$obj->ds_names = array(
@@ -53,14 +42,12 @@ $obj->colors = array(
53); 42);
54$obj->width = $width; 43$obj->width = $width;
55$obj->heigth = $heigth; 44$obj->heigth = $heigth;
56$obj->seconds = $seconds;
57 45
58$obj->rrd_title = sprintf('CPU-%s usage', $pinstance); 46$obj->rrd_title = sprintf('CPU-%s usage', $obj->args['pinstance']);
59$obj->rrd_vertical = 'Jiffies'; 47$obj->rrd_vertical = 'Jiffies';
60$obj->rrd_format = '%5.2lf'; 48$obj->rrd_format = '%5.2lf';
61 49
62collectd_flush(ident_from_args($obj->args)); 50collectd_flush($obj->identifiers);
63
64$obj->rrd_graph(); 51$obj->rrd_graph();
65 52
66?> 53?>
diff --git a/plugin/df.php b/plugin/df.php
index bf9b850..79c5cb5 100644
--- a/plugin/df.php
+++ b/plugin/df.php
@@ -11,15 +11,7 @@ require_once 'inc/collectd.inc.php';
11# df/ 11# df/
12# df/df-XXXX.rrd 12# df/df-XXXX.rrd
13 13
14$obj = new Type_GenericStacked; 14$obj = new Type_GenericStacked($CONFIG['datadir']);
15$obj->datadir = $CONFIG['datadir'];
16$obj->args = array(
17 'host' => $host,
18 'plugin' => $plugin,
19 'pinstance' => $pinstance,
20 'type' => $type,
21 'tinstance' => $tinstance,
22);
23$obj->data_sources = array('free', 'used'); 15$obj->data_sources = array('free', 'used');
24$obj->ds_names = array( 16$obj->ds_names = array(
25 'free' => 'Free', 17 'free' => 'Free',
@@ -31,14 +23,12 @@ $obj->colors = array(
31); 23);
32$obj->width = $width; 24$obj->width = $width;
33$obj->heigth = $heigth; 25$obj->heigth = $heigth;
34$obj->seconds = $seconds;
35 26
36$obj->rrd_title = sprintf('Free space (%s)', $tinstance); 27$obj->rrd_title = sprintf('Free space (%s)', $obj->args['tinstance']);
37$obj->rrd_vertical = 'Bytes'; 28$obj->rrd_vertical = 'Bytes';
38$obj->rrd_format = '%5.1lf%sB'; 29$obj->rrd_format = '%5.1lf%sB';
39 30
40collectd_flush(ident_from_args($obj->args)); 31collectd_flush($obj->identifiers);
41
42$obj->rrd_graph(); 32$obj->rrd_graph();
43 33
44?> 34?>
diff --git a/plugin/disk.php b/plugin/disk.php
index 620b188..f1100d6 100644
--- a/plugin/disk.php
+++ b/plugin/disk.php
@@ -13,15 +13,7 @@ require_once 'inc/collectd.inc.php';
13# disk-XXXX/disk_ops.rrd 13# disk-XXXX/disk_ops.rrd
14# disk-XXXX/disk_time.rrd 14# disk-XXXX/disk_time.rrd
15 15
16$obj = new Type_GenericIO; 16$obj = new Type_GenericIO($CONFIG['datadir']);
17$obj->datadir = $CONFIG['datadir'];
18$obj->args = array(
19 'host' => $host,
20 'plugin' => $plugin,
21 'pinstance' => $pinstance,
22 'type' => $type,
23 'tinstance' => $tinstance,
24);
25$obj->data_sources = array('read', 'write'); 17$obj->data_sources = array('read', 'write');
26$obj->ds_names = array( 18$obj->ds_names = array(
27 'read' => 'Read ', 19 'read' => 'Read ',
@@ -33,33 +25,31 @@ $obj->colors = array(
33); 25);
34$obj->width = $width; 26$obj->width = $width;
35$obj->heigth = $heigth; 27$obj->heigth = $heigth;
36$obj->seconds = $seconds; 28switch($obj->args['type']) {
37switch($type) {
38 case 'disk_merged': 29 case 'disk_merged':
39 $obj->rrd_title = sprintf('Disk Merged Operations (%s)', $pinstance); 30 $obj->rrd_title = sprintf('Disk Merged Operations (%s)', $obj->args['pinstance']);
40 $obj->rrd_vertical = 'Merged operations/s'; 31 $obj->rrd_vertical = 'Merged operations/s';
41 $obj->rrd_format = '%5.1lf'; 32 $obj->rrd_format = '%5.1lf';
42 break; 33 break;
43 case 'disk_octets': 34 case 'disk_octets':
44 $obj->rrd_title = sprintf('Disk Traffic (%s)', $pinstance); 35 $obj->rrd_title = sprintf('Disk Traffic (%s)', $obj->args['pinstance']);
45 $obj->rrd_vertical = 'Bytes per second'; 36 $obj->rrd_vertical = 'Bytes per second';
46 $obj->rrd_format = '%5.1lf%s'; 37 $obj->rrd_format = '%5.1lf%s';
47 break; 38 break;
48 case 'disk_ops': 39 case 'disk_ops':
49 $obj->rrd_title = sprintf('Disk Operations (%s)', $pinstance); 40 $obj->rrd_title = sprintf('Disk Operations (%s)', $obj->args['pinstance']);
50 $obj->rrd_vertical = 'Ops per second'; 41 $obj->rrd_vertical = 'Ops per second';
51 $obj->rrd_format = '%5.1lf'; 42 $obj->rrd_format = '%5.1lf';
52 break; 43 break;
53 case 'disk_time': 44 case 'disk_time':
54 $obj->rrd_title = sprintf('Disk time per operation (%s)', $pinstance); 45 $obj->rrd_title = sprintf('Disk time per operation (%s)', $obj->args['pinstance']);
55 $obj->rrd_vertical = 'Avg. Time/Op'; 46 $obj->rrd_vertical = 'Avg. Time/Op';
56 $obj->rrd_format = '%5.1lf%ss'; 47 $obj->rrd_format = '%5.1lf%ss';
57 $obj->scale = '0.001'; 48 $obj->scale = '0.001';
58 break; 49 break;
59} 50}
60 51
61collectd_flush(ident_from_args($obj->args)); 52collectd_flush($obj->identifiers);
62
63$obj->rrd_graph(); 53$obj->rrd_graph();
64 54
65?> 55?>
diff --git a/plugin/entropy.php b/plugin/entropy.php
index 6ee96aa..8705894 100644
--- a/plugin/entropy.php
+++ b/plugin/entropy.php
@@ -9,15 +9,7 @@ require_once 'inc/collectd.inc.php';
9## LAYOUT 9## LAYOUT
10# entropy/entropy.rrd 10# entropy/entropy.rrd
11 11
12$obj = new Type_Default; 12$obj = new Type_Default($CONFIG['datadir']);
13$obj->datadir = $CONFIG['datadir'];
14$obj->args = array(
15 'host' => $host,
16 'plugin' => $plugin,
17 'pinstance' => $pinstance,
18 'type' => $type,
19 'tinstance' => $tinstance,
20);
21$obj->data_sources = array('entropy'); 13$obj->data_sources = array('entropy');
22$obj->ds_names = array( 14$obj->ds_names = array(
23 'entropy' => 'Entropy bits', 15 'entropy' => 'Entropy bits',
@@ -27,13 +19,11 @@ $obj->colors = array(
27); 19);
28$obj->width = $width; 20$obj->width = $width;
29$obj->heigth = $heigth; 21$obj->heigth = $heigth;
30$obj->seconds = $seconds;
31$obj->rrd_title = 'Available entropy'; 22$obj->rrd_title = 'Available entropy';
32$obj->rrd_vertical = 'Bits'; 23$obj->rrd_vertical = 'Bits';
33$obj->rrd_format = '%4.0lf'; 24$obj->rrd_format = '%4.0lf';
34 25
35collectd_flush(ident_from_args($obj->args)); 26collectd_flush($obj->identifiers);
36
37$obj->rrd_graph(); 27$obj->rrd_graph();
38 28
39?> 29?>
diff --git a/plugin/interface.php b/plugin/interface.php
index 7d8d929..89e4280 100644
--- a/plugin/interface.php
+++ b/plugin/interface.php
@@ -12,15 +12,7 @@ require_once 'inc/collectd.inc.php';
12# interface/if_octets-XXXX.rrd 12# interface/if_octets-XXXX.rrd
13# interface/if_packets-XXXX.rrd 13# interface/if_packets-XXXX.rrd
14 14
15$obj = new Type_GenericIO; 15$obj = new Type_GenericIO($CONFIG['datadir']);
16$obj->datadir = $CONFIG['datadir'];
17$obj->args = array(
18 'host' => $host,
19 'plugin' => $plugin,
20 'pinstance' => $pinstance,
21 'type' => $type,
22 'tinstance' => $tinstance,
23);
24$obj->data_sources = array('rx', 'tx'); 16$obj->data_sources = array('rx', 'tx');
25$obj->ds_names = array( 17$obj->ds_names = array(
26 'rx' => 'Receive ', 18 'rx' => 'Receive ',
@@ -32,25 +24,24 @@ $obj->colors = array(
32); 24);
33$obj->width = $width; 25$obj->width = $width;
34$obj->heigth = $heigth; 26$obj->heigth = $heigth;
35$obj->seconds = $seconds;
36$obj->rrd_format = '%5.1lf%s'; 27$obj->rrd_format = '%5.1lf%s';
37switch($type) { 28
29switch($obj->args['type']) {
38 case 'if_errors': 30 case 'if_errors':
39 $obj->rrd_title = sprintf('Interface Errors (%s)', $tinstance); 31 $obj->rrd_title = sprintf('Interface Errors (%s)', $obj->args['tinstance']);
40 $obj->rrd_vertical = 'Errors per second'; 32 $obj->rrd_vertical = 'Errors per second';
41 break; 33 break;
42 case 'if_octets': 34 case 'if_octets':
43 $obj->rrd_title = sprintf('Interface Traffic (%s)', $tinstance); 35 $obj->rrd_title = sprintf('Interface Traffic (%s)', $obj->args['tinstance']);
44 $obj->rrd_vertical = 'Bits per second'; 36 $obj->rrd_vertical = 'Bits per second';
45 break; 37 break;
46 case 'if_packets': 38 case 'if_packets':
47 $obj->rrd_title = sprintf('Interface Packets (%s)', $tinstance); 39 $obj->rrd_title = sprintf('Interface Packets (%s)', $obj->args['tinstance']);
48 $obj->rrd_vertical = 'Packets per second'; 40 $obj->rrd_vertical = 'Packets per second';
49 break; 41 break;
50} 42}
51 43
52collectd_flush(ident_from_args($obj->args)); 44collectd_flush($obj->identifiers);
53
54$obj->rrd_graph(); 45$obj->rrd_graph();
55 46
56?> 47?>
diff --git a/plugin/irq.php b/plugin/irq.php
index d6b1e72..ba0e7cb 100644
--- a/plugin/irq.php
+++ b/plugin/irq.php
@@ -4,38 +4,21 @@
4 4
5require_once 'conf/common.inc.php'; 5require_once 'conf/common.inc.php';
6require_once 'type/GenericStacked.class.php'; 6require_once 'type/GenericStacked.class.php';
7require_once 'inc/collectd.inc.php';
7 8
8## LAYOUT 9## LAYOUT
9# irq/ 10# irq/
10# irq/irq-XX.rrd 11# irq/irq-XX.rrd
11 12
12# grouped 13$obj = new Type_GenericStacked($CONFIG['datadir']);
13require_once 'inc/collectd.inc.php';
14$tinstance = collectd_plugindetail($host, $plugin, 'ti');
15sort($tinstance);
16
17$obj = new Type_GenericStacked;
18$obj->datadir = $CONFIG['datadir'];
19$obj->args = array(
20 'host' => $host,
21 'plugin' => $plugin,
22 'pinstance' => $pinstance,
23 'type' => $type,
24 'tinstance' => $tinstance,
25);
26$obj->data_sources = array('value');
27$obj->ds_names = NULL;
28$obj->colors = NULL;
29$obj->width = $width; 14$obj->width = $width;
30$obj->heigth = $heigth; 15$obj->heigth = $heigth;
31$obj->seconds = $seconds;
32 16
33$obj->rrd_title = 'Interrupts'; 17$obj->rrd_title = 'Interrupts';
34$obj->rrd_vertical = 'IRQs/s'; 18$obj->rrd_vertical = 'IRQs/s';
35$obj->rrd_format = '%6.1lf'; 19$obj->rrd_format = '%6.1lf';
36 20
37collectd_flush(ident_from_args($obj->args)); 21collectd_flush($obj->identifiers);
38
39$obj->rrd_graph(); 22$obj->rrd_graph();
40 23
41?> 24?>
diff --git a/plugin/load.php b/plugin/load.php
index 523f14c..44baf45 100644
--- a/plugin/load.php
+++ b/plugin/load.php
@@ -9,15 +9,7 @@ require_once 'inc/collectd.inc.php';
9## LAYOUT 9## LAYOUT
10# load/load.rrd 10# load/load.rrd
11 11
12$obj = new Type_Default; 12$obj = new Type_Default($CONFIG['datadir']);
13$obj->datadir = $CONFIG['datadir'];
14$obj->args = array(
15 'host' => $host,
16 'plugin' => $plugin,
17 'pinstance' => $pinstance,
18 'type' => $type,
19 'tinstance' => $tinstance,
20);
21$obj->data_sources = array('shortterm', 'midterm', 'longterm'); 13$obj->data_sources = array('shortterm', 'midterm', 'longterm');
22$obj->ds_names = array( 14$obj->ds_names = array(
23 'shortterm' => ' 1 min', 15 'shortterm' => ' 1 min',
@@ -31,13 +23,11 @@ $obj->colors = array(
31); 23);
32$obj->width = $width; 24$obj->width = $width;
33$obj->heigth = $heigth; 25$obj->heigth = $heigth;
34$obj->seconds = $seconds;
35$obj->rrd_title = 'System load'; 26$obj->rrd_title = 'System load';
36$obj->rrd_vertical = 'System load'; 27$obj->rrd_vertical = 'System load';
37$obj->rrd_format = '%.2lf'; 28$obj->rrd_format = '%.2lf';
38 29
39collectd_flush(ident_from_args($obj->args)); 30collectd_flush($obj->identifiers);
40
41$obj->rrd_graph(); 31$obj->rrd_graph();
42 32
43?> 33?>
diff --git a/plugin/memory.php b/plugin/memory.php
index b0f6b73..ade242c 100644
--- a/plugin/memory.php
+++ b/plugin/memory.php
@@ -4,6 +4,7 @@
4 4
5require_once 'conf/common.inc.php'; 5require_once 'conf/common.inc.php';
6require_once 'type/GenericStacked.class.php'; 6require_once 'type/GenericStacked.class.php';
7require_once 'inc/collectd.inc.php';
7 8
8## LAYOUT 9## LAYOUT
9# memory/ 10# memory/
@@ -12,20 +13,7 @@ require_once 'type/GenericStacked.class.php';
12# memory/memory-free.rrd 13# memory/memory-free.rrd
13# memory/memory-used.rrd 14# memory/memory-used.rrd
14 15
15# grouped 16$obj = new Type_GenericStacked($CONFIG['datadir']);
16require_once 'inc/collectd.inc.php';
17$tinstance = collectd_plugindetail($host, $plugin, 'ti');
18
19$obj = new Type_GenericStacked;
20$obj->datadir = $CONFIG['datadir'];
21$obj->args = array(
22 'host' => $host,
23 'plugin' => $plugin,
24 'pinstance' => $pinstance,
25 'type' => $type,
26 'tinstance' => $tinstance,
27);
28$obj->data_sources = array('value');
29$obj->order = array('free', 'buffered', 'cached', 'used'); 17$obj->order = array('free', 'buffered', 'cached', 'used');
30$obj->ds_names = array( 18$obj->ds_names = array(
31 'free' => 'Free ', 19 'free' => 'Free ',
@@ -41,14 +29,12 @@ $obj->colors = array(
41); 29);
42$obj->width = $width; 30$obj->width = $width;
43$obj->heigth = $heigth; 31$obj->heigth = $heigth;
44$obj->seconds = $seconds;
45 32
46$obj->rrd_title = 'Physical memory utilization'; 33$obj->rrd_title = 'Physical memory utilization';
47$obj->rrd_vertical = 'Bytes'; 34$obj->rrd_vertical = 'Bytes';
48$obj->rrd_format = '%5.1lf%s'; 35$obj->rrd_format = '%5.1lf%s';
49 36
50collectd_flush(ident_from_args($obj->args)); 37collectd_flush($obj->identifiers);
51
52$obj->rrd_graph(); 38$obj->rrd_graph();
53 39
54?> 40?>
diff --git a/plugin/processes.php b/plugin/processes.php
index 65e1ddd..1487568 100644
--- a/plugin/processes.php
+++ b/plugin/processes.php
@@ -4,6 +4,7 @@
4 4
5require_once 'conf/common.inc.php'; 5require_once 'conf/common.inc.php';
6require_once 'type/GenericStacked.class.php'; 6require_once 'type/GenericStacked.class.php';
7require_once 'inc/collectd.inc.php';
7 8
8## LAYOUT 9## LAYOUT
9# processes/ 10# processes/
@@ -14,20 +15,7 @@ require_once 'type/GenericStacked.class.php';
14# processes/ps_state-running.rrd 15# processes/ps_state-running.rrd
15# processes/ps_state-sleeping.rrd 16# processes/ps_state-sleeping.rrd
16 17
17# grouped 18$obj = new Type_GenericStacked($CONFIG['datadir']);
18require_once 'inc/collectd.inc.php';
19$tinstance = collectd_plugindetail($host, $plugin, 'ti');
20
21$obj = new Type_GenericStacked;
22$obj->datadir = $CONFIG['datadir'];
23$obj->args = array(
24 'host' => $host,
25 'plugin' => $plugin,
26 'pinstance' => $pinstance,
27 'type' => $type,
28 'tinstance' => $tinstance,
29);
30$obj->data_sources = array('value');
31$obj->ds_names = array( 19$obj->ds_names = array(
32 'paging' => 'Paging ', 20 'paging' => 'Paging ',
33 'blocked' => 'Blocked ', 21 'blocked' => 'Blocked ',
@@ -46,14 +34,12 @@ $obj->colors = array(
46); 34);
47$obj->width = $width; 35$obj->width = $width;
48$obj->heigth = $heigth; 36$obj->heigth = $heigth;
49$obj->seconds = $seconds;
50 37
51$obj->rrd_title = 'Processes'; 38$obj->rrd_title = 'Processes';
52$obj->rrd_vertical = 'Processes'; 39$obj->rrd_vertical = 'Processes';
53$obj->rrd_format = '%5.1lf%s'; 40$obj->rrd_format = '%5.1lf%s';
54 41
55collectd_flush(ident_from_args($obj->args)); 42collectd_flush($obj->identifiers);
56
57$obj->rrd_graph(); 43$obj->rrd_graph();
58 44
59?> 45?>
diff --git a/plugin/sensors.php b/plugin/sensors.php
index 048f9f1..fda5432 100644
--- a/plugin/sensors.php
+++ b/plugin/sensors.php
@@ -4,6 +4,7 @@
4 4
5require_once 'conf/common.inc.php'; 5require_once 'conf/common.inc.php';
6require_once 'type/Default.class.php'; 6require_once 'type/Default.class.php';
7require_once 'inc/collectd.inc.php';
7 8
8## LAYOUT 9## LAYOUT
9# disk-XXXX/ 10# disk-XXXX/
@@ -11,49 +12,34 @@ require_once 'type/Default.class.php';
11# disk-XXXX/temerature-XXXX.rrd 12# disk-XXXX/temerature-XXXX.rrd
12# disk-XXXX/voltage-XXXX.rrd 13# disk-XXXX/voltage-XXXX.rrd
13 14
14# grouped 15$obj = new Type_Default($CONFIG['datadir']);
15require_once 'inc/collectd.inc.php';
16$tinstance = collectd_plugindetail($host, $plugin, 'ti', array('t' => $type));
17
18$obj = new Type_Default;
19$obj->datadir = $CONFIG['datadir'];
20$obj->args = array(
21 'host' => $host,
22 'plugin' => $plugin,
23 'pinstance' => $pinstance,
24 'type' => $type,
25 'tinstance' => $tinstance,
26);
27$obj->data_sources = array('value');
28$obj->ds_names = array( 16$obj->ds_names = array(
29 'value' => 'Value ', 17 'value' => 'Value ',
30); 18);
31$obj->width = $width; 19$obj->width = $width;
32$obj->heigth = $heigth; 20$obj->heigth = $heigth;
33$obj->seconds = $seconds; 21switch($obj->args['type']) {
34switch($type) {
35 case 'fanspeed': 22 case 'fanspeed':
36 $obj->colors = '00ff00'; 23 $obj->colors = '00ff00';
37 $obj->rrd_title = sprintf('Fanspeed (%s)', $pinstance); 24 $obj->rrd_title = sprintf('Fanspeed (%s)', $obj->args['pinstance']);
38 $obj->rrd_vertical = 'RPM'; 25 $obj->rrd_vertical = 'RPM';
39 $obj->rrd_format = '%5.1lf'; 26 $obj->rrd_format = '%5.1lf';
40 break; 27 break;
41 case 'temperature': 28 case 'temperature':
42 $obj->colors = '0000ff'; 29 $obj->colors = '0000ff';
43 $obj->rrd_title = sprintf('Temperature (%s)', $pinstance); 30 $obj->rrd_title = sprintf('Temperature (%s)', $obj->args['pinstance']);
44 $obj->rrd_vertical = 'Celius'; 31 $obj->rrd_vertical = 'Celius';
45 $obj->rrd_format = '%5.1lf%s'; 32 $obj->rrd_format = '%5.1lf%s';
46 break; 33 break;
47 case 'voltage': 34 case 'voltage':
48 $obj->colors = 'ff0000'; 35 $obj->colors = 'ff0000';
49 $obj->rrd_title = sprintf('Voltage (%s)', $pinstance); 36 $obj->rrd_title = sprintf('Voltage (%s)', $obj->args['pinstance']);
50 $obj->rrd_vertical = 'Volt'; 37 $obj->rrd_vertical = 'Volt';
51 $obj->rrd_format = '%5.1lf'; 38 $obj->rrd_format = '%5.1lf';
52 break; 39 break;
53} 40}
54 41
55collectd_flush(ident_from_args($obj->args)); 42collectd_flush($obj->identifiers);
56
57$obj->rrd_graph(); 43$obj->rrd_graph();
58 44
59?> 45?>
diff --git a/plugin/swap.php b/plugin/swap.php
index 638ddc3..e1527cc 100644
--- a/plugin/swap.php
+++ b/plugin/swap.php
@@ -4,6 +4,7 @@
4 4
5require_once 'conf/common.inc.php'; 5require_once 'conf/common.inc.php';
6require_once 'type/GenericStacked.class.php'; 6require_once 'type/GenericStacked.class.php';
7require_once 'inc/collectd.inc.php';
7 8
8## LAYOUT 9## LAYOUT
9# swap/ 10# swap/
@@ -11,25 +12,12 @@ require_once 'type/GenericStacked.class.php';
11# swap/swap-free.rrd 12# swap/swap-free.rrd
12# swap/swap-used.rrd 13# swap/swap-used.rrd
13 14
14if ($type == 'swap_io') { 15if ($_GET['t'] == 'swap_io') {
15 die_img('Error: swap_io not supported yet'); 16 die_img('Error: swap_io not supported yet');
16 exit; 17 exit;
17} 18}
18 19
19# grouped 20$obj = new Type_GenericStacked($CONFIG['datadir']);
20require_once 'inc/collectd.inc.php';
21$tinstance = collectd_plugindetail($host, $plugin, 'ti', array('t' => $type));
22
23$obj = new Type_GenericStacked;
24$obj->datadir = $CONFIG['datadir'];
25$obj->args = array(
26 'host' => $host,
27 'plugin' => $plugin,
28 'pinstance' => $pinstance,
29 'type' => $type,
30 'tinstance' => $tinstance,
31);
32$obj->data_sources = array('value');
33$obj->order = array('free', 'cached', 'used'); 21$obj->order = array('free', 'cached', 'used');
34$obj->ds_names = array( 22$obj->ds_names = array(
35 'free' => 'Free ', 23 'free' => 'Free ',
@@ -43,14 +31,12 @@ $obj->colors = array(
43); 31);
44$obj->width = $width; 32$obj->width = $width;
45$obj->heigth = $heigth; 33$obj->heigth = $heigth;
46$obj->seconds = $seconds;
47 34
48$obj->rrd_title = 'Swap utilization'; 35$obj->rrd_title = 'Swap utilization';
49$obj->rrd_vertical = 'Bytes'; 36$obj->rrd_vertical = 'Bytes';
50$obj->rrd_format = '%5.1lf%s'; 37$obj->rrd_format = '%5.1lf%s';
51 38
52collectd_flush(ident_from_args($obj->args)); 39collectd_flush($obj->identifiers);
53
54$obj->rrd_graph(); 40$obj->rrd_graph();
55 41
56?> 42?>
diff --git a/plugin/users.php b/plugin/users.php
index 5ebee43..d94a8c1 100644
--- a/plugin/users.php
+++ b/plugin/users.php
@@ -9,15 +9,7 @@ require_once 'inc/collectd.inc.php';
9## LAYOUT 9## LAYOUT
10# users/users.rrd 10# users/users.rrd
11 11
12$obj = new Type_Default; 12$obj = new Type_Default($CONFIG['datadir']);
13$obj->datadir = $CONFIG['datadir'];
14$obj->args = array(
15 'host' => $host,
16 'plugin' => $plugin,
17 'pinstance' => $pinstance,
18 'type' => $type,
19 'tinstance' => $tinstance,
20);
21$obj->data_sources = array('users'); 13$obj->data_sources = array('users');
22$obj->ds_names = array( 14$obj->ds_names = array(
23 'users' => 'Users', 15 'users' => 'Users',
@@ -27,13 +19,11 @@ $obj->colors = array(
27); 19);
28$obj->width = $width; 20$obj->width = $width;
29$obj->heigth = $heigth; 21$obj->heigth = $heigth;
30$obj->seconds = $seconds;
31$obj->rrd_title = 'Users'; 22$obj->rrd_title = 'Users';
32$obj->rrd_vertical = 'Users'; 23$obj->rrd_vertical = 'Users';
33$obj->rrd_format = '%.1lf'; 24$obj->rrd_format = '%.1lf';
34 25
35collectd_flush(ident_from_args($obj->args)); 26collectd_flush($obj->identifiers);
36
37$obj->rrd_graph(); 27$obj->rrd_graph();
38 28
39?> 29?>
diff --git a/type/Default.class.php b/type/Default.class.php
index 6b1ab5c..0c992e2 100644
--- a/type/Default.class.php
+++ b/type/Default.class.php
@@ -5,7 +5,8 @@
5class Type_Default { 5class Type_Default {
6 var $datadir; 6 var $datadir;
7 var $args; 7 var $args;
8 var $data_sources; 8 var $seconds;
9 var $data_sources = array('value');
9 var $order; 10 var $order;
10 var $ds_names; 11 var $ds_names;
11 var $colors; 12 var $colors;
@@ -16,6 +17,29 @@ class Type_Default {
16 var $width; 17 var $width;
17 var $heigth; 18 var $heigth;
18 19
20 var $files;
21 var $tinstances;
22 var $identifiers;
23
24 function __construct($datadir) {
25 $this->datadir = $datadir;
26 $this->parse_get();
27 $this->rrd_files();
28 $this->identifiers = $this->file2identifier($this->files);
29 }
30
31 # parse $_GET values
32 function parse_get() {
33 $this->args = array(
34 'host' => $_GET['h'],
35 'plugin' => $_GET['p'],
36 'pinstance' => $_GET['pi'],
37 'type' => $_GET['t'],
38 'tinstance' => $_GET['ti'],
39 );
40 $this->seconds = $_GET['s'];
41 }
42
19 function validate_color($color) { 43 function validate_color($color) {
20 if (!preg_match('/^[0-9a-f]{6}$/', $color)) 44 if (!preg_match('/^[0-9a-f]{6}$/', $color))
21 return '000000'; 45 return '000000';
@@ -46,26 +70,41 @@ class Type_Default {
46 return $c[r].$c[g].$c[b]; 70 return $c[r].$c[g].$c[b];
47 } 71 }
48 72
49 function identifier($host, $plugin, $pinst, $type, $tinst) { 73 function rrd_files() {
50 $identifier = sprintf('%s/%s%s%s/%s%s%s', $host, 74 $files = $this->get_filenames();
51 $plugin, strlen($pinst) ? '-' : '', $pinst,
52 $type, strlen($tinst) ? '-' : '', $tinst);
53 75
54 if (is_file($this->datadir.'/'.$identifier.'.rrd')) 76 foreach($files as $filename) {
55 return $identifier; 77 preg_match("#^$this->datadir/{$this->args['host']}/[\w\d]+-?([\w\d-]+)?/[\w\d]+-?([\w\d-]+)?\.rrd#", $filename, $matches);
56 else 78
57 return FALSE; 79 $this->tinstances[] = $matches[2];
80 $this->files[$matches[2]] = $filename;
81 }
82
83 sort($this->tinstances);
84 ksort($this->files);
58 } 85 }
59 86
60 function get_filename($tinstance=NULL) { 87 function get_filenames() {
61 if (!is_array($this->args['tinstance']) && $tinstance == NULL) 88 $identifier = sprintf('%s/%s%s%s/%s%s%s', $this->args['host'],
62 $tinstance = $this->args['tinstance']; 89 $this->args['plugin'], strlen($this->args['pinstance']) ? '-' : '', $this->args['pinstance'],
90 $this->args['type'], strlen($this->args['tinstance']) ? '-' : '', $this->args['tinstance']);
91
92 $wildcard = strlen($this->args['tinstance']) ? '' : '*';
63 93
64 $identifier = $this->identifier($this->args['host'], 94 $files = glob($this->datadir .'/'. $identifier . $wildcard . '.rrd');
65 $this->args['plugin'], $this->args['pinstance'],
66 $this->args['type'], $tinstance);
67 95
68 return $this->datadir.'/'.$identifier.'.rrd'; 96 return $files;
97 }
98
99 function file2identifier($files) {
100 foreach($files as $key => $file) {
101 if (is_file($file)) {
102 $files[$key] = preg_replace("#^$this->datadir/#", '', $files[$key]);
103 $files[$key] = preg_replace('#\.rrd$#', '', $files[$key]);
104 }
105 }
106
107 return $files;
69 } 108 }
70 109
71 function rrd_graph($debug=false) { 110 function rrd_graph($debug=false) {
@@ -96,48 +135,57 @@ class Type_Default {
96 return $rrdgraph; 135 return $rrdgraph;
97 } 136 }
98 137
99 function rrd_gen_graph() { 138 function rrd_get_sources() {
100 $filename = $this->get_filename(); 139 # is the source spread over multiple files?
140 if (is_array($this->files) && count($this->files)>1) {
141 # and must it be ordered?
142 if (is_array($this->order)) {
143 $this->tinstances = array_intersect($this->order, $this->tinstances);
144 }
145 # use tinstances as sources
146 $sources = $this->tinstances;
147 }
148 # or one file with multiple data_sources
149 else {
150 # use data_sources as sources
151 $sources = $this->data_sources;
152 }
153 return $sources;
154 }
101 155
156 function rrd_gen_graph() {
102 $rrdgraph = $this->rrd_options(); 157 $rrdgraph = $this->rrd_options();
103 158
104 if (is_array($this->args['tinstance'])) 159 $sources = $this->rrd_get_sources();
105 $array = is_array($this->order) ? $this->order : $this->args['tinstance'];
106 else
107 $array = $this->data_sources;
108 160
109 $i=0; 161 $i=0;
110 foreach ($array as $value) { 162 foreach ($this->tinstances as $tinstance) {
111 if (is_array($this->args['tinstance'])) { 163 foreach ($this->data_sources as $ds) {
112 $filename = $this->get_filename($value); 164 $rrdgraph[] = sprintf('DEF:min_%s=%s:%s:MIN', $sources[$i], $this->files[$tinstance], $ds);
113 $ds = $this->data_sources[0]; 165 $rrdgraph[] = sprintf('DEF:avg_%s=%s:%s:AVERAGE', $sources[$i], $this->files[$tinstance], $ds);
114 } else { 166 $rrdgraph[] = sprintf('DEF:max_%s=%s:%s:MAX', $sources[$i], $this->files[$tinstance], $ds);
115 $filename = $this->get_filename(); 167 $i++;
116 $ds = $value;
117 } 168 }
118 $rrdgraph[] = sprintf('DEF:min%s=%s:%s:MIN', $i, $filename, $ds);
119 $rrdgraph[] = sprintf('DEF:avg%s=%s:%s:AVERAGE', $i, $filename, $ds);
120 $rrdgraph[] = sprintf('DEF:max%s=%s:%s:MAX', $i, $filename, $ds);
121 $i++;
122 } 169 }
123 170
124 if (!is_array($this->args['tinstance'])) { 171 if(count($this->files)<=1) {
125 $rrdgraph[] = sprintf('AREA:max0#%s', $this->get_faded_color($this->colors[$this->data_sources[0]])); 172 foreach ($sources as $source) {
126 $rrdgraph[] = sprintf('AREA:min0#%s', 'ffffff'); 173 $rrdgraph[] = sprintf('AREA:max_%s#%s', $source, $this->get_faded_color($this->colors[$source]));
174 $rrdgraph[] = sprintf('AREA:min_%s#%s', $source, 'ffffff');
175 break; # only 1 area to draw
176 }
127 } 177 }
128 178
129 $i=0; 179 foreach ($sources as $source) {
130 foreach ($array as $value) { 180 $dsname = $this->ds_names[$source] != '' ? $this->ds_names[$source] : $source;
131 $dsname = $this->ds_names[$value] != '' ? $this->ds_names[$value] : $value; 181 $color = is_array($this->colors) ? $this->colors[$source]: $this->colors;
132 $color = is_array($this->colors) ? $this->colors[$value]: $this->colors; 182 $rrdgraph[] = sprintf('LINE1:avg_%s#%s:\'%s\'', $source, $this->validate_color($color), $dsname);
133 $rrdgraph[] = sprintf('LINE1:avg%d#%s:\'%s\'', $i, $this->validate_color($color), $dsname); 183 $rrdgraph[] = sprintf('GPRINT:min_%s:MIN:\'%s Min,\'', $source, $this->rrd_format);
134 $rrdgraph[] = sprintf('GPRINT:min%d:MIN:\'%s Min,\'', $i, $this->rrd_format); 184 $rrdgraph[] = sprintf('GPRINT:avg_%s:AVERAGE:\'%s Avg,\'', $source, $this->rrd_format);
135 $rrdgraph[] = sprintf('GPRINT:avg%d:AVERAGE:\'%s Avg,\'', $i, $this->rrd_format); 185 $rrdgraph[] = sprintf('GPRINT:max_%s:MAX:\'%s Max,\'', $source, $this->rrd_format);
136 $rrdgraph[] = sprintf('GPRINT:max%d:MAX:\'%s Max,\'', $i, $this->rrd_format); 186 $rrdgraph[] = sprintf('GPRINT:avg_%s:LAST:\'%s Last\\l\'', $source, $this->rrd_format);
137 $rrdgraph[] = sprintf('GPRINT:avg%d:LAST:\'%s Last\\l\'', $i, $this->rrd_format);
138 $i++;
139 } 187 }
140 188
141 return $rrdgraph; 189 return $rrdgraph;
142 } 190 }
143} 191}
diff --git a/type/GenericIO.class.php b/type/GenericIO.class.php
index e91cb16..ee04316 100644
--- a/type/GenericIO.class.php
+++ b/type/GenericIO.class.php
@@ -5,45 +5,54 @@ require_once 'Default.class.php';
5class Type_GenericIO extends Type_Default { 5class Type_GenericIO extends Type_Default {
6 6
7 function rrd_gen_graph() { 7 function rrd_gen_graph() {
8 $filename = $this->get_filename();
9
10 $rrdgraph = $this->rrd_options(); 8 $rrdgraph = $this->rrd_options();
11 9
10 $sources = $this->rrd_get_sources();
11
12 if ($this->scale) 12 if ($this->scale)
13 $raw = '_raw'; 13 $raw = '_raw';
14 foreach($this->data_sources as $ds) { 14 $i=0;
15 $rrdgraph[] = sprintf('DEF:min_%s%s=%s:%s:MIN', $ds, $raw, $filename, $ds); 15 foreach ($this->tinstances as $tinstance) {
16 $rrdgraph[] = sprintf('DEF:avg_%s%s=%s:%s:AVERAGE', $ds, $raw, $filename, $ds); 16 foreach ($this->data_sources as $ds) {
17 $rrdgraph[] = sprintf('DEF:max_%s%s=%s:%s:MAX', $ds, $raw, $filename, $ds); 17 $rrdgraph[] = sprintf('DEF:min_%s%s=%s:%s:MIN', $sources[$i], $raw, $this->files[$tinstance], $ds);
18 $rrdgraph[] = sprintf('DEF:avg_%s%s=%s:%s:AVERAGE', $sources[$i], $raw, $this->files[$tinstance], $ds);
19 $rrdgraph[] = sprintf('DEF:max_%s%s=%s:%s:MAX', $sources[$i], $raw, $this->files[$tinstance], $ds);
20 $i++;
21 }
18 } 22 }
19 if ($this->scale) { 23 if ($this->scale) {
20 foreach($this->data_sources as $ds) { 24 $i=0;
21 $rrdgraph[] = sprintf('CDEF:min_%s=min_%s_raw,%s,*', $ds, $ds, $this->scale); 25 foreach ($this->tinstances as $tinstance) {
22 $rrdgraph[] = sprintf('CDEF:avg_%s=avg_%s_raw,%s,*', $ds, $ds, $this->scale); 26 foreach ($this->data_sources as $ds) {
23 $rrdgraph[] = sprintf('CDEF:max_%s=max_%s_raw,%s,*', $ds, $ds, $this->scale); 27 $rrdgraph[] = sprintf('CDEF:min_%s=min_%1$s_raw,%s,*', $sources[$i], $this->scale);
28 $rrdgraph[] = sprintf('CDEF:avg_%s=avg_%1$s_raw,%s,*', $sources[$i], $this->scale);
29 $rrdgraph[] = sprintf('CDEF:max_%s=max_%1$s_raw,%s,*', $sources[$i], $this->scale);
30 $i++;
31 }
24 } 32 }
25 } 33 }
26 34
27 $rrdgraph[] = sprintf('CDEF:overlap=avg_%s,avg_%s,LT,avg_%1$s,avg_%2$s,IF', 35 $rrdgraph[] = sprintf('CDEF:overlap=avg_%s,avg_%s,LT,avg_%1$s,avg_%2$s,IF',
28 $this->data_sources[0], $this->data_sources[1]); 36 $sources[0], $sources[1]);
29 37
30 foreach($this->data_sources as $ds) { 38 foreach($sources as $source) {
31 $rrdgraph[] = sprintf('AREA:avg_%s#%s', $ds, $this->get_faded_color($this->colors[$ds])); 39 $rrdgraph[] = sprintf('AREA:avg_%s#%s', $source, $this->get_faded_color($this->colors[$source]));
32 } 40 }
33 41
34 $rrdgraph[] = sprintf('AREA:overlap#%s', 42 $rrdgraph[] = sprintf('AREA:overlap#%s',
35 $this->get_faded_color( 43 $this->get_faded_color(
36 $this->get_faded_color($this->colors[$this->data_sources[0]]), 44 $this->get_faded_color($this->colors[$sources[0]]),
37 $this->get_faded_color($this->colors[$this->data_sources[1]]) 45 $this->get_faded_color($this->colors[$sources[1]])
38 ) 46 )
39 ); 47 );
40 48
41 foreach($this->data_sources as $ds) { 49 foreach($sources as $source) {
42 $rrdgraph[] = sprintf('LINE1:avg_%s#%s:\'%s\'', $ds, $this->colors[$ds], $this->ds_names[$ds]); 50 $dsname = $this->ds_names[$source] != '' ? $this->ds_names[$source] : $source;
43 $rrdgraph[] = sprintf('GPRINT:min_%s:MIN:\'%s Min,\'', $ds, $this->rrd_format); 51 $rrdgraph[] = sprintf('LINE1:avg_%s#%s:\'%s\'', $source, $this->colors[$source], $dsname);
44 $rrdgraph[] = sprintf('GPRINT:avg_%s:AVERAGE:\'%s Avg,\'', $ds, $this->rrd_format); 52 $rrdgraph[] = sprintf('GPRINT:min_%s:MIN:\'%s Min,\'', $source, $this->rrd_format);
45 $rrdgraph[] = sprintf('GPRINT:max_%s:MAX:\'%s Max,\'', $ds, $this->rrd_format); 53 $rrdgraph[] = sprintf('GPRINT:avg_%s:AVERAGE:\'%s Avg,\'', $source, $this->rrd_format);
46 $rrdgraph[] = sprintf('GPRINT:avg_%s:LAST:\'%s Last\l\'', $ds, $this->rrd_format); 54 $rrdgraph[] = sprintf('GPRINT:max_%s:MAX:\'%s Max,\'', $source, $this->rrd_format);
55 $rrdgraph[] = sprintf('GPRINT:avg_%s:LAST:\'%s Last\l\'', $source, $this->rrd_format);
47 } 56 }
48 57
49 return $rrdgraph; 58 return $rrdgraph;
diff --git a/type/GenericStacked.class.php b/type/GenericStacked.class.php
index f024336..7595385 100644
--- a/type/GenericStacked.class.php
+++ b/type/GenericStacked.class.php
@@ -3,56 +3,41 @@
3require_once 'Default.class.php'; 3require_once 'Default.class.php';
4 4
5class Type_GenericStacked extends Type_Default { 5class Type_GenericStacked extends Type_Default {
6 6
7 function rrd_gen_graph() { 7 function rrd_gen_graph() {
8 $rrdgraph = $this->rrd_options(); 8 $rrdgraph = $this->rrd_options();
9 9
10 if (is_array($this->args['tinstance'])) 10 $sources = $this->rrd_get_sources();
11 if (is_array($this->order))
12 $array = array_intersect($this->order, $this->args['tinstance']);
13 else
14 $array = $this->args['tinstance'];
15 else
16 $array = $this->data_sources;
17 11
18 $i=0; 12 $i=0;
19 foreach ($array as $value) { 13 foreach ($this->tinstances as $tinstance) {
20 if (is_array($this->args['tinstance'])) { 14 foreach ($this->data_sources as $ds) {
21 $filename = $this->get_filename($value); 15 $rrdgraph[] = sprintf('DEF:min_%s=%s:%s:MIN', $sources[$i], $this->files[$tinstance], $ds);
22 $ds = $this->data_sources[0]; 16 $rrdgraph[] = sprintf('DEF:avg_%s=%s:%s:AVERAGE', $sources[$i], $this->files[$tinstance], $ds);
23 } else { 17 $rrdgraph[] = sprintf('DEF:max_%s=%s:%s:MAX', $sources[$i], $this->files[$tinstance], $ds);
24 $filename = $this->get_filename(); 18 $i++;
25 $ds = $value;
26 } 19 }
27 $rrdgraph[] = sprintf('DEF:min%s=%s:%s:MIN', $i, $filename, $ds);
28 $rrdgraph[] = sprintf('DEF:avg%s=%s:%s:AVERAGE', $i, $filename, $ds);
29 $rrdgraph[] = sprintf('DEF:max%s=%s:%s:MAX', $i, $filename, $ds);
30 $i++;
31 } 20 }
32 21
33 for ($i=count($array)-1 ; $i>=0 ; $i--) { 22 for ($i=count($sources)-1 ; $i>=0 ; $i--) {
34 if ($i == (count($array)-1)) 23 if ($i == (count($sources)-1))
35 $rrdgraph[] = sprintf('CDEF:cdef%d=avg%d', $i, $i); 24 $rrdgraph[] = sprintf('CDEF:area_%s=avg_%1$s', $sources[$i]);
36 else 25 else
37 $rrdgraph[] = sprintf('CDEF:cdef%d=cdef%d,avg%d,+', $i, $i+1, $i); 26 $rrdgraph[] = sprintf('CDEF:area_%s=area_%s,avg_%1$s,+', $sources[$i], $sources[$i+1]);
38 } 27 }
39 28
40 $i=0; 29 foreach ($sources as $source) {
41 foreach ($array as $value) { 30 $color = $this->get_faded_color($this->colors[$source]);
42 $color = $this->get_faded_color($this->colors[$value]); 31 $rrdgraph[] = sprintf('AREA:area_%s#%s', $source, $color);
43 $rrdgraph[] = sprintf('AREA:cdef%d#%s', $i, $color);
44 $i++;
45 } 32 }
46 33
47 $i=0; 34 foreach ($sources as $source) {
48 foreach ($array as $value) { 35 $dsname = $this->ds_names[$source] != '' ? $this->ds_names[$source] : $source;
49 $dsname = $this->ds_names[$value] != '' ? $this->ds_names[$value] : $value; 36 $rrdgraph[] = sprintf('LINE1:area_%s#%s:\'%s\'', $source, $this->validate_color($this->colors[$source]), $dsname);
50 $rrdgraph[] = sprintf('LINE1:cdef%d#%s:\'%s\'', $i, $this->validate_color($this->colors[$value]), $dsname); 37 $rrdgraph[] = sprintf('GPRINT:min_%s:MIN:\'%s Min,\'', $source, $this->rrd_format);
51 $rrdgraph[] = sprintf('GPRINT:min%d:MIN:\'%s Min,\'', $i, $this->rrd_format); 38 $rrdgraph[] = sprintf('GPRINT:avg_%s:AVERAGE:\'%s Avg,\'', $source, $this->rrd_format);
52 $rrdgraph[] = sprintf('GPRINT:avg%d:AVERAGE:\'%s Avg,\'', $i, $this->rrd_format); 39 $rrdgraph[] = sprintf('GPRINT:max_%s:MAX:\'%s Max,\'', $source, $this->rrd_format);
53 $rrdgraph[] = sprintf('GPRINT:max%d:MAX:\'%s Max,\'', $i, $this->rrd_format); 40 $rrdgraph[] = sprintf('GPRINT:avg_%s:LAST:\'%s Last\\l\'', $source, $this->rrd_format);
54 $rrdgraph[] = sprintf('GPRINT:avg%d:LAST:\'%s Last\\l\'', $i, $this->rrd_format);
55 $i++;
56 } 41 }
57 42
58 return $rrdgraph; 43 return $rrdgraph;