/usr/share/php/Icinga/Chart/Unit/CalendarUnit.php is in php-icinga 2.1.0-1ubuntu1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | <?php
/* Icinga Web 2 | (c) 2013-2015 Icinga Development Team | GPLv2+ */
namespace Icinga\Chart\Unit;
use DateTime;
/**
* Calendar Axis Unit that transforms timestamps into user-readable values
*
*/
class CalendarUnit extends LinearUnit
{
/**
* Constant for a minute
*/
const MINUTE = 60;
/**
* Constant for an hour
*/
const HOUR = 3600;
/**
* Constant for a day
*/
const DAY = 864000;
/**
* Constant for ~a month
* 30 Days, this is sufficient for our needs
*/
const MONTH = 2592000; // x
/**
* An array containing all labels that will be displayed
*
* @var array
*/
private $labels = array();
/**
* The date format to use
*
* @var string
*/
private $dateFormat = 'd-m';
/**
* The time format to use
*
* @var string
*/
private $timeFormat = 'g:i:s';
/**
* Create the labels for the given dataset
*/
private function createLabels()
{
$this->labels = array();
$duration = $this->getMax() - $this->getMin();
if ($duration <= self::HOUR) {
$unit = self::MINUTE;
} elseif ($duration <= self::DAY) {
$unit = self::HOUR;
} elseif ($duration <= self::MONTH) {
$unit = self::DAY;
} else {
$unit = self::MONTH;
}
$this->calculateLabels($unit);
}
/**
* Calculate the labels for this dataset
*
* @param integer $unit The unit to use as the basis for calculation
*/
private function calculateLabels($unit)
{
$fac = new DateTime();
$duration = $this->getMax() - $this->getMin();
// Calculate number of ticks, but not more than 30
$tickCount = ($duration/$unit * 10);
if ($tickCount > 30) {
$tickCount = 30;
}
$step = $duration / $tickCount;
$format = $this->timeFormat;
if ($unit === self::DAY) {
$format = $this->dateFormat;
} elseif ($unit === self::MONTH) {
$format = $this->dateFormat;
}
for ($i = 0; $i <= $duration; $i += $step) {
$this->labels[] = $fac->setTimestamp($this->getMin() + $i)->format($format);
}
}
/**
* Add a dataset to this CalendarUnit and update labels
*
* @param array $dataset The dataset to update
* @param int $idx The index to use for determining the data
*
* @return $this Fluid interface
*/
public function addValues(array $dataset, $idx = 0)
{
parent::addValues($dataset, $idx);
$this->createLabels();
return $this;
}
/**
* Return the current axis relative position
*
* @return int The position of the next tick (between 0 and 100)
*/
public function current()
{
return 100 * (key($this->labels) / count($this->labels));
}
/**
* Move to next tick
*/
public function next()
{
next($this->labels);
}
/**
* Return the current tick caption
*
* @return string
*/
public function key()
{
return current($this->labels);
}
/**
* Return true when the iterator is in a valid range
*
* @return bool
*/
public function valid()
{
return current($this->labels) !== false;
}
/**
* Rewind the internal array
*/
public function rewind()
{
reset($this->labels);
}
}
|