未验证 提交 d264f914 编写于 作者: D Daming 提交者: GitHub

Fix timebucket conversion issue (#5014)

上级 00619a9a
......@@ -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();
}
......
/*
* 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);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册