mirror of
https://we.phorge.it/source/phorge.git
synced 2024-12-24 14:30:56 +01:00
Fix Phrequent duration accounting
Summary: Fixes T5705. This was just derp; instead of returning the duration of the first slice, return the duration of all the slices. Test Plan: Added unit tests. Saw reasonable results in the UI. Reviewers: btrahan, hach-que Reviewed By: hach-que Subscribers: epriestley Maniphest Tasks: T5705 Differential Revision: https://secure.phabricator.com/D10184
This commit is contained in:
parent
7204f9fec2
commit
c0585b7a34
2 changed files with 28 additions and 2 deletions
|
@ -17,13 +17,15 @@ final class PhrequentTimeSlices extends Phobject {
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getDuration($now) {
|
public function getDuration($now) {
|
||||||
|
$total = 0;
|
||||||
foreach ($this->ranges as $range) {
|
foreach ($this->ranges as $range) {
|
||||||
if ($range[1] === null) {
|
if ($range[1] === null) {
|
||||||
return $now - $range[0];
|
$total += $now - $range[0];
|
||||||
} else {
|
} else {
|
||||||
return $range[1] - $range[0];
|
$total += $range[1] - $range[0];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return $total;
|
||||||
}
|
}
|
||||||
|
|
||||||
public function getIsOngoing() {
|
public function getIsOngoing() {
|
||||||
|
|
|
@ -282,6 +282,30 @@ final class PhrequentTimeBlockTestCase extends PhabricatorTestCase {
|
||||||
$ranges);
|
$ranges);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSumTimeSlices() {
|
||||||
|
// This block has multiple closed slices.
|
||||||
|
$block = new PhrequentTimeBlock(
|
||||||
|
array(
|
||||||
|
$this->newEvent('T1', 3456, 4456)->attachPreemptingEvents(array()),
|
||||||
|
$this->newEvent('T1', 8000, 9000)->attachPreemptingEvents(array()),
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->assertEqual(
|
||||||
|
2000,
|
||||||
|
$block->getTimeSpentOnObject('T1', 10000));
|
||||||
|
|
||||||
|
// This block has an open slice.
|
||||||
|
$block = new PhrequentTimeBlock(
|
||||||
|
array(
|
||||||
|
$this->newEvent('T1', 3456, 4456)->attachPreemptingEvents(array()),
|
||||||
|
$this->newEvent('T1', 8000, null)->attachPreemptingEvents(array()),
|
||||||
|
));
|
||||||
|
|
||||||
|
$this->assertEqual(
|
||||||
|
3000,
|
||||||
|
$block->getTimeSpentOnObject('T1', 10000));
|
||||||
|
}
|
||||||
|
|
||||||
private function newEvent($object_phid, $start_time, $end_time) {
|
private function newEvent($object_phid, $start_time, $end_time) {
|
||||||
static $id = 0;
|
static $id = 0;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue