(improvement)(chat) support TimeMode LAST, RECENT mode (#752)

This commit is contained in:
lexluo09
2024-02-23 20:40:30 +08:00
committed by GitHub
parent 617cd87a48
commit 3893e897cb
3 changed files with 38 additions and 16 deletions

View File

@@ -3,6 +3,7 @@ package com.tencent.supersonic.chat.core.utils;
import com.tencent.supersonic.chat.api.pojo.ViewSchema; import com.tencent.supersonic.chat.api.pojo.ViewSchema;
import com.tencent.supersonic.chat.core.pojo.QueryContext; import com.tencent.supersonic.chat.core.pojo.QueryContext;
import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.common.pojo.enums.TimeMode;
import com.tencent.supersonic.common.util.DatePeriodEnum; import com.tencent.supersonic.common.util.DatePeriodEnum;
import com.tencent.supersonic.common.util.DateUtils; import com.tencent.supersonic.common.util.DateUtils;
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig; import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
@@ -47,18 +48,19 @@ public class S2SqlDateHelper {
} }
Integer unit = defaultConfig.getUnit(); Integer unit = defaultConfig.getUnit();
String period = defaultConfig.getPeriod(); String period = defaultConfig.getPeriod();
TimeMode timeMode = defaultConfig.getTimeMode();
if (Objects.nonNull(unit)) { if (Objects.nonNull(unit)) {
// If the unit is set to less than 0, then do not add relative date. // If the unit is set to less than 0, then do not add relative date.
if (unit < 0) { if (unit < 0) {
return Pair.of(null, null); return Pair.of(null, null);
} }
DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period); DatePeriodEnum datePeriodEnum = DatePeriodEnum.get(period);
if (Objects.isNull(datePeriodEnum)) { String startDate = DateUtils.getBeforeDate(unit, datePeriodEnum);
return Pair.of(DateUtils.getBeforeDate(unit), DateUtils.getBeforeDate(1)); String endDate = DateUtils.getBeforeDate(1, datePeriodEnum);
} else { if (TimeMode.LAST.equals(timeMode)) {
return Pair.of(DateUtils.getBeforeDate(unit, datePeriodEnum), endDate = startDate;
DateUtils.getBeforeDate(1, datePeriodEnum));
} }
return Pair.of(startDate, endDate);
} }
return Pair.of(defaultDate, defaultDate); return Pair.of(defaultDate, defaultDate);
} }

View File

