From 1a11bb899ac7f627d420790f73a3171936943e3b Mon Sep 17 00:00:00 2001 From: SergeyPodgorny Date: Sun, 10 Dec 2023 17:12:49 +0300 Subject: [PATCH] Benchmarked annotation deployed --- .../games/annotations/Benchmarked.java | 12 +++++++ .../games/aspects/Benchmarking.java | 32 +++++++++++++++++++ .../SpecificGameListServiceImpl.java | 2 ++ .../SpecificGameServiceImpl.java | 2 ++ 4 files changed, 48 insertions(+) create mode 100644 server/games-service/src/main/java/com/fnd/games_store/games/annotations/Benchmarked.java create mode 100644 server/games-service/src/main/java/com/fnd/games_store/games/aspects/Benchmarking.java diff --git a/server/games-service/src/main/java/com/fnd/games_store/games/annotations/Benchmarked.java b/server/games-service/src/main/java/com/fnd/games_store/games/annotations/Benchmarked.java new file mode 100644 index 0000000..1351bb1 --- /dev/null +++ b/server/games-service/src/main/java/com/fnd/games_store/games/annotations/Benchmarked.java @@ -0,0 +1,12 @@ +package com.fnd.games_store.games.annotations; + + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.METHOD) +public @interface Benchmarked { +} diff --git a/server/games-service/src/main/java/com/fnd/games_store/games/aspects/Benchmarking.java b/server/games-service/src/main/java/com/fnd/games_store/games/aspects/Benchmarking.java new file mode 100644 index 0000000..2c2a85b --- /dev/null +++ b/server/games-service/src/main/java/com/fnd/games_store/games/aspects/Benchmarking.java @@ -0,0 +1,32 @@ +package com.fnd.games_store.games.aspects; + +import lombok.extern.slf4j.Slf4j; +import org.aspectj.lang.ProceedingJoinPoint; +import org.aspectj.lang.annotation.Around; +import org.aspectj.lang.annotation.Aspect; +import org.springframework.stereotype.Component; + +import java.time.Duration; +import java.time.Instant; + +@Component +@Aspect +@Slf4j +public class Benchmarking { + + + @Around("@annotation(com.fnd.games_store.games.annotations.Benchmarked)") + public Object performTImeMeasure(ProceedingJoinPoint joinPoint) throws Throwable { + + Instant startTime = Instant.now(); + + Object proceed = joinPoint.proceed(); + + Instant endTime = Instant.now(); + + log.info(Duration.between(endTime,startTime).toString()); + + return proceed; + } + +} diff --git a/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameListServiceImpl.java b/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameListServiceImpl.java index 0cb1ad6..5829de4 100644 --- a/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameListServiceImpl.java +++ b/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameListServiceImpl.java @@ -1,5 +1,6 @@ package com.fnd.games_store.games.service.implementation; +import com.fnd.games_store.games.annotations.Benchmarked; import com.fnd.games_store.games.dto.game.GameResponseDTO; import com.fnd.games_store.games.exceptions.GameNotFoundException; import com.fnd.games_store.games.repository.GameRepository; @@ -32,6 +33,7 @@ public SpecificGameListServiceImpl(GameRepository repository) { isolation = Isolation.REPEATABLE_READ, timeout = 5, readOnly = true) + @Benchmarked @Override public List getSpecifiedGameList(Integer page, Integer pageSize, Sort sortBy) { return repository.findAll(PageRequest.of(page,pageSize, sortBy)).stream().map(GameResponseDTO::new).collect(Collectors.toList()); diff --git a/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameServiceImpl.java b/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameServiceImpl.java index 94f6dc2..0fb3a7f 100644 --- a/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameServiceImpl.java +++ b/server/games-service/src/main/java/com/fnd/games_store/games/service/implementation/SpecificGameServiceImpl.java @@ -1,5 +1,6 @@ package com.fnd.games_store.games.service.implementation; +import com.fnd.games_store.games.annotations.Benchmarked; import com.fnd.games_store.games.dto.game.GameResponseDTO; import com.fnd.games_store.games.exceptions.GameNotFoundException; import com.fnd.games_store.games.repository.GameRepository; @@ -27,6 +28,7 @@ public SpecificGameServiceImpl(GameRepository repository) { timeout = 5, readOnly = true, rollbackFor = GameNotFoundException.class) + @Benchmarked @Override public GameResponseDTO getGameByName(String name) { return new GameResponseDTO(repository.getGameByName(name).orElseThrow(GameNotFoundException::new));