diff --git a/packages/web/src/Audit/FleetStats.php b/packages/web/src/Audit/FleetStats.php index 8fb0ca2..f0f7cb6 100644 --- a/packages/web/src/Audit/FleetStats.php +++ b/packages/web/src/Audit/FleetStats.php @@ -256,10 +256,14 @@ class FleetStats extends WindowedStats \DateTimeInterface $start, \DateTimeInterface $end ) { + // hosts.hostCreateDate is a TIMESTAMP. return self::dailySeries( self::readWindow(self::_addedPerDaySql(), $start, $end), $start, - $end + $end, + 'd', + 'c', + false ); } diff --git a/packages/web/src/Audit/ImagingStats.php b/packages/web/src/Audit/ImagingStats.php index 5a1eae5..388436b 100644 --- a/packages/web/src/Audit/ImagingStats.php +++ b/packages/web/src/Audit/ImagingStats.php @@ -236,7 +236,8 @@ class ImagingStats extends WindowedStats ) { $rows = self::_read(self::_runsPerDaySql(), $start, $end); - return self::dailySeries($rows, $start, $end); + // taskLog.createTime is a TIMESTAMP. + return self::dailySeries($rows, $start, $end, 'd', 'c', false); } /** diff --git a/packages/web/src/Audit/InventoryStats.php b/packages/web/src/Audit/InventoryStats.php index cb8c804..70b0c58 100644 --- a/packages/web/src/Audit/InventoryStats.php +++ b/packages/web/src/Audit/InventoryStats.php @@ -176,10 +176,14 @@ class InventoryStats extends WindowedStats \DateTimeInterface $start, \DateTimeInterface $end ) { + // inventory.iCreateDate is a TIMESTAMP. return self::dailySeries( self::readWindow(self::_recordedPerDaySql(), $start, $end), $start, - $end + $end, + 'd', + 'c', + false ); } diff --git a/packages/web/src/Audit/StorageStats.php b/packages/web/src/Audit/StorageStats.php index f6663df..587e192 100644 --- a/packages/web/src/Audit/StorageStats.php +++ b/packages/web/src/Audit/StorageStats.php @@ -269,10 +269,14 @@ class StorageStats extends WindowedStats \DateTimeInterface $start, \DateTimeInterface $end ) { + // images.imageDateTime is a TIMESTAMP. return self::dailySeries( self::readWindow(self::_addedPerDaySql(), $start, $end), $start, - $end + $end, + 'd', + 'c', + false ); } diff --git a/packages/web/src/Audit/WindowedStats.php b/packages/web/src/Audit/WindowedStats.php index 041ea56..eaaa8d8 100644 --- a/packages/web/src/Audit/WindowedStats.php +++ b/packages/web/src/Audit/WindowedStats.php @@ -136,6 +136,13 @@ abstract class WindowedStats extends FOGBase * @param \DateTimeInterface $end the upper bound as given * @param string $dateK the rows' date column * @param string $countK the rows' count column + * @param bool $isDatetime whether the charted column is + * DATETIME rather than TIMESTAMP. A + * TIMESTAMP comes back from the UTC + * session as UTC for every row and is + * never pre-boundary; reading one as + * DATETIME puts runs near the boundary + * on the wrong day, or off the series. * * @return array Ordered list of ['date' => 'Y-m-d', 'count' => int]. */ @@ -144,7 +151,8 @@ abstract class WindowedStats extends FOGBase \DateTimeInterface $start, \DateTimeInterface $end, $dateK = 'd', - $countK = 'c' + $countK = 'c', + $isDatetime = true ) { // Clamped here as well as inside readWindow(), because this walks // the window itself -- an unclamped one would emit a point per day @@ -163,7 +171,10 @@ abstract class WindowedStats extends FOGBase if (!isset($row[$dateK])) { continue; } - $day = self::toDisplayStored((string)$row[$dateK])->format('Y-m-d'); + $day = self::toDisplayStored( + (string)$row[$dateK], + $isDatetime + )->format('Y-m-d'); $counts[$day] = (isset($counts[$day]) ? $counts[$day] : 0) + (int)$row[$countK]; }