summaryrefslogtreecommitdiffstats
path: root/library/Graphite/Graphing/Chart.php
diff options
context:
space:
mode:
Diffstat (limited to 'library/Graphite/Graphing/Chart.php')
-rw-r--r--library/Graphite/Graphing/Chart.php385
1 files changed, 385 insertions, 0 deletions
diff --git a/library/Graphite/Graphing/Chart.php b/library/Graphite/Graphing/Chart.php
new file mode 100644
index 0000000..ded8ae8
--- /dev/null
+++ b/library/Graphite/Graphing/Chart.php
@@ -0,0 +1,385 @@
+<?php
+
+namespace Icinga\Module\Graphite\Graphing;
+
+use Icinga\Module\Graphite\Util\MacroTemplate;
+use Icinga\Module\Graphite\Web\Widget\GraphImage;
+use Icinga\Web\Response;
+
+class Chart
+{
+ /**
+ * Used to render the chart
+ *
+ * @var GraphiteWebClient
+ */
+ protected $graphiteWebClient;
+
+ /** @var ?string This chart's background color */
+ protected $bgcolor;
+
+ /** @var ?string This chart's foreground color */
+ protected $fgcolor;
+
+ /** @var ?string This chart's major grid line color */
+ protected $majorGridLineColor;
+
+ /** @var ?string This chart's minor grid line color */
+ protected $minorGridLineColor;
+
+ /**
+ * This chart's base
+ *
+ * @var Template
+ */
+ protected $template;
+
+ /**
+ * Target metrics by curve name
+ *
+ * @var string[]
+ */
+ protected $metrics;
+
+ /**
+ * The chart's begin
+ *
+ * @var string
+ */
+ protected $from = '-14400';
+
+ /**
+ * The chart's end
+ *
+ * @var string
+ */
+ protected $until;
+
+ /**
+ * The chart's width
+ *
+ * @var int
+ */
+ protected $width = 350;
+
+ /**
+ * The chart's height
+ *
+ * @var int
+ */
+ protected $height = 200;
+
+ /**
+ * Whether to show the chart's legend
+ *
+ * @var bool
+ */
+ protected $showLegend = true;
+
+ /**
+ * Constructor
+ *
+ * @param GraphiteWebClient $graphiteWebClient Used to render the chart
+ * @param Template $template This chart's base
+ * @param string[] $metrics Target metrics by curve name
+ */
+ public function __construct(GraphiteWebClient $graphiteWebClient, Template $template, array $metrics)
+ {
+ $this->graphiteWebClient = $graphiteWebClient;
+ $this->template = $template;
+ $this->metrics = $metrics;
+ }
+
+ /**
+ * Let Graphite Web render this chart and serve the result immediately to the user agent (via the given response)
+ *
+ * Does not return.
+ *
+ * @param Response $response
+ */
+ public function serveImage(Response $response)
+ {
+ $image = new GraphImage($this);
+
+ // Errors should occur now or not at all
+ $image->render();
+
+ $response
+ ->setHeader('Content-Type', 'image/png', true)
+ ->setHeader('Content-Disposition', 'inline; filename="graph.png"', true)
+ ->setHeader('Cache-Control', null, true)
+ ->setHeader('Expires', null, true)
+ ->setHeader('Pragma', null, true)
+ ->setBody($image)
+ ->sendResponse();
+
+ exit;
+ }
+
+ /**
+ * Extract the values of the template's metrics filters' variables from the target metrics
+ *
+ * @return string[]
+ */
+ public function getMetricVariables()
+ {
+ /** @var MacroTemplate[][] $curves */
+ $curves = $this->template->getFullCurves();
+ $variables = [];
+
+ foreach ($this->metrics as $curveName => $metric) {
+ $vars = $curves[$curveName][0]->reverseResolve($metric);
+ if ($vars !== false) {
+ $variables = array_merge($variables, $vars);
+ }
+ }
+
+ return $variables;
+ }
+
+ /**
+ * Get Graphite Web client
+ *
+ * @return GraphiteWebClient
+ */
+ public function getGraphiteWebClient()
+ {
+ return $this->graphiteWebClient;
+ }
+
+ /**
+ * Get this chart's background color
+ *
+ * @return string|null
+ */
+ public function getBackgroundColor(): ?string
+ {
+ return $this->bgcolor;
+ }
+
+ /**
+ * Set this chart's background color
+ *
+ * @param string|null $color
+ *
+ * @return $this
+ */
+ public function setBackgroundColor(?string $color): self
+ {
+ $this->bgcolor = $color;
+
+ return $this;
+ }
+
+ /**
+ * Get this chart's foreground color
+ *
+ * @return string|null
+ */
+ public function getForegroundColor(): ?string
+ {
+ return $this->fgcolor;
+ }
+
+ /**
+ * Set this chart's foreground color
+ *
+ * @param string|null $color
+ *
+ * @return $this
+ */
+ public function setForegroundColor(?string $color): self
+ {
+ $this->fgcolor = $color;
+
+ return $this;
+ }
+
+ /**
+ * Get this graph's major grid line color
+ *
+ * @return string|null
+ */
+ public function getMajorGridLineColor(): ?string
+ {
+ return $this->majorGridLineColor;
+ }
+
+ /**
+ * Set this graph's major grid line color
+ *
+ * @param string|null $color
+ *
+ * @return $this
+ */
+ public function setMajorGridLineColor(?string $color): self
+ {
+ $this->majorGridLineColor = $color;
+
+ return $this;
+ }
+
+ /**
+ * Get this graph's minor grid line color
+ *
+ * @return string|null
+ */
+ public function getMinorGridLineColor(): ?string
+ {
+ return $this->minorGridLineColor;
+ }
+
+ /**
+ * Set this graph's minor grid line color
+ *
+ * @param string|null $color
+ *
+ * @return $this
+ */
+ public function setMinorGridLineColor(?string $color): self
+ {
+ $this->minorGridLineColor = $color;
+
+ return $this;
+ }
+
+ /**
+ * Get template
+ *
+ * @return Template
+ */
+ public function getTemplate()
+ {
+ return $this->template;
+ }
+
+ /**
+ * Get metrics
+ *
+ * @return string[]
+ */
+ public function getMetrics()
+ {
+ return $this->metrics;
+ }
+
+ /**
+ * Get begin
+ *
+ * @return string
+ */
+ public function getFrom()
+ {
+ return $this->from;
+ }
+
+ /**
+ * Set begin
+ *
+ * @param string $from
+ *
+ * @return $this
+ */
+ public function setFrom($from)
+ {
+ $this->from = $from;
+
+ return $this;
+ }
+
+ /**
+ * Get end
+ *
+ * @return string
+ */
+ public function getUntil()
+ {
+ return $this->until;
+ }
+
+ /**
+ * Set end
+ *
+ * @param string $until
+ *
+ * @return $this
+ */
+ public function setUntil($until)
+ {
+ $this->until = $until;
+
+ return $this;
+ }
+
+ /**
+ * Get width
+ *
+ * @return int
+ */
+ public function getWidth()
+ {
+ return $this->width;
+ }
+
+ /**
+ * Set width
+ *
+ * @param int $width
+ *
+ * @return $this
+ */
+ public function setWidth($width)
+ {
+ $this->width = $width;
+
+ return $this;
+ }
+
+ /**
+ * Get height
+ *
+ * @return int
+ */
+ public function getHeight()
+ {
+ return $this->height;
+ }
+
+ /**
+ * Set height
+ *
+ * @param int $height
+ *
+ * @return $this
+ */
+ public function setHeight($height)
+ {
+ $this->height = $height;
+
+ return $this;
+ }
+
+ /**
+ * Get whether to show the chart's legend
+ *
+ * @return bool
+ */
+ public function getShowLegend()
+ {
+ return $this->showLegend;
+ }
+
+ /**
+ * Set whether to show the chart's legend
+ *
+ * @param bool $showLegend
+ *
+ * @return $this
+ */
+ public function setShowLegend($showLegend)
+ {
+ $this->showLegend = $showLegend;
+
+ return $this;
+ }
+}