Skip to content
Snippets Groups Projects
Commit 4d7f5bab authored by Henry Page's avatar Henry Page :speech_balloon:
Browse files

temp 3

parent b9ee6af6
Branches
No related tags found
2 merge requests!8412425.0.0 release,!834Resolve "Fix Average Waiting Time & Average Processing Time"
......@@ -17,7 +17,6 @@
*/
package nl.tudelft.queue.controller;
import java.time.LocalDateTime;
import java.time.temporal.ChronoUnit;
import java.util.List;
import java.util.Map;
......@@ -45,8 +44,6 @@ import nl.tudelft.queue.model.labs.Lab;
import nl.tudelft.queue.model.records.RequestCountRecord;
import nl.tudelft.queue.service.EditionStatusService;
import static org.apache.commons.lang3.ObjectUtils.min;
@Validated
@RestController
public class EditionStatusController {
......@@ -157,7 +154,7 @@ public class EditionStatusController {
.map(AssignmentCountStatisticsViewDto::getAssignmentName)
.orElse("N/A"), // order preserving in case of tie
ess.mostCountedName(ess.countRequestsPerRoom(rooms, requests)),
ess.averageWaitTime(requests, ChronoUnit.MILLIS),
ess.averageWaitingTime(requests, ChronoUnit.MILLIS),
ess.averageProcessingTime(requests, ChronoUnit.MILLIS));
}
......
......@@ -83,7 +83,7 @@ public class SessionStatusController {
requests.stream().filter(rq -> rq.getRequestType() == RequestType.SUBMISSION)
.count()),
(long) qSession.getQueue().size(),
editionStatusService.averageWaitTime(requests, ChronoUnit.MILLIS),
editionStatusService.averageWaitingTime(requests, ChronoUnit.MILLIS),
editionStatusService.averageProcessingTime(requests, ChronoUnit.MILLIS));
}
......
......@@ -28,7 +28,6 @@ import java.util.function.Predicate;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import nl.tudelft.labracore.api.dto.SessionDetailsDTO;
import nl.tudelft.queue.model.QueueSession;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
......@@ -328,7 +327,7 @@ public class EditionStatusService {
* @param unit The {@link ChronoUnit} to calculate the average wait time in.
* @return The average wait time in the given unit. Can be none if no qualifying requests are present.
*/
public OptionalDouble averageWaitTime(List<LabRequest> requests,
public OptionalDouble averageWaitingTime(List<LabRequest> requests,
ChronoUnit unit) {
Map<Long, LocalDateTime> effectiveEndTimes = calculateEffectiveEndTimeForRequestStatistics(requests);
......@@ -429,7 +428,7 @@ public class EditionStatusService {
.collect(Collectors.toMap(
Map.Entry::getKey,
entry -> LabStatisticsViewDto.builder()
.avgWaitingTime(averageWaitTime(entry.getValue(), ChronoUnit.MINUTES))
.avgWaitingTime(averageWaitingTime(entry.getValue(), ChronoUnit.MINUTES))
.avgProcessingTime(averageProcessingTime(entry.getValue(), ChronoUnit.MINUTES))
.build())));
}
......
......@@ -86,7 +86,7 @@ public class SessionStatusService {
* @return The average waiting time if one can be calculated, for fresh labs this is empty.
*/
public OptionalDouble averageWaitingTime(Lab qs) {
return ess.averageWaitTime(qs.getRequests(), ChronoUnit.SECONDS);
return ess.averageWaitingTime(qs.getRequests(), ChronoUnit.SECONDS);
}
/**
......@@ -193,7 +193,7 @@ public class SessionStatusService {
.filter(rq -> rq.getCreatedAt().isAfter(now.minusHours(1L))).toList();
return Map.of(
"Average Wait Time",
ess.averageWaitTime(requestsInTheLastHour, ChronoUnit.MINUTES).orElse(0.0d),
ess.averageWaitingTime(requestsInTheLastHour, ChronoUnit.MINUTES).orElse(0.0d),
"Average Processing Time",
ess.averageProcessingTime(requestsInTheLastHour, ChronoUnit.MINUTES).orElse(0.0d)
......
......@@ -44,23 +44,4 @@ public class RequestTest {
.build();
}
@Test
void waitingTimeCalculatesDifferenceBetweenCreatedAtAndFirstProcessedTime() {
assertThat(request.waitingTime()).isPresent()
.hasValueCloseTo(30.0, Offset.offset(0.005));
}
@Test
void waitingTimeCalculationFailsForNullCreatedAt() {
request.setCreatedAt(null);
assertThat(request.waitingTime()).isEmpty();
}
@Test
void waitingTimeCalculationFailsForNullFirstProcessedAt() {
request.getEventInfo().setFirstProcessedAt(null);
assertThat(request.waitingTime()).isEmpty();
}
}
......@@ -17,6 +17,7 @@
*/
package nl.tudelft.queue.service;
import static java.time.LocalDateTime.now;
import static org.assertj.core.api.Assertions.assertThat;
import java.time.LocalDateTime;
......@@ -456,8 +457,12 @@ public class EditionStatusServiceTest {
@Test
void averageWaitingProcessingTimeEmptyTestShouldYieldZero() {
assertThat(ess.averageWaitingTime(List.of())).isEqualTo(0L);
assertThat(ess.averageProcessingTime(List.of())).isEqualTo(0L);
assertThat(ess.averageWaitingTime(List.of(), ChronoUnit.SECONDS)).isEqualTo(OptionalDouble.empty());
assertThat(ess.averageWaitingTime(List.of(), ChronoUnit.MILLIS)).isEqualTo(OptionalDouble.empty());
assertThat(ess.averageWaitingTime(List.of(), ChronoUnit.MINUTES)).isEqualTo(OptionalDouble.empty());
assertThat(ess.averageProcessingTime(List.of(), ChronoUnit.SECONDS)).isEqualTo(OptionalDouble.empty());
assertThat(ess.averageProcessingTime(List.of(), ChronoUnit.MILLIS)).isEqualTo(OptionalDouble.empty());
assertThat(ess.averageProcessingTime(List.of(), ChronoUnit.MINUTES)).isEqualTo(OptionalDouble.empty());
}
......@@ -466,62 +471,60 @@ public class EditionStatusServiceTest {
LocalDateTime now = LocalDateTime.now();
request1.getEventInfo().setFirstProcessedAt(now.minusSeconds(10L));
Long result = ess.averageProcessingTime(List.of(request1));
OptionalDouble result = ess.averageProcessingTime(List.of(request1), ChronoUnit.SECONDS);
assertThat(result).isCloseTo(10L * 1000, Percentage.withPercentage(5)); // 5% tolerance = 500ms
assertThat(result.getAsDouble()).isCloseTo(10L * 1000, Percentage.withPercentage(5)); // 5% tolerance = 500ms
}
@Test
void averageProcessingTimeNoTimeAssignedTest() {
request1.getEventInfo().setStatus(RequestStatus.APPROVED);
rr.save(request1);
Long result = ess.averageProcessingTime(List.of(request1));
OptionalDouble result = ess.averageProcessingTime(List.of(request1), ChronoUnit.MILLIS);
assertThat(result).isEqualTo(0L);
assertThat(result.getAsDouble()).isEqualTo(OptionalDouble.empty());
}
@Test
void averageProcessingTimeNotHandledButIsInTheFutureShouldReturnZero() {
LocalDateTime now = LocalDateTime.now();
request1.getEventInfo().setFirstProcessedAt(now.plusSeconds(1L));
Long result = ess.averageProcessingTime(List.of(request1), ChronoUnit.MINUTES, now);
request1.getEventInfo().setFirstProcessedAt(now().plusSeconds(1L));
OptionalDouble result = ess.averageProcessingTime(List.of(request1), ChronoUnit.MINUTES);
assertThat(result).isEqualTo(0L);
assertThat(result.getAsDouble()).isEqualTo(OptionalDouble.empty());
}
@Test
void averageProcessingTimeTest() {
final LocalDateTime now = LocalDateTime.now();
request1.getEventInfo().setStatus(RequestStatus.APPROVED);
request1.getEventInfo().setFirstProcessedAt(now.minusSeconds(12L));
request1.getEventInfo().setHandledAt(now);
rr.save(request1);
Long res1 = ess.averageProcessingTime(List.of(request1));
Long res2 = ess.averageProcessingTime(List.of(request1), ChronoUnit.SECONDS, now);
Long res3 = ess.averageProcessingTime(List.of(request1), ChronoUnit.SECONDS, now.minusSeconds(6L));
Long res4 = ess.averageProcessingTime(List.of(request1), ChronoUnit.MINUTES, now);
request1.getEventInfo().setFirstProcessedAt(now.minusMinutes(2L));
Long res5 = ess.averageProcessingTime(List.of(request1), ChronoUnit.MINUTES, now.minusMinutes(1L));
assertThat(res1).isEqualTo(12L * 1000L);
assertThat(res2).isEqualTo(12L);
assertThat(res3).isEqualTo(6L);
assertThat(res4).isEqualTo(0L);
assertThat(res5).isEqualTo(1L);
}
// @Test
// void averageProcessingTimeTest() {
//
// request1.getEventInfo().setStatus(RequestStatus.APPROVED);
// request1.getEventInfo().setFirstProcessedAt(now().minusSeconds(12L));
// request1.getEventInfo().setHandledAt(now());
// rr.save(request1);
// Long res1 = ess.averageProcessingTime(List.of(request1), ChronoUnit.MILLIS);
// Long res2 = ess.averageProcessingTime(List.of(request1), ChronoUnit.SECONDS);
// Long res3 = ess.averageProcessingTime(List.of(request1), ChronoUnit.SECONDS);
// Long res4 = ess.averageProcessingTime(List.of(request1), ChronoUnit.MINUTES);
// request1.getEventInfo().setFirstProcessedAt(now.minusMinutes(2L));
// Long res5 = ess.averageProcessingTime(List.of(request1), ChronoUnit.MINUTES, now.minusMinutes(1L));
//
// assertThat(res1).isEqualTo(12L * 1000L);
// assertThat(res2).isEqualTo(12L);
// assertThat(res3).isEqualTo(6L);
// assertThat(res4).isEqualTo(0L);
// assertThat(res5).isEqualTo(1L);
//
// }
@Test
void averageWaitingTimeSlottedLabTest() {
request4.getEventInfo().setStatus(RequestStatus.APPROVED);
request4.getEventInfo().setFirstProcessedAt(LocalDateTime.of(2023, 1, 1, 0, 0, 7));
rr.save(request4);
Long result = ess.averageWaitingTime(List.of(request4));
assertThat(result).isEqualTo(1L * 1000);
OptionalDouble result = ess.averageWaitingTime(List.of(request4), ChronoUnit.MILLIS);
assertThat(result.getAsDouble()).isEqualTo(1L * 1000);
}
@Test
......
......@@ -109,7 +109,9 @@ public class SessionStatusServiceTest {
var sut = sessionStatusService.createRequestDistribution(oopNowRegularLab1, new HashSet<>(), 5);
assertThat(sut).hasSize(1);
var numOfResults = sut.stream()
.map(bucket -> bucket.getBucketData().values().stream().reduce(0L, Long::sum))
.map(bucket -> bucket.getBucketData().values().stream()
.mapToLong(Number::longValue)
.reduce(0L, Long::sum))
.reduce(0L, Long::sum);
assertThat(numOfResults).isEqualTo(50);
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please to comment