Fix timebucket conversion issue (#5014)
This commit is contained in:
parent
00619a9a3d
commit
d264f914d5
|
|
@ -104,6 +104,7 @@ public class TimeBucket {
|
|||
public static long getTimestamp(long timeBucket, DownSampling downsampling) {
|
||||
Calendar calendar = Calendar.getInstance();
|
||||
calendar.setTimeInMillis(0);
|
||||
|
||||
switch (downsampling) {
|
||||
case Second:
|
||||
calendar.set(Calendar.SECOND, (int) (timeBucket % 100));
|
||||
|
|
@ -117,11 +118,12 @@ public class TimeBucket {
|
|||
case Day:
|
||||
calendar.set(Calendar.DAY_OF_MONTH, (int) (timeBucket % 100));
|
||||
timeBucket /= 100;
|
||||
calendar.set(Calendar.MONTH, (int) (timeBucket % 100) - 1);
|
||||
calendar.set(Calendar.YEAR, (int) (timeBucket / 100));
|
||||
break;
|
||||
default:
|
||||
throw new UnexpectedException("Unknown downsampling value.");
|
||||
}
|
||||
|
||||
return calendar.getTimeInMillis();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,80 @@
|
|||
/*
|
||||
* Licensed to the Apache Software Foundation (ASF) under one or more
|
||||
* contributor license agreements. See the NOTICE file distributed with
|
||||
* this work for additional information regarding copyright ownership.
|
||||
* The ASF licenses this file to You 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 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;
|
||||
|
||||
@RunWith(Parameterized.class)
|
||||
public class TimeBucketTest {
|
||||
private static final long NOW = System.currentTimeMillis();
|
||||
|
||||
@Parameterized.Parameters
|
||||
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)
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
private DownSampling downSampling;
|
||||
private TimeUnit unit;
|
||||
private long time;
|
||||
|
||||
public TimeBucketTest(DownSampling downSampling, TimeUnit unit, long time) {
|
||||
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));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -79,8 +79,8 @@ public class AggregationQuery implements IAggregationQueryDAO {
|
|||
});
|
||||
}
|
||||
final SelectSubQueryImpl<SelectQueryImpl> subQuery = where
|
||||
.and(gte(InfluxClient.TIME, InfluxClient.timeInterval(duration.getStartTimeBucket())))
|
||||
.and(lte(InfluxClient.TIME, InfluxClient.timeInterval(duration.getEndTimeBucket())))
|
||||
.and(gte(InfluxClient.TIME, duration.getStartTimestamp()))
|
||||
.and(lte(InfluxClient.TIME, duration.getEndTimestamp()))
|
||||
.groupBy(InfluxConstants.TagName.ENTITY_ID);
|
||||
|
||||
query.setSubQuery(subQuery);
|
||||
|
|
|
|||
|
|
@ -82,8 +82,8 @@ public class MetricsQuery implements IMetricsQueryDAO {
|
|||
}
|
||||
|
||||
queryWhereQuery
|
||||
.and(gte(InfluxClient.TIME, InfluxClient.timeInterval(duration.getStartTimeBucket())))
|
||||
.and(lte(InfluxClient.TIME, InfluxClient.timeInterval(duration.getEndTimeBucket())))
|
||||
.and(gte(InfluxClient.TIME, duration.getStartTimestamp()))
|
||||
.and(lte(InfluxClient.TIME, duration.getEndTimestamp()))
|
||||
.groupBy(InfluxConstants.TagName.ENTITY_ID);
|
||||
|
||||
List<QueryResult.Series> seriesList = client.queryForSeries(queryWhereQuery);
|
||||
|
|
|
|||
Loading…
Reference in New Issue