From d0b020e5a81a55c61d49eebc5337e5a8726b8d66 Mon Sep 17 00:00:00 2001 From: Daming Date: Fri, 2 Oct 2020 17:05:50 +0800 Subject: [PATCH] fix timebucket converter issue (#5585) --- .../oap/server/core/analysis/TimeBucket.java | 5 ++ .../server/core/analysis/TimeBucketTest.java | 63 +++++++++---------- 2 files changed, 34 insertions(+), 34 deletions(-) diff --git a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/TimeBucket.java b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/TimeBucket.java index 3694546e97..8c32c5e29e 100644 --- a/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/TimeBucket.java +++ b/oap-server/server-core/src/main/java/org/apache/skywalking/oap/server/core/analysis/TimeBucket.java @@ -104,17 +104,22 @@ public class TimeBucket { public static long getTimestamp(long timeBucket, DownSampling downsampling) { Calendar calendar = Calendar.getInstance(); calendar.setTimeInMillis(0); + calendar.set(Calendar.MINUTE, 0); + calendar.set(Calendar.HOUR_OF_DAY, 0); switch (downsampling) { case Second: calendar.set(Calendar.SECOND, (int) (timeBucket % 100)); timeBucket /= 100; + // Fall through case Minute: calendar.set(Calendar.MINUTE, (int) (timeBucket % 100)); timeBucket /= 100; + // Fall through case Hour: calendar.set(Calendar.HOUR_OF_DAY, (int) (timeBucket % 100)); timeBucket /= 100; + // Fall through case Day: calendar.set(Calendar.DAY_OF_MONTH, (int) (timeBucket % 100)); timeBucket /= 100; diff --git a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java index f6cff89337..2dedb1c101 100644 --- a/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java +++ b/oap-server/server-core/src/test/java/org/apache/skywalking/oap/server/core/analysis/TimeBucketTest.java @@ -18,63 +18,58 @@ package org.apache.skywalking.oap.server.core.analysis; -import java.util.concurrent.TimeUnit; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; -import static java.util.concurrent.TimeUnit.DAYS; -import static java.util.concurrent.TimeUnit.HOURS; -import static java.util.concurrent.TimeUnit.MILLISECONDS; -import static java.util.concurrent.TimeUnit.MINUTES; -import static java.util.concurrent.TimeUnit.SECONDS; +import java.util.Calendar; +import java.util.TimeZone; @RunWith(Parameterized.class) public class TimeBucketTest { private static final long NOW = System.currentTimeMillis(); @Parameterized.Parameters - public static Object[][] parameters() { - return new Object[][] { - { + public static Object[] parameters() { + return new Object[]{ DownSampling.Second, - SECONDS, - MILLISECONDS.toSeconds(NOW) - }, - { DownSampling.Minute, - MINUTES, - MILLISECONDS.toMinutes(NOW) - }, - { DownSampling.Hour, - HOURS, - MILLISECONDS.toHours(NOW) - }, - { - DownSampling.Day, - DAYS, - MILLISECONDS.toDays(NOW) - } + DownSampling.Day }; } private DownSampling downSampling; - private TimeUnit unit; - private long time; - public TimeBucketTest(DownSampling downSampling, TimeUnit unit, long time) { + public TimeBucketTest(DownSampling downSampling) { this.downSampling = downSampling; - this.unit = unit; - this.time = time; } @Test public void testConversion() { - long timestamp = TimeBucket - .getTimestamp(TimeBucket.getTimeBucket(NOW, downSampling)); - Assert.assertEquals(timestamp, unit.toMillis(time)); - } + long timestamp = TimeBucket.getTimestamp(TimeBucket.getTimeBucket(NOW, downSampling)); + Calendar instance = Calendar.getInstance(TimeZone.getDefault()); + instance.setTimeInMillis(NOW); + switch (downSampling) { + case Day: { + instance.set(Calendar.HOUR_OF_DAY, 0); + // Fall through + } + case Hour: { + instance.set(Calendar.MINUTE, 0); + // Fall through + } + case Minute: { + instance.set(Calendar.SECOND, 0); + // Fall through + } + case Second: { + instance.set(Calendar.MILLISECOND, 0); + // Fall through + } + } + Assert.assertEquals(instance.getTimeInMillis(), timestamp); + } } -- GitLab