diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:46:43 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-13 11:46:43 +0000 |
commit | 3e02d5aff85babc3ffbfcf52313f2108e313aa23 (patch) | |
tree | b01f3923360c20a6a504aff42d45670c58af3ec5 /library/Icinga/Chart/Inline | |
parent | Initial commit. (diff) | |
download | icingaweb2-3e02d5aff85babc3ffbfcf52313f2108e313aa23.tar.xz icingaweb2-3e02d5aff85babc3ffbfcf52313f2108e313aa23.zip |
Adding upstream version 2.12.1.upstream/2.12.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | library/Icinga/Chart/Inline/Inline.php | 96 | ||||
-rw-r--r-- | library/Icinga/Chart/Inline/PieChart.php | 41 |
2 files changed, 137 insertions, 0 deletions
diff --git a/library/Icinga/Chart/Inline/Inline.php b/library/Icinga/Chart/Inline/Inline.php new file mode 100644 index 0000000..3acbd73 --- /dev/null +++ b/library/Icinga/Chart/Inline/Inline.php @@ -0,0 +1,96 @@ +<?php +/* Icinga Web 2 | (c) 2014 Icinga Development Team | GPLv2+ */ + +namespace Icinga\Chart\Inline; + +/** + * Class to render and inline chart directly from the request params. + * + * When rendering huge amounts of inline charts it is too expensive + * to bootstrap the complete application for ever single chart and + * we need to be able render Charts in a compact environment without + * the other Icinga classes. + * + * Class Inline + * @package Icinga\Chart\Inline + */ +class Inline +{ + + /** + * The data displayed in this chart + * + * @var array + */ + protected $data; + + /** + * The colors used to display this chart + * + * @var array + */ + protected $colors = array( + '#00FF00', // OK + '#FFFF00', // Warning + '#FF0000', // Critical + '#E066FF' // Unreachable + ); + + /** + * The labels displayed on this chart + * + * @var array + */ + protected $labels = array(); + + /** + * The height in percent + * + * @var int + */ + protected $height = 100; + + /** + * The width in percent + * + * @var int + */ + protected $width = 100; + + protected function sanitizeStringArray(array $arr) + { + $sanitized = array(); + foreach ($arr as $key => $value) { + $sanitized[$key] = htmlspecialchars($value); + } + return $sanitized; + } + + /** + * Populate the properties from the current request. + */ + public function initFromRequest() + { + $this->data = explode(',', $_GET['data']); + foreach ($this->data as $key => $value) { + $this->data[$key] = (int)$value; + } + for ($i = 0; $i < count($this->data); $i++) { + $this->labels[] = ''; + } + + if (array_key_exists('colors', $_GET)) { + $this->colors = $this->sanitizeStringArray(explode(',', $_GET['colors'])); + } + while (count($this->colors) < count($this->data)) { + $this->colors[] = '#FEFEFE'; + } + + if (array_key_exists('width', $_GET)) { + $this->width = (int)$_GET['width']; + } + if (array_key_exists('height', $_GET)) { + $this->height = (int)$_GET['height']; + } + } +} diff --git a/library/Icinga/Chart/Inline/PieChart.php b/library/Icinga/Chart/Inline/PieChart.php new file mode 100644 index 0000000..de68213 --- /dev/null +++ b/library/Icinga/Chart/Inline/PieChart.php @@ -0,0 +1,41 @@ +<?php +/* Icinga Web 2 | (c) 2013 Icinga Development Team | GPLv2+ */ + +namespace Icinga\Chart\Inline; + +use Icinga\Chart\PieChart as PieChartRenderer; + +/** + * Draw an inline pie-chart directly from the available request parameters. + */ +class PieChart extends Inline +{ + protected function getChart() + { + $pie = new PieChartRenderer(); + $pie->alignTopLeft(); + $pie->disableLegend(); + $pie->drawPie(array( + 'data' => $this->data, 'colors' => $this->colors, 'labels' => $this->labels + )); + return $pie; + } + + public function toSvg($output = true) + { + if ($output) { + echo $this->getChart()->render(); + } else { + return $this->getChart()->render(); + } + } + + public function toPng($output = true) + { + if ($output) { + echo $this->getChart()->toPng($this->width, $this->height); + } else { + return $this->getChart()->toPng($this->width, $this->height); + } + } +} |