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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
|
<?php
require_once 'conf/common.inc.php';
require_once 'inc/functions.inc.php';
require_once 'inc/collectd.inc.php';
$plugin = validate_get(GET('p'), 'plugin');
$type = validate_get(GET('t'), 'type');
$width = GET('x') ? filter_var(GET('x'), FILTER_VALIDATE_INT, array(
'min_range' => 10,
'max_range' => $CONFIG['max-width']
)) : $CONFIG['width'];
$height = GET('y') ? filter_var(GET('y'), FILTER_VALIDATE_INT, array(
'min_range' => 10,
'max_range' => $CONFIG['max-height']
)) : $CONFIG['height'];
if ($width === NULL || $height === NULL) {
error_log(sprintf('Invalid image dimension, x="%s", y="%s"',
urlencode(GET('x')),
urlencode(GET('y'))));
error_image();
}
if (validate_get(GET('h'), 'host') === NULL) {
error_log('Invalid host: "' . urlencode(GET('h')) . '"');
error_image();
}
$typesdb = parse_typesdb_file($CONFIG['typesdb']);
if ($plugin == 'aggregation') {
$pi = explode("-", GET('pi'));
$plugin = $_GET['p'] = validate_get($pi[0], 'plugin');
}
# plugin json
if (function_exists('json_decode') && file_exists('plugin/'.$plugin.'.json')) {
$json = file_get_contents('plugin/'.$plugin.'.json');
$plugin_json = json_decode($json, true);
if (is_null($plugin_json))
error_log('CGP Error: invalid json in plugin/'.$plugin.'.json');
}
if (!isset($plugin_json[$type]['type']))
$plugin_json[$type]['type'] = 'default';
switch ($plugin_json[$type]['type']) {
case 'stacked':
require_once 'type/GenericStacked.class.php';
$obj = new Type_GenericStacked($CONFIG, $_GET);
break;
case 'io':
require_once 'type/GenericIO.class.php';
$obj = new Type_GenericIO($CONFIG, $_GET);
break;
case 'uptime':
require_once 'type/Uptime.class.php';
$obj = new Type_Uptime($CONFIG, $_GET);
break;
default:
require_once 'type/Default.class.php';
$obj = new Type_Default($CONFIG, $_GET);
break;
}
if (isset($typesdb[$type])) {
$obj->data_sources = array();
foreach ($typesdb[$type] as $ds => $property) {
$obj->data_sources[] = $ds;
}
}
if (isset($plugin_json[$type]['legend'])) {
$obj->order = array();
foreach ($plugin_json[$type]['legend'] as $rrd => $property) {
$obj->order[] = $rrd;
$obj->legend[$rrd] = isset($property['name']) ? $property['name'] : $rrd;
if (isset($property['color']))
$obj->colors[$rrd] = $property['color'];
}
}
if (isset($plugin_json[$type]['title'])) {
$obj->rrd_title = str_replace(
array('{{PI}}', '{{TI}}', '{{HOST}}'),
array(GET('pi'), GET('ti'), GET('h')),
$plugin_json[$type]['title']
);
}
if (isset($plugin_json[$type]['vertical'])) {
$obj->rrd_vertical = $plugin_json[$type]['vertical'];
$obj->rrd_vertical = str_replace('{{ND}}', ucfirst($CONFIG['network_datasize']), $obj->rrd_vertical);
}
if (isset($plugin_json[$type]['rrdtool_opts'])) {
$rrdtool_extra_opts = $plugin_json[$type]['rrdtool_opts'];
# compatibility with plugins which specify arguments as string
if (is_string($rrdtool_extra_opts)) {
$rrdtool_extra_opts = explode(' ', $rrdtool_extra_opts);
}
$obj->rrdtool_opts = array_merge(
$obj->rrdtool_opts,
$rrdtool_extra_opts
);
}
if (isset($plugin_json[$type]['datasize']) and $plugin_json[$type]['datasize'])
$obj->scale = $CONFIG['network_datasize'] == 'bits' ? 8 : 1;
if ($type == 'if_octets')
$obj->percentile = $CONFIG['percentile'];
if (isset($plugin_json[$type]['scale']))
$obj->scale = $plugin_json[$type]['scale'];
if (isset($plugin_json[$type]['base']))
$obj->base = $plugin_json[$type]['base'];
if (isset($plugin_json[$type]['legend_format']))
$obj->rrd_format = $plugin_json[$type]['legend_format'];
$obj->rrd_graph();
|