@@ -7,6 +7,7 @@ import com.tencent.supersonic.chat.core.pojo.QueryContext;
import com.tencent.supersonic.common.pojo.Constants; import com.tencent.supersonic.common.pojo.Constants;
import com.tencent.supersonic.common.pojo.enums.QueryType; import com.tencent.supersonic.common.pojo.enums.QueryType;
import com.tencent.supersonic.common.pojo.enums.TimeMode; import com.tencent.supersonic.common.pojo.enums.TimeMode;
import com.tencent.supersonic.common.util.DateUtils;
import com.tencent.supersonic.headless.api.pojo.QueryConfig; import com.tencent.supersonic.headless.api.pojo.QueryConfig;
import com.tencent.supersonic.headless.api.pojo.SchemaElement; import com.tencent.supersonic.headless.api.pojo.SchemaElement;
import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig; import com.tencent.supersonic.headless.api.pojo.TimeDefaultConfig;
@@ -24,10 +25,10 @@ class S2SqlDateHelperTest {
QueryContext queryContext = buildQueryContext(viewId); QueryContext queryContext = buildQueryContext(viewId);
String referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, null); String referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, null);
Assert.assertNotNull(referenceDate); Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(0));
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
Assert.assertNotNull(referenceDate); Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(0));
ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId); ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId);
QueryConfig queryConfig = viewSchema.getQueryConfig(); QueryConfig queryConfig = viewSchema.getQueryConfig();
@@ -38,11 +39,11 @@ class S2SqlDateHelperTest {
queryConfig.getTagTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig); queryConfig.getTagTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
Assert.assertNotNull(referenceDate); Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(20));
timeDefaultConfig.setUnit(1); timeDefaultConfig.setUnit(1);
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
Assert.assertNotNull(referenceDate); Assert.assertEquals(referenceDate, DateUtils.getBeforeDate(1));
timeDefaultConfig.setUnit(-1); timeDefaultConfig.setUnit(-1);
referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId); referenceDate = S2SqlDateHelper.getReferenceDate(queryContext, viewId);
@@ -55,10 +56,12 @@ class S2SqlDateHelperTest {
QueryContext queryContext = buildQueryContext(viewId); QueryContext queryContext = buildQueryContext(viewId);
Pair<String, String> startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, null, QueryType.TAG); Pair<String, String> startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, null, QueryType.TAG);
Assert.assertNotNull(startEndDate); Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(0));
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(0));
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG); startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
Assert.assertNotNull(startEndDate); Assert.assertNull(startEndDate.getLeft());
Assert.assertNull(startEndDate.getRight());
ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId); ViewSchema viewSchema = queryContext.getSemanticSchema().getViewSchemaMap().get(viewId);
QueryConfig queryConfig = viewSchema.getQueryConfig(); QueryConfig queryConfig = viewSchema.getQueryConfig();
@@ -70,20 +73,34 @@ class S2SqlDateHelperTest {
queryConfig.getMetricTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig); queryConfig.getMetricTypeDefaultConfig().setTimeDefaultConfig(timeDefaultConfig);
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG); startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
Assert.assertNotNull(startEndDate); Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(20));
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(20));
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC); startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
Assert.assertNotNull(startEndDate); Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(20));
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(20));
timeDefaultConfig.setUnit(1); timeDefaultConfig.setUnit(2);
timeDefaultConfig.setTimeMode(TimeMode.RECENT); timeDefaultConfig.setTimeMode(TimeMode.RECENT);
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC); startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
Assert.assertNotNull(startEndDate); Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(2));
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(1));
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.TAG);
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(2));
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(1));
timeDefaultConfig.setUnit(-1); timeDefaultConfig.setUnit(-1);
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC); startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
Assert.assertNull(startEndDate.getLeft()); Assert.assertNull(startEndDate.getLeft());
Assert.assertNull(startEndDate.getRight()); Assert.assertNull(startEndDate.getRight());
timeDefaultConfig.setTimeMode(TimeMode.LAST);
timeDefaultConfig.setPeriod(Constants.DAY);
timeDefaultConfig.setUnit(5);
startEndDate = S2SqlDateHelper.getStartEndDate(queryContext, viewId, QueryType.METRIC);
Assert.assertEquals(startEndDate.getLeft(), DateUtils.getBeforeDate(5));
Assert.assertEquals(startEndDate.getRight(), DateUtils.getBeforeDate(5));
} }
private QueryContext buildQueryContext(Long viewId) { private QueryContext buildQueryContext(Long viewId) {

View File

@@ -68,6 +68,9 @@ public class DateUtils {
} }
public static String getBeforeDate(int intervalDay, DatePeriodEnum datePeriodEnum) { public static String getBeforeDate(int intervalDay, DatePeriodEnum datePeriodEnum) {
if (Objects.isNull(datePeriodEnum)) {
return getBeforeDate(intervalDay);
}
SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT); SimpleDateFormat dateFormat = new SimpleDateFormat(DATE_FORMAT);
String currentDate = dateFormat.format(new Date()); String currentDate = dateFormat.format(new Date());
return getBeforeDate(currentDate, intervalDay, datePeriodEnum); return getBeforeDate(currentDate, intervalDay, datePeriodEnum);
@@ -101,7 +104,7 @@ public class DateUtils {
int month = tempDate.get(ChronoField.MONTH_OF_YEAR); int month = tempDate.get(ChronoField.MONTH_OF_YEAR);
int firstMonthOfQuarter = ((month - 1) / 3) * 3 + 1; int firstMonthOfQuarter = ((month - 1) / 3) * 3 + 1;
return tempDate.with(ChronoField.MONTH_OF_YEAR, firstMonthOfQuarter) return tempDate.with(ChronoField.MONTH_OF_YEAR, firstMonthOfQuarter)
.with(TemporalAdjusters.firstDayOfMonth()); .with(TemporalAdjusters.firstDayOfMonth());
}; };
result = result.with(firstDayOfQuarter); result = result.with(firstDayOfQuarter);
} }