diff options
| -rw-r--r-- | README.md | 78 | ||||
| -rw-r--r-- | doc/INSTALL | 3 | ||||
| -rw-r--r-- | doc/nginx.conf | 41 | ||||
| -rw-r--r-- | js/RrdCmdLine.js | 12 |
4 files changed, 126 insertions, 8 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..d4f3c52 --- /dev/null +++ b/README.md | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | Collectd Graph Panel (CGP) | ||
| 2 | ========================== | ||
| 3 | Collectd Graph Panel (CGP) is a graphical web-based front-end for visualizing | ||
| 4 | RRD collected by [collectd][collectd], written in the PHP language. | ||
| 5 | |||
| 6 | The latest version of CGP can be found on https://github.com/pommi/CGP. When you | ||
| 7 | have improvements or fixes, do not hesitate to send a pull request! | ||
| 8 | |||
| 9 | Requirements | ||
| 10 | ------------ | ||
| 11 | CGP has the following hard requirements: | ||
| 12 | |||
| 13 | - Web server with PHP 5.0 support. | ||
| 14 | - `rrdtool` program, expected at `/usr/bin/rrdtool` (can be changed in the | ||
| 15 | configuration file, `$CONFIG['rrdtool']`). | ||
| 16 | - `shell_exec` must not be disabled through the [`disable_functions` ini | ||
| 17 | directive][ini.disable_functions]. It must allow execution of the `rrdtool` | ||
| 18 | program. | ||
| 19 | |||
| 20 | The following software is optional, but nevertheless highly recommended: | ||
| 21 | |||
| 22 | - [PHP JSON extension][php-json]: for a finer representation of the data in the | ||
| 23 | graph. These representations can be found in the `plugins/` directory. | ||
| 24 | - Web browser with `canvas` support such as IE 9+, Firefox, Chrome, Opera 9+. | ||
| 25 | Optional unless you use `$CONFIG['graph_type'] = 'canvas'`. | ||
| 26 | |||
| 27 | Installation and configuration | ||
| 28 | ------------------------------ | ||
| 29 | CGP is designed to run out of the box. If you want to modify some configuration | ||
| 30 | settings, please create `conf/config.local.php` to overrule the settings from | ||
| 31 | `conf/config.php`. | ||
| 32 | |||
| 33 | In a default configuration, the server will execute `rrdtool` to draw PNG | ||
| 34 | graphs. These pictures are static and can put quite a burden on the server. For | ||
| 35 | more flexibility, set `$CONFIG['graph_type'] = 'canvas'`. This will make web | ||
| 36 | browsers download the RRD files and allows the user to zoom and move though the | ||
| 37 | history using their pointer device. | ||
| 38 | |||
| 39 | See [doc/nginx.conf](doc/nginx.conf) for an example configuration for the nginx | ||
| 40 | web server. The `.htaccess` file in the top-level directory can serve as a guide | ||
| 41 | for Apache configuration. | ||
| 42 | |||
| 43 | Performance tips | ||
| 44 | ---------------- | ||
| 45 | Although the default configuration "just works", you can further improve your | ||
| 46 | set up to reduce data usage and CPU time: | ||
| 47 | |||
| 48 | - Enable gzip compression and caching (for at least RRD data files, SVG | ||
| 49 | pictures and Javascript files. The canvas graph type downloads each RRD data | ||
| 50 | file which are quite large (considering their quantity). Savings of 70% - 80% | ||
| 51 | can be achieved for RRD data files. | ||
| 52 | - Set `$CONFIG['rrd_url']` to a directory directly accessible by the web server | ||
| 53 | such that it can provide better cache control than PHP. | ||
| 54 | - Instead of the default `png` graph type, consider `canvas` to relieve the web | ||
| 55 | server. This moves the image processing to the client that views the picture. | ||
| 56 | - Disable the `open_basedir` setting of PHP, or at least put the RRD data dir | ||
| 57 | in the beginning. When enabled, PHP (at least 5.5.14) scans though every | ||
| 58 | path component which is quite costly if you have over 100 RRD files and a | ||
| 59 | deep directory hierarchy. 17 seconds was observed for four path components | ||
| 60 | (with `.` at the end), this dropped down to 4.8 seconds when prepending the | ||
| 61 | RRD data directory to the beginning. When disabled, processing took less than | ||
| 62 | a second. | ||
| 63 | |||
| 64 | License | ||
| 65 | ------- | ||
| 66 | CGP is released under the terms of GPL version 3. See [doc/LICENSE](doc/LICENSE) | ||
| 67 | for the full license text. | ||
| 68 | |||
| 69 | Acknowledgements | ||
| 70 | ---------------- | ||
| 71 | CGP is authored by Pim van den Berg with contributions from many other people. | ||
| 72 | |||
| 73 | Canvas support depends on jsrrdgraph by Manuel Luis, | ||
| 74 | https://github.com/manuelluis/jsrrdgraph | ||
| 75 | |||
| 76 | [collectd]: http://collectd.org/ | ||
| 77 | [ini.disable_functions]: http://php.net/ini.core#ini.disable-functions | ||
| 78 | [php-json]: http://php.net/json | ||
diff --git a/doc/INSTALL b/doc/INSTALL deleted file mode 100644 index c0da959..0000000 --- a/doc/INSTALL +++ /dev/null | |||
| @@ -1,3 +0,0 @@ | |||
| 1 | CGP is designed to run out of the box. If you want to modify some | ||
| 2 | configuration settings, please create conf/config.local.php to overrule | ||
| 3 | the settings from conf/config.php. | ||
diff --git a/doc/nginx.conf b/doc/nginx.conf new file mode 100644 index 0000000..d2efa46 --- /dev/null +++ b/doc/nginx.conf | |||
| @@ -0,0 +1,41 @@ | |||
| 1 | server { | ||
| 2 | listen 80; | ||
| 3 | server_name localhost; | ||
| 4 | |||
| 5 | root /srv/http; | ||
| 6 | index index.php; | ||
| 7 | |||
| 8 | # This catches requests other than /CGP/rrd/ and PHP (see below) | ||
| 9 | location /CGP/ { | ||
| 10 | gzip on; | ||
| 11 | gzip_types "application/javascript text/css"; | ||
| 12 | # The static files do not change often, cache hint 1 month | ||
| 13 | expires 1M; | ||
| 14 | } | ||
| 15 | |||
| 16 | # Assume that CGP is located at /srv/http/CGP/, directly serve the RRD data | ||
| 17 | # files for use with the canvas graph type. Add compression to reduce data | ||
| 18 | # usage by 70% - 80%. | ||
| 19 | location /CGP/rrd/ { | ||
| 20 | alias /var/lib/collectd/rrd/; | ||
| 21 | gzip on; | ||
| 22 | gzip_types "*"; | ||
| 23 | # Cache hint: browser can recheck after 10 minutes | ||
| 24 | expires 10m; | ||
| 25 | #gzip_comp_level 3; | ||
| 26 | } | ||
| 27 | |||
| 28 | # Process PHP files through PHP-FPM | ||
| 29 | location ~ \.php$ { | ||
| 30 | try_files $uri =404; | ||
| 31 | fastcgi_pass unix:/run/php5-fpm.sock; | ||
| 32 | fastcgi_index index.php; | ||
| 33 | fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | ||
| 34 | include fastcgi_params; | ||
| 35 | } | ||
| 36 | |||
| 37 | # Disallow access to hidden files and directories (such as .git/) | ||
| 38 | location ~ /\. { | ||
| 39 | deny all; | ||
| 40 | } | ||
| 41 | } | ||
diff --git a/js/RrdCmdLine.js b/js/RrdCmdLine.js index a2be92e..c222498 100644 --- a/js/RrdCmdLine.js +++ b/js/RrdCmdLine.js | |||
| @@ -389,11 +389,13 @@ RrdCmdLine.prototype = { | |||
| 389 | // DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>] | 389 | // DEF:<vname>=<rrdfile>:<ds-name>:<CF>[:step=<step>][:start=<time>][:end=<time>][:reduce=<CF>] |
| 390 | parse_def: function (line) | 390 | parse_def: function (line) |
| 391 | { | 391 | { |
| 392 | var args = line.split(/:/); | 392 | // Every character (except ':' and '\') are allowed within a value. The |
| 393 | var n=1; | 393 | // two exceptions must be escaped with a slash. |
| 394 | var vnames = args[n++].split('='); | 394 | var args = line.match(/(\\.|[^:\\])+/g); |
| 395 | var vname = vnames[0]; | 395 | var n = 1; |
| 396 | var rrdfile = vnames[1]; | 396 | var vnames = args[n++]; |
| 397 | var vname = vnames.substr(0, vnames.indexOf("=")); | ||
| 398 | var rrdfile = vnames.substr(vname.length + 1).replace(/\\(.)/g, "$1"); | ||
| 397 | var name = args[n++]; | 399 | var name = args[n++]; |
| 398 | var cf = args[n++]; | 400 | var cf = args[n++]; |
| 399 | var step, reduce, start, end; | 401 | var step, reduce, start, end; |
