diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentEventDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentEventDataCollector.java index feb3d06b9a796..f60f84dcef14f 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentEventDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentEventDataCollector.java @@ -64,7 +64,7 @@ public void collect() { return; } - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); for (String agentId : agentIds) { List agentEventBoList = agentEventDao.getAgentEvents(agentId, range, Collections.emptySet()); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentStatDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentStatDataCollector.java index 159cf51972476..041e891b7de16 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentStatDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/AgentStatDataCollector.java @@ -66,7 +66,7 @@ public void collect() { return; } - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); for(String agentId : agentIds) { List jvmGcBos = jvmGcDao.getAgentStatList(agentId, range); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/DataSourceDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/DataSourceDataCollector.java index c3caa0597c0f4..ace971cae2a0a 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/DataSourceDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/DataSourceDataCollector.java @@ -64,7 +64,7 @@ public void collect() { return; } - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); for (String agentId : agentIds) { List dataSourceListBos = dataSourceDao.getAgentStatList(agentId, range); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollector.java index b69c1406c7e80..08cc19a332a4c 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollector.java @@ -58,7 +58,7 @@ public void collect() { return; } - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); for(String agentId : agentIds) { List fileDescriptorBoList = fileDescriptorDao.getAgentStatList(agentId, range); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java index d0e67e6b10025..ffebc80d388aa 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/ResponseTimeDataCollector.java @@ -60,7 +60,7 @@ public void collect() { return; } - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); List responseTimes = responseDao.selectResponseTime(application, range); for (ResponseTime responseTime : responseTimes) { diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java index 15fd8f518efc0..61c764403fda2 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/DataSourceDataCollector.java @@ -72,7 +72,7 @@ public DataSourceDataCollector(DataCollectorCategory dataCollectorCategory, Alar @Override public void collect() { - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); try { Map> agentTagInformation = getAgentTagInformation(range); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java index 351e23e0bb7dd..b5d93c2cca19a 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/FileDescriptorDataCollector.java @@ -53,7 +53,7 @@ public FileDescriptorDataCollector(DataCollectorCategory dataCollectorCategory, @Override public void collect() { - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); List agentUsageList = alarmDao.selectAvg(application.getName(), METRIC_NAME, FIELD_NAME, range); for (AgentUsage agentUsage : agentUsageList) { diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java index 9b20f6210b0de..076705c1770fc 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/HeapDataCollector.java @@ -56,7 +56,7 @@ public HeapDataCollector(DataCollectorCategory dataCollectorCategory, AlarmDao a @Override public void collect() { - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); List agentFieldUsageList = alarmDao.selectSumGroupByField(application.getName(), METRIC_NAME, fieldList, range); Map agentHeapUsageMap = new HashMap<>(); diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java index f05c1a0b90bf5..cbcea322d5f5c 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/JvmCpuDataCollector.java @@ -55,7 +55,7 @@ public JvmCpuDataCollector(DataCollectorCategory dataCollectorCategory, AlarmDao @Override public void collect() { - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); List agentUsageCountList = alarmDao.selectSumCount(application.getName(), METRIC_NAME, FIELD_NAME, range); for (AgentUsageCount agentUsageCount : agentUsageCountList) { diff --git a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java index 7922f9be93897..9bb7cfe676cff 100644 --- a/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java +++ b/batch/src/main/java/com/navercorp/pinpoint/batch/alarm/collector/pinot/SystemCpuDataCollector.java @@ -53,7 +53,7 @@ public SystemCpuDataCollector(DataCollectorCategory dataCollectorCategory, Alarm @Override public void collect() { - Range range = Range.newUncheckedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - slotInterval, timeSlotEndTime); List agentUsageCountList = alarmDao.selectSumCount(application.getName(), METRIC_NAME, FIELD_NAME, range); for (AgentUsageCount agentUsageCount : agentUsageCountList) { diff --git a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DataSourceConnectionUsageRateCheckerTest.java b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DataSourceConnectionUsageRateCheckerTest.java index 912afaf41e738..ca302e60c6013 100644 --- a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DataSourceConnectionUsageRateCheckerTest.java +++ b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DataSourceConnectionUsageRateCheckerTest.java @@ -65,7 +65,7 @@ public class DataSourceConnectionUsageRateCheckerTest { @BeforeEach public void before() { - Range range = Range.newUncheckedRange(START_TIME_MILLIS, CURRENT_TIME_MILLIS); + Range range = Range.newReversedRange(START_TIME_MILLIS, CURRENT_TIME_MILLIS); List dataSourceListBoList = List.of( createDataSourceListBo(1, 30, 40, 3), diff --git a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DeadlockCheckerTest.java b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DeadlockCheckerTest.java index 80640f267cd11..db2ee8bd7d037 100644 --- a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DeadlockCheckerTest.java +++ b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/checker/DeadlockCheckerTest.java @@ -67,7 +67,7 @@ private long createEventTimestamp() { public void checkTest1() { Rule rule = new Rule(APPLICATION_NAME, SERVICE_TYPE, CheckerCategory.ERROR_COUNT.getName(), 50, "testGroup", false, false, false, ""); - Range range = Range.newUncheckedRange(START_TIME_MILLIS, CURRENT_TIME_MILLIS); + Range range = Range.newReversedRange(START_TIME_MILLIS, CURRENT_TIME_MILLIS); when(mockAgentEventDao.getAgentEvents(AGENT_ID_1, range, Set.of())).thenReturn(List.of(createAgentEvent(AGENT_ID_1, createEventTimestamp(), AgentEventType.AGENT_CLOSED_BY_SERVER))); when(mockAgentEventDao.getAgentEvents(AGENT_ID_2, range, Set.of())).thenReturn(List.of(createAgentEvent(AGENT_ID_2, createEventTimestamp(), AgentEventType.AGENT_DEADLOCK_DETECTED))); when(mockAgentEventDao.getAgentEvents(AGENT_ID_3, range, Set.of())).thenReturn(List.of(createAgentEvent(AGENT_ID_3, createEventTimestamp(), AgentEventType.AGENT_PING))); @@ -88,7 +88,7 @@ public void checkTest1() { public void checkTest2() { Rule rule = new Rule(APPLICATION_NAME, SERVICE_TYPE, CheckerCategory.ERROR_COUNT.getName(), 50, "testGroup", false, false, false, ""); - Range range = Range.newUncheckedRange(START_TIME_MILLIS, CURRENT_TIME_MILLIS); + Range range = Range.newReversedRange(START_TIME_MILLIS, CURRENT_TIME_MILLIS); when(mockAgentEventDao.getAgentEvents(AGENT_ID_1, range, Set.of())).thenReturn(List.of(createAgentEvent(AGENT_ID_1, createEventTimestamp(), AgentEventType.AGENT_CLOSED_BY_SERVER))); when(mockAgentEventDao.getAgentEvents(AGENT_ID_2, range, Set.of())).thenReturn(List.of(createAgentEvent(AGENT_ID_2, createEventTimestamp(), AgentEventType.AGENT_SHUTDOWN))); when(mockAgentEventDao.getAgentEvents(AGENT_ID_3, range, Set.of())).thenReturn(List.of(createAgentEvent(AGENT_ID_3, createEventTimestamp(), AgentEventType.AGENT_PING))); diff --git a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollectorTest.java b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollectorTest.java index 8091665592e90..ac96c7743cc3b 100644 --- a/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollectorTest.java +++ b/batch/src/test/java/com/navercorp/pinpoint/batch/alarm/collector/FileDescriptorDataCollectorTest.java @@ -45,7 +45,7 @@ public void collect() { @SuppressWarnings("unchecked") AgentStatDao fileDescriptorDao = (AgentStatDao) mock(AgentStatDao.class); long timeStamp = 1558936971494L; - Range range = Range.newUncheckedRange(timeStamp - DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN, timeStamp); + Range range = Range.newReversedRange(timeStamp - DataCollectorFactory.SLOT_INTERVAL_FIVE_MIN, timeStamp); FileDescriptorBo fileDescriptorBo1_1 = new FileDescriptorBo(); fileDescriptorBo1_1.setOpenFileDescriptorCount(200); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/util/DateLimiter.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/ForwardRangeValidator.java similarity index 66% rename from web/src/main/java/com/navercorp/pinpoint/web/util/DateLimiter.java rename to commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/ForwardRangeValidator.java index b87659ce6fe6f..e5edf9f3e66f4 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/util/DateLimiter.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/ForwardRangeValidator.java @@ -14,11 +14,7 @@ * limitations under the License. */ -package com.navercorp.pinpoint.web.util; - -import com.navercorp.pinpoint.common.server.util.time.Range; - -import org.springframework.stereotype.Component; +package com.navercorp.pinpoint.common.server.util.time; import java.time.Duration; import java.time.Instant; @@ -27,37 +23,32 @@ /** * @author emeroad */ -@Component -public class DateLimiter implements Limiter { +public class ForwardRangeValidator implements RangeValidator { private final Duration limitDay; - public DateLimiter() { - this(Duration.ofDays(2)); - } - - public DateLimiter(Duration limitDay) { + public ForwardRangeValidator(Duration limitDay) { this.limitDay = Objects.requireNonNull(limitDay, "limitDay"); } @Override - public void limit(Instant from, Instant to) { + public void validate(Instant from, Instant to) { Objects.requireNonNull(from, "from"); Objects.requireNonNull(to, "to"); Duration duration = Duration.between(from, to); if (duration.isNegative()) { - throw new IllegalArgumentException("to - from < 0 from:" + from + " to:" + to); + throw new IllegalArgumentException("to - from < 0 from:" + from + " to:" + to); } - if (limitDay.toMillis() < duration.toMillis()) { + if (limitDay.minus(duration).isNegative()) { throw new IllegalArgumentException("limitDay:"+ limitDay + " from:" + from + " to:" + to); } } @Override - public void limit(Range range) { + public void validate(Range range) { Objects.requireNonNull(range, "range"); - limit(range.getFromInstant(), range.getToInstant()); + validate(range.getFromInstant(), range.getToInstant()); } } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/Range.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/Range.java index 9ed0723c9d6de..9b8fe2c79ca36 100644 --- a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/Range.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/Range.java @@ -69,10 +69,18 @@ public static Range newRange(TimeUnit timeUnit, long duration, long toTimestamp) return Range.between(toTimestamp - durationMillis, toTimestamp); } - public static Range newUncheckedRange(long from, long to) { + public static Range newReversedRange(long from, long to) { return new Range(toInstant(from), toInstant(to)); } + /** + * @deprecated Since 3.0.0 Use {@link #newReversedRange(long, long)} + */ + @Deprecated + public static Range newUncheckedRange(long from, long to) { + return newReversedRange(from, to); + } + public long getFrom() { return from.toEpochMilli(); } @@ -133,15 +141,13 @@ public int hashCode() { @Override public String toString() { - final StringBuilder sb = new StringBuilder(64); - sb.append("Range{"); - sb.append(DateTimeFormatUtils.formatSimple(from)); - sb.append(' '); - sb.append(getSign(from, to)); - sb.append(" ").append(DateTimeFormatUtils.formatSimple(to)); - sb.append(" duration=").append(duration()); - sb.append('}'); - return sb.toString(); + return "Range{" + + DateTimeFormatUtils.formatSimple(from) + + ' ' + + getSign(from, to) + + " " + DateTimeFormatUtils.formatSimple(to) + + " duration=" + duration() + + '}'; } static char getSign(Instant from, Instant to) { @@ -156,11 +162,9 @@ static char getSign(Instant from, Instant to) { } public String prettyToString() { - final StringBuilder sb = new StringBuilder("Range{"); - sb.append("from=").append(DateTimeFormatUtils.formatSimple(from)); - sb.append(", to=").append(DateTimeFormatUtils.formatSimple(to)); - sb.append(", duration=").append(TimeUnit.MILLISECONDS.toSeconds(durationMillis())); - sb.append('}'); - return sb.toString(); + return "Range{" + "from=" + DateTimeFormatUtils.formatSimple(from) + + ", to=" + DateTimeFormatUtils.formatSimple(to) + + ", duration=" + TimeUnit.MILLISECONDS.toSeconds(durationMillis()) + + '}'; } } diff --git a/web/src/main/java/com/navercorp/pinpoint/web/util/Limiter.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/RangeValidator.java similarity index 76% rename from web/src/main/java/com/navercorp/pinpoint/web/util/Limiter.java rename to commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/RangeValidator.java index 01cb9c8c8d3d3..5e632b19638ad 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/util/Limiter.java +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/RangeValidator.java @@ -14,17 +14,15 @@ * limitations under the License. */ -package com.navercorp.pinpoint.web.util; - -import com.navercorp.pinpoint.common.server.util.time.Range; +package com.navercorp.pinpoint.common.server.util.time; import java.time.Instant; /** * @author emeroad */ -public interface Limiter { - void limit(Instant from, Instant to); +public interface RangeValidator { + void validate(Instant from, Instant to); - void limit(Range range); + void validate(Range range); } diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/RangeValidatorConfiguration.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/RangeValidatorConfiguration.java new file mode 100644 index 0000000000000..2d6bd6c6e1228 --- /dev/null +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/RangeValidatorConfiguration.java @@ -0,0 +1,52 @@ +package com.navercorp.pinpoint.common.server.util.time; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; + +import java.time.Duration; + +@Configuration +public class RangeValidatorConfiguration { + + @Bean + @Primary + public RangeValidator rangeValidator2d() { + return new ForwardRangeValidator(Duration.ofDays(2)); + } + + @Bean + public RangeValidator rangeValidator7d() { + return new ForwardRangeValidator(Duration.ofDays(7)); + } + + @Bean + public RangeValidator rangeValidator14d() { + return new ForwardRangeValidator(Duration.ofDays(14)); + } + + @Bean + public RangeValidator rangeValidator30d() { + return new ForwardRangeValidator(Duration.ofDays(30)); + } + + @Bean + public RangeValidator reverseRangeValidator2d() { + return new ReverseRangeValidator(Duration.ofDays(2)); + } + + @Bean + public RangeValidator reverseRangeValidator7d() { + return new ReverseRangeValidator(Duration.ofDays(7)); + } + + @Bean + public RangeValidator reverseRangeValidator14d() { + return new ReverseRangeValidator(Duration.ofDays(14)); + } + + @Bean + public RangeValidator reverseRangeValidator30d() { + return new ReverseRangeValidator(Duration.ofDays(30)); + } +} diff --git a/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/ReverseRangeValidator.java b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/ReverseRangeValidator.java new file mode 100644 index 0000000000000..0b8b016503dca --- /dev/null +++ b/commons-server/src/main/java/com/navercorp/pinpoint/common/server/util/time/ReverseRangeValidator.java @@ -0,0 +1,43 @@ +/* + * Copyright 2014 NAVER Corp. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.navercorp.pinpoint.common.server.util.time; + +import java.time.Duration; +import java.time.Instant; + +/** + * @author emeroad + */ +public class ReverseRangeValidator implements RangeValidator { + + private final RangeValidator validator; + + public ReverseRangeValidator(Duration limitDay) { + this.validator = new ForwardRangeValidator(limitDay); + } + + @Override + public void validate(Instant from, Instant to) { + validator.validate(to, from); + } + + @Override + public void validate(Range range) { + // Range already inverted + validator.validate(range.getToInstant(), range.getFromInstant()); + } +} diff --git a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/ForwardRangeValidatorTest.java b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/ForwardRangeValidatorTest.java new file mode 100644 index 0000000000000..9724346509a99 --- /dev/null +++ b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/ForwardRangeValidatorTest.java @@ -0,0 +1,74 @@ +package com.navercorp.pinpoint.common.server.util.time; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.Duration; +import java.time.Instant; + +class ForwardRangeValidatorTest { + + @Test + public void check() { + RangeValidator rangeValidator = new ForwardRangeValidator(Duration.ofDays(2)); + + rangeValidator.validate(Instant.EPOCH, ofDays(2)); + + Instant time = Instant.ofEpochMilli(1000); + rangeValidator.validate(time, time.plus(Duration.ofDays(2))); + + rangeValidator.validate(ofDays(2), ofDays(2)); + } + + @Test + public void checkRange() { + RangeValidator rangeValidator = new ForwardRangeValidator(Duration.ofDays(2)); + + rangeValidator.validate(Range.between(Instant.EPOCH, ofDays(2))); + + Instant time = Instant.ofEpochMilli(1000); + rangeValidator.validate(Range.between(time, time.plus(Duration.ofDays(2)))); + + rangeValidator.validate(Range.between(ofDays(2), ofDays(2))); + } + + @Test + public void checkFail() { + RangeValidator rangeValidator = new ForwardRangeValidator(Duration.ofDays(2)); + Assertions.assertThrows(Exception.class, () -> { + rangeValidator.validate(Instant.EPOCH, ofDays(2).plusMillis(1)); + }); + + Assertions.assertThrows(Exception.class, () -> { + rangeValidator.validate(ofDays(2), Instant.EPOCH); + }); + } + + @Test + public void checkRangeFail() { + RangeValidator rangeValidator = new ForwardRangeValidator(Duration.ofDays(2)); + + Assertions.assertThrows(Exception.class, () -> { + rangeValidator.validate(Range.between(Instant.EPOCH, ofDays(2).plusMillis(1))); + }); + + Assertions.assertThrows(Exception.class, () -> { + rangeValidator.validate(Range.between(ofDays(2), Instant.EPOCH)); + }); + } + + private Instant ofDays(long days) { + return Instant.EPOCH.plus(Duration.ofDays(days)); + } + + @Test + public void checkRange_Nanos() { + RangeValidator rangeValidator = new ForwardRangeValidator(Duration.ofNanos(1)); + + Assertions.assertThrows(Exception.class, () -> { + rangeValidator.validate(Instant.EPOCH, Instant.EPOCH.plusNanos(2L)); + }); + + } + +} \ No newline at end of file diff --git a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/RangeTest.java b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/RangeTest.java index 54c17acead175..afc634ee46ef4 100644 --- a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/RangeTest.java +++ b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/RangeTest.java @@ -59,7 +59,7 @@ public void testRange_String() { Range range2 = Range.between(0, 1); assertThat(range2.toString()).contains(" < "); - Range range3 = Range.newUncheckedRange(1, 0); + Range range3 = Range.newReversedRange(1, 0); assertThat(range3.toString()).contains(" > "); } diff --git a/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/ReverseRangeValidatorTest.java b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/ReverseRangeValidatorTest.java new file mode 100644 index 0000000000000..958668db7ce3b --- /dev/null +++ b/commons-server/src/test/java/com/navercorp/pinpoint/common/server/util/time/ReverseRangeValidatorTest.java @@ -0,0 +1,33 @@ +package com.navercorp.pinpoint.common.server.util.time; + +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +import java.time.Duration; +import java.time.Instant; + +class ReverseRangeValidatorTest { + + @Test + public void check() { + RangeValidator rangeValidator = new ReverseRangeValidator(Duration.ofDays(2)); + + rangeValidator.validate(ofDays(2), Instant.EPOCH); + + rangeValidator.validate(Range.newReversedRange(ofDays(2).toEpochMilli(), Instant.EPOCH.toEpochMilli())); + } + + @Test + public void check_failure() { + RangeValidator rangeValidator = new ReverseRangeValidator(Duration.ofDays(2)); + + Assertions.assertThrows(Exception.class, () -> { + rangeValidator.validate(ofDays(3), Instant.EPOCH); + }); + } + + private Instant ofDays(long days) { + return Instant.EPOCH.plus(Duration.ofDays(days)); + } + +} \ No newline at end of file diff --git a/pinot/pinot-batch/src/main/java/com/navercorp/pinpoint/pinot/alarm/checker/PinotAlarmChecker.java b/pinot/pinot-batch/src/main/java/com/navercorp/pinpoint/pinot/alarm/checker/PinotAlarmChecker.java index 5cfea4639f1ae..d4a6d0925bc31 100644 --- a/pinot/pinot-batch/src/main/java/com/navercorp/pinpoint/pinot/alarm/checker/PinotAlarmChecker.java +++ b/pinot/pinot-batch/src/main/java/com/navercorp/pinpoint/pinot/alarm/checker/PinotAlarmChecker.java @@ -17,10 +17,10 @@ package com.navercorp.pinpoint.pinot.alarm.checker; import com.navercorp.pinpoint.batch.alarm.checker.PinotAlarmCheckerInterface; +import com.navercorp.pinpoint.common.server.util.time.Range; import com.navercorp.pinpoint.pinot.alarm.collector.PinotDataCollector; import com.navercorp.pinpoint.pinot.alarm.condition.AlarmCondition; import com.navercorp.pinpoint.pinot.alarm.vo.PinotAlarmRule; -import com.navercorp.pinpoint.common.server.util.time.Range; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -144,7 +144,7 @@ public String getUnit() { } public boolean[] check(long timeSlotEndTime) { - Range range = Range.newUncheckedRange(timeSlotEndTime - SLOT_INTERVAL_FIVE_MIN, timeSlotEndTime); + Range range = Range.newReversedRange(timeSlotEndTime - SLOT_INTERVAL_FIVE_MIN, timeSlotEndTime); collectedValue = dataCollector.collect(serviceName, applicationName, target, range); for (int i = 0; i < rules.size(); i++) { diff --git a/web/src/main/java/com/navercorp/pinpoint/web/PinpointWebModule.java b/web/src/main/java/com/navercorp/pinpoint/web/PinpointWebModule.java index 5ce6c20142e12..471d20d1f008b 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/PinpointWebModule.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/PinpointWebModule.java @@ -3,6 +3,7 @@ import com.navercorp.pinpoint.common.server.CommonsServerConfiguration; import com.navercorp.pinpoint.common.server.cluster.zookeeper.config.ClusterConfigurationFactory; import com.navercorp.pinpoint.common.server.profile.StandardEnvironmentLogger; +import com.navercorp.pinpoint.common.server.util.time.RangeValidatorConfiguration; import com.navercorp.pinpoint.datasource.MainDataSourceConfiguration; import com.navercorp.pinpoint.web.applicationmap.config.ApplicationMapModule; import com.navercorp.pinpoint.web.cache.CacheConfiguration; @@ -28,6 +29,7 @@ WebAppPropertySources.class, CommonsServerConfiguration.class, ComponentConfiguration.class, + RangeValidatorConfiguration.class, WebServerConfig.class, WebMvcConfig.class, diff --git a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/MapController.java b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/MapController.java index 3843ad41ecc47..6678057b63152 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/MapController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/applicationmap/controller/MapController.java @@ -19,6 +19,7 @@ import com.fasterxml.jackson.annotation.JsonView; import com.navercorp.pinpoint.common.server.util.time.Range; +import com.navercorp.pinpoint.common.server.util.time.RangeValidator; import com.navercorp.pinpoint.web.applicationmap.ApplicationMap; import com.navercorp.pinpoint.web.applicationmap.MapWrap; import com.navercorp.pinpoint.web.applicationmap.histogram.TimeHistogramFormat; @@ -30,7 +31,6 @@ import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramService; import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramServiceOption; import com.navercorp.pinpoint.web.component.ApplicationFactory; -import com.navercorp.pinpoint.web.util.Limiter; import com.navercorp.pinpoint.web.validation.NullOrNotBlank; import com.navercorp.pinpoint.web.view.ApplicationTimeHistogramViewModel; import com.navercorp.pinpoint.web.vo.Application; @@ -69,7 +69,7 @@ public class MapController { private final MapService mapService; private final ResponseTimeHistogramService responseTimeHistogramService; - private final Limiter dateLimit; + private final RangeValidator rangeValidator; private final ApplicationFactory applicationFactory; private static final String DEFAULT_SEARCH_DEPTH = "4"; @@ -78,13 +78,13 @@ public class MapController { public MapController( MapService mapService, ResponseTimeHistogramService responseTimeHistogramService, - Limiter dateLimit, + RangeValidator rangeValidator, ApplicationFactory applicationFactory ) { this.mapService = Objects.requireNonNull(mapService, "mapService"); this.responseTimeHistogramService = Objects.requireNonNull(responseTimeHistogramService, "responseTimeHistogramService"); - this.dateLimit = Objects.requireNonNull(dateLimit, "dateLimit"); + this.rangeValidator = Objects.requireNonNull(rangeValidator, "rangeValidator"); this.applicationFactory = Objects.requireNonNull(applicationFactory, "applicationFactory"); } @@ -120,7 +120,7 @@ public MapWrap getServerMapDataV2( boolean useLoadHistogramFormat ) { final Range range = Range.between(from, to); - this.dateLimit.limit(range); + this.rangeValidator.validate(range); final SearchOption searchOption = searchOptionBuilder().build(callerRange, calleeRange, bidirectional, wasOnly); @@ -162,7 +162,7 @@ public MapWrap getServerMapDataV2( boolean useLoadHistogramFormat ) { final Range range = Range.between(from, to); - this.dateLimit.limit(range); + this.rangeValidator.validate(range); final SearchOption searchOption = searchOptionBuilder().build(callerRange, calleeRange, bidirectional, wasOnly); @@ -201,7 +201,7 @@ public ApplicationTimeHistogramViewModel getResponseTimeHistogramData( @RequestParam("from") @PositiveOrZero long from, @RequestParam("to") @PositiveOrZero long to) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); final Application application = applicationFactory.createApplicationByTypeName(applicationName, serviceTypeName); @@ -222,7 +222,7 @@ public NodeHistogramSummary postResponseTimeHistogramDataV2( boolean useLoadHistogramFormat ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); final Application application = applicationFactory.createApplication(applicationName, serviceTypeCode); @@ -262,7 +262,7 @@ public NodeHistogramSummary getResponseTimeHistogramDataV2( boolean useLoadHistogramFormat ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); if (fromApplicationNames.size() != fromServiceTypeCodes.size()) { throw new IllegalArgumentException( @@ -325,7 +325,7 @@ public LinkHistogramSummary getLinkTimeHistogramData( boolean useLoadHistogramFormat ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); final Application fromApplication = this.createApplication(fromApplicationName, fromServiceTypeCode); final Application toApplication = this.createApplication(toApplicationName, toServiceTypeCode); @@ -361,7 +361,7 @@ public MapWrap getServerMapDataV3( @RequestParam(value = "useStatisticsAgentState", defaultValue = "false", required = false) boolean useStatisticsAgentState) { final Range range = Range.between(from, to); - this.dateLimit.limit(range); + this.rangeValidator.validate(range); final Application application = applicationFactory.createApplication(applicationName, serviceTypeCode); SearchOption searchOption = searchOptionBuilder().build(callerRange, calleeRange, bidirectional, wasOnly); @@ -391,7 +391,7 @@ public MapWrap getServerMapDataV3( @RequestParam(value = "useStatisticsAgentState", defaultValue = "false", required = false) boolean useStatisticsAgentState) { final Range range = Range.between(from, to); - this.dateLimit.limit(range); + this.rangeValidator.validate(range); final Application application = applicationFactory.createApplicationByTypeName(applicationName, serviceTypeName); SearchOption searchOption = searchOptionBuilder().build(callerRange, calleeRange, bidirectional, wasOnly); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/HeatMapController.java b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/HeatMapController.java index b7c68585078b2..47bea7a4bec62 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/HeatMapController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/HeatMapController.java @@ -60,7 +60,7 @@ public ResultView dragScatterArea( final DragArea dragArea = DragArea.normalize(x1, x2, y1, y2); // TODO range check verification exception occurs. "from" is bigger than "to" - final Range range = Range.newUncheckedRange(x1, x2); + final Range range = Range.newReversedRange(x1, x2); logger.debug("drag scatter data. RANGE={}, LIMIT={}", range, limit); final Dot.Status dotStatus = toDotStatus(boolDotStatus); final DragAreaQuery query = new DragAreaQuery(dragArea, agentId, dotStatus); @@ -134,7 +134,7 @@ public HeatMapController.HeatMapViewModel getHeatMapData( @RequestParam("to") @PositiveOrZero long to) { // TODO range check verification exception occurs. "from" is bigger than "to" - final Range range = Range.newUncheckedRange(from, to); + final Range range = Range.newReversedRange(from, to); logger.debug("fetch getHeatMapData. RANGE={}, ", range); final LimitedScanResult scanResult = diff --git a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java index eb945940d953d..b179e37ca28a5 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ResponseTimeController.java @@ -17,13 +17,13 @@ package com.navercorp.pinpoint.web.authorization.controller; import com.navercorp.pinpoint.common.server.util.time.Range; +import com.navercorp.pinpoint.common.server.util.time.RangeValidator; import com.navercorp.pinpoint.web.applicationmap.histogram.Histogram; import com.navercorp.pinpoint.web.applicationmap.link.LinkHistogramSummary; import com.navercorp.pinpoint.web.applicationmap.nodes.NodeHistogramSummary; import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramService; import com.navercorp.pinpoint.web.applicationmap.service.ResponseTimeHistogramServiceOption; import com.navercorp.pinpoint.web.component.ApplicationFactory; -import com.navercorp.pinpoint.web.util.Limiter; import com.navercorp.pinpoint.web.view.TimeSeries.TimeSeriesView; import com.navercorp.pinpoint.web.view.histogram.HistogramView; import com.navercorp.pinpoint.web.view.histogram.ServerHistogramView; @@ -55,13 +55,13 @@ public class ResponseTimeController { private final Logger logger = LogManager.getLogger(this.getClass()); private final ResponseTimeHistogramService responseTimeHistogramService; - private final Limiter dateLimit; + private final RangeValidator rangeValidator; private final ApplicationFactory applicationFactory; public ResponseTimeController(ResponseTimeHistogramService responseTimeHistogramService, - Limiter dateLimit, ApplicationFactory applicationFactory) { + RangeValidator rangeValidator, ApplicationFactory applicationFactory) { this.responseTimeHistogramService = Objects.requireNonNull(responseTimeHistogramService, "responseTimeHistogramService"); - this.dateLimit = Objects.requireNonNull(dateLimit, "dateLimit"); + this.rangeValidator = Objects.requireNonNull(rangeValidator, "dateLimit"); this.applicationFactory = Objects.requireNonNull(applicationFactory, "applicationFactory"); } @@ -74,7 +74,7 @@ public ServerHistogramView getWasServerHistogramData( @RequestParam("to") @PositiveOrZero long to ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application application = createApplication(applicationName, serviceTypeCode, serviceTypeName); ResponseTimeHistogramServiceOption option = createWasOptionBuilder(application, range) @@ -93,7 +93,7 @@ public Histogram getWasHistogram( @RequestParam("to") @PositiveOrZero long to ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application application = createApplication(applicationName, serviceTypeCode, serviceTypeName); ResponseTimeHistogramServiceOption option = createWasOptionBuilder(application, range) @@ -125,7 +125,7 @@ public TimeSeriesView getWasTimeHistogramChart( @PathVariable("type") String type ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application application = createApplication(applicationName, serviceTypeCode, serviceTypeName); TimeHistogramType timeHistogramType = TimeHistogramType.valueOf(type); @@ -145,7 +145,7 @@ public HistogramView getWasHistogramData( @RequestParam("to") @PositiveOrZero long to ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application application = createApplication(applicationName, serviceTypeCode, serviceTypeName); ResponseTimeHistogramServiceOption option = createWasOptionBuilder(application, range) @@ -172,7 +172,7 @@ public ServerHistogramView postNodeServerHistogramData( @RequestBody ApplicationPairs applicationPairs ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application application = createApplication(applicationName, serviceTypeCode, serviceTypeName); ResponseTimeHistogramServiceOption option = createOptionBuilder(application, range, applicationPairs) @@ -192,7 +192,7 @@ public HistogramView postNodeHistogramData( @RequestBody ApplicationPairs applicationPairs ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application application = createApplication(applicationName, serviceTypeCode, serviceTypeName); ResponseTimeHistogramServiceOption option = createOptionBuilder(application, range, applicationPairs) @@ -214,7 +214,7 @@ public TimeSeriesView postNodeTimeHistogramChart( @RequestBody ApplicationPairs applicationPairs ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application application = createApplication(applicationName, serviceTypeCode, serviceTypeName); TimeHistogramType timeHistogramType = TimeHistogramType.valueOf(type); @@ -238,7 +238,7 @@ public HistogramView getLinkHistogramData( @RequestParam("to") @PositiveOrZero long to ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application fromApplication = createApplication(fromApplicationName, fromServiceTypeCode, fromServiceTypeName); Application toApplication = createApplication(toApplicationName, toServiceTypeCode, toServiceTypeName); @@ -262,7 +262,7 @@ public TimeSeriesView getLinkTimeHistogramChart( @PathVariable("type") String type ) { final Range range = Range.between(from, to); - dateLimit.limit(range); + this.rangeValidator.validate(range); Application fromApplication = createApplication(fromApplicationName, fromServiceTypeCode, fromServiceTypeName); Application toApplication = createApplication(toApplicationName, toServiceTypeCode, toServiceTypeName); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ScatterChartController.java b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ScatterChartController.java index 78ac7c685efcf..0daf105d08a8e 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ScatterChartController.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/authorization/controller/ScatterChartController.java @@ -122,7 +122,7 @@ public ScatterView.ResultView getScatterData( final int limit = LimitUtils.checkRange(limitParam); // TODO: range check verification exception occurs. "from" is bigger than "to" - final Range range = Range.newUncheckedRange(from, to); + final Range range = Range.newReversedRange(from, to); logger.debug( "fetch scatter data. RANGE: {}, X-Group-Unit: {}, Y-Group-Unit: {}, LIMIT: {}, " + "BACKWARD_DIRECTION: {}, FILTER: {}", diff --git a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java index e710f4436b8ef..cdc3b0f563f0f 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/dao/hbase/HbaseApplicationTraceIndexDao.java @@ -263,7 +263,7 @@ public LimitedScanResult> scanTraceIndex(String applicationN LastRowAccessor lastRowAccessor = new LastRowAccessor(); - final Range range = Range.newUncheckedRange(dragArea.getXLow(), dragArea.getXHigh()); + final Range range = Range.newReversedRange(dragArea.getXLow(), dragArea.getXHigh()); logger.debug("scanTraceIndex range:{}", range); final Scan scan = newFuzzyScanner(applicationName, dragArea, range); @@ -323,7 +323,7 @@ private LimitedScanResult> scanScatterData0(String applicationName, Objects.requireNonNull(dragAreaQuery, "dragAreaQuery"); DragArea dragArea = dragAreaQuery.getDragArea(); - Range range = Range.newUncheckedRange(dragArea.getXLow(), dragArea.getXHigh()); + Range range = Range.newReversedRange(dragArea.getXLow(), dragArea.getXHigh()); logger.debug("scanTraceScatterData-range:{}", range); LastRowAccessor lastRowAccessor = new LastRowAccessor(); diff --git a/web/src/main/java/com/navercorp/pinpoint/web/vo/RangeFactory.java b/web/src/main/java/com/navercorp/pinpoint/web/vo/RangeFactory.java index 962628cd6b074..f24e12b75573a 100644 --- a/web/src/main/java/com/navercorp/pinpoint/web/vo/RangeFactory.java +++ b/web/src/main/java/com/navercorp/pinpoint/web/vo/RangeFactory.java @@ -44,7 +44,7 @@ public Range createStatisticsRange(Range range) { // In this case, the Range is reversed, so we instead subtract 1 from the startTime. final long startTime = timeSlot.getTimeSlot(range.getFrom()) - 1; final long endTime = timeSlot.getTimeSlot(range.getTo()); - return Range.newUncheckedRange(startTime, endTime); + return Range.newReversedRange(startTime, endTime); } } diff --git a/web/src/test/java/com/navercorp/pinpoint/web/util/DateLimiterTest.java b/web/src/test/java/com/navercorp/pinpoint/web/util/DateLimiterTest.java deleted file mode 100644 index ff9d0f75dcf10..0000000000000 --- a/web/src/test/java/com/navercorp/pinpoint/web/util/DateLimiterTest.java +++ /dev/null @@ -1,83 +0,0 @@ -/* - * Copyright 2014 NAVER Corp. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.navercorp.pinpoint.web.util; - -import com.navercorp.pinpoint.common.server.util.time.Range; -import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.Test; - -import java.time.Duration; -import java.time.Instant; - -/** - * @author emeroad - */ -public class DateLimiterTest { - - @Test - public void check() { - Limiter limiter = new DateLimiter(Duration.ofDays(2)); - - limiter.limit(Instant.EPOCH, ofDays(2)); - - Instant time = Instant.ofEpochMilli(1000); - limiter.limit(time, time.plus(Duration.ofDays(2))); - - limiter.limit(ofDays(2), ofDays(2)); - } - - @Test - public void checkRange() { - Limiter limiter = new DateLimiter(Duration.ofDays(2)); - - limiter.limit(Range.between(Instant.EPOCH, ofDays(2))); - - Instant time = Instant.ofEpochMilli(1000); - limiter.limit(Range.between(time, time.plus(Duration.ofDays(2)))); - - limiter.limit(Range.between(ofDays(2), ofDays(2))); - } - - @Test - public void checkFail() { - Limiter limiter = new DateLimiter(Duration.ofDays(2)); - Assertions.assertThrows(Exception.class, () -> { - limiter.limit(Instant.EPOCH, ofDays(2).plusMillis(1)); - }); - - Assertions.assertThrows(Exception.class, () -> { - limiter.limit(ofDays(2), Instant.EPOCH); - }); - } - - @Test - public void checkRangeFail() { - Limiter limiter = new DateLimiter(Duration.ofDays(2)); - - Assertions.assertThrows(Exception.class, () -> { - limiter.limit(Range.between(Instant.EPOCH, ofDays(2).plusMillis(1))); - }); - - Assertions.assertThrows(Exception.class, () -> { - limiter.limit(Range.between(ofDays(2), Instant.EPOCH)); - }); - } - - private Instant ofDays(long days) { - return Instant.EPOCH.plus(Duration.ofDays(days)); - } -}