From f6caccad94fd7ab5f5640708e22c688cdc2c0e96 Mon Sep 17 00:00:00 2001 From: emeroad Date: Mon, 15 Apr 2024 10:37:24 +0900 Subject: [PATCH] [#noissue] Apply Java8 Date API --- .../web/controller/ApplicationController.java | 4 +++- .../web/service/AgentInfoService.java | 3 ++- .../web/service/AgentInfoServiceImpl.java | 24 +++++++++---------- .../pinpoint/web/util/DateTimeUtils.java | 9 +++++++ 4 files changed, 26 insertions(+), 14 deletions(-) diff --git a/web/src/main/java/com/navercorp/pinpoint/web/controller/ApplicationController.java b/web/src/main/java/com/navercorp/pinpoint/web/controller/ApplicationController.java index 3242af980c96d..04ee9f4a61426 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/controller/ApplicationController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/controller/ApplicationController.java @@ -33,6 +33,7 @@ import org.springframework.web.bind.annotation.RestController; import org.springframework.web.server.ResponseStatusException; +import java.time.Period; import java.util.Objects; /** @@ -62,7 +63,8 @@ public ApplicationAgentHostList getApplicationHostInfo ( int maxLimit = Math.min(MAX_PAGING_LIMIT, limit); durationDays = ObjectUtils.defaultIfNull(durationDays, AgentInfoService.NO_DURATION); - return agentInfoService.getApplicationAgentHostList(offset, maxLimit, durationDays); + Period durationDaysPeriod = Period.ofDays(durationDays); + return agentInfoService.getApplicationAgentHostList(offset, maxLimit, durationDaysPeriod); } @RequestMapping(value = "/isAvailableApplicationName") diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoService.java b/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoService.java index 382fd6e1879d3..7e5c7c5a3c6bb 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoService.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoService.java @@ -31,6 +31,7 @@ import com.navercorp.pinpoint.web.vo.tree.ApplicationAgentHostList; import com.navercorp.pinpoint.web.vo.tree.SortByAgentInfo; +import java.time.Period; import java.util.List; import java.util.Optional; import java.util.Set; @@ -50,7 +51,7 @@ public interface AgentInfoService { AgentsMapByHost getAgentsListByApplicationName(AgentStatusFilter agentStatusFilter, AgentInfoFilter agentInfoPredicate, String applicationName, Range range, SortByAgentInfo.Rules sortBy); AgentsMapByHost getAgentsListByApplicationName(AgentStatusFilter agentStatusFilter, String applicationName, Range range, SortByAgentInfo.Rules sortBy); - ApplicationAgentHostList getApplicationAgentHostList(int offset, int limit, int durationDays); + ApplicationAgentHostList getApplicationAgentHostList(int offset, int limit, Period durationDays); Set getAgentsByApplicationName(String applicationName, long timestamp); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java b/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java index d64c4223ffd32..33b40ea37a24e 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/service/AgentInfoServiceImpl.java @@ -27,6 +27,7 @@ import com.navercorp.pinpoint.web.filter.agent.AgentEventFilter; import com.navercorp.pinpoint.web.hyperlink.HyperLinkFactory; import com.navercorp.pinpoint.web.service.stat.AgentWarningStatService; +import com.navercorp.pinpoint.web.util.DateTimeUtils; import com.navercorp.pinpoint.web.vo.AgentEvent; import com.navercorp.pinpoint.web.vo.Application; import com.navercorp.pinpoint.web.vo.agent.AgentAndStatus; @@ -55,8 +56,8 @@ import org.springframework.util.CollectionUtils; import java.time.Instant; +import java.time.Period; import java.util.ArrayList; -import java.util.Calendar; import java.util.Collections; import java.util.Comparator; import java.util.HashSet; @@ -175,18 +176,19 @@ public AgentsMapByHost getAgentsListByApplicationName(AgentStatusFilter agentSta } @Override - public ApplicationAgentHostList getApplicationAgentHostList(int offset, int limit, int durationDays) { + public ApplicationAgentHostList getApplicationAgentHostList(int offset, int limit, Period durationDays) { if (offset <= 0) { throw new IllegalArgumentException("offset must be greater than 0"); } if (limit <= 0) { throw new IllegalArgumentException("limit must be greater than 0"); } + Objects.requireNonNull(durationDays, "durationDays"); return getApplicationAgentHostList0(offset, limit, durationDays); } - private ApplicationAgentHostList getApplicationAgentHostList0(int offset, int limit, int durationDays) { + private ApplicationAgentHostList getApplicationAgentHostList0(int offset, int limit, Period durationDays) { List applicationNameList = getApplicationNameList(applicationIndexDao.selectAllApplicationNames()); if (offset > applicationNameList.size()) { ApplicationAgentHostList.Builder builder = newBuilder(offset, offset, applicationNameList.size()); @@ -213,25 +215,23 @@ private ApplicationAgentHostList.Builder newBuilder(int offset, int endIndex, in return ApplicationAgentHostList.newBuilder(offset, endIndex, totalApplications); } - private List getAgentIdList(String applicationName, int durationDays) { + private List getAgentIdList(String applicationName, Period durationDays) { List agentIds = this.applicationIndexDao.selectAgentIds(applicationName); if (CollectionUtils.isEmpty(agentIds)) { return Collections.emptyList(); } - - if (durationDays <= 0) { + if (durationDays.isNegative()) { return agentIds; } - List activeAgentIdList = new ArrayList<>(); - - Range fastRange = Range.newRange(TimeUnit.HOURS, 1, System.currentTimeMillis()); + Instant now = DateTimeUtils.epochMilli(); + Range fastRange = Range.newRange(TimeUnit.HOURS, 1, now.toEpochMilli()); - Calendar cal = Calendar.getInstance(); - cal.add(Calendar.DATE, durationDays * -1); - final long fromTimestamp = cal.getTimeInMillis(); + Instant from = now.minus(durationDays); + final long fromTimestamp = from.toEpochMilli(); Range queryRange = Range.between(fromTimestamp, fastRange.getFrom() + 1); + List activeAgentIdList = new ArrayList<>(); for (String agentId : agentIds) { // FIXME This needs to be done with a more accurate information. // If at any time a non-java agent is introduced, or an agent that does not collect jvm data, diff --git a/web/src/main/java/com/navercorp/pinpoint/web/util/DateTimeUtils.java b/web/src/main/java/com/navercorp/pinpoint/web/util/DateTimeUtils.java index b4f8b0e1d7333..8cad11292e125 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/util/DateTimeUtils.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/util/DateTimeUtils.java @@ -31,6 +31,15 @@ public final class DateTimeUtils { private DateTimeUtils() { } + /** + * Returns the current time in milliseconds. + * precision : milliseconds + * @return the current time in milliseconds + */ + public static Instant epochMilli() { + return Instant.ofEpochMilli(System.currentTimeMillis()); + } + public static long timestampToStartOfDay(long epochMilli) { // Java 8 date-time: get start of day from ZonedDateTime // https://stackoverflow.com/questions/29143910/java-8-date-time-get-start-of-day-from-zoneddatetime