mirror of
https://github.com/kestra-io/kestra.git
synced 2025-12-19 18:05:41 -05:00
Fix week format in filter
This commit is contained in:
@@ -656,6 +656,65 @@ public abstract class AbstractExecutionRepositoryTest {
|
||||
assertThat(data).first().hasFieldOrPropertyWithValue("id", execution.getId());
|
||||
}
|
||||
|
||||
@Test
|
||||
void dashboard_fetchData_365Days_verifiesDateGrouping() throws IOException {
|
||||
var tenantId = TestsUtils.randomTenant(this.getClass().getSimpleName());
|
||||
var executionDuration = Duration.ofMinutes(220);
|
||||
var executionCreateDate = Instant.now();
|
||||
|
||||
// Create an execution within the 365-day range
|
||||
Execution execution = Execution.builder()
|
||||
.tenantId(tenantId)
|
||||
.id(IdUtils.create())
|
||||
.namespace("io.kestra.unittest")
|
||||
.flowId("some-execution")
|
||||
.flowRevision(1)
|
||||
.labels(Label.from(Map.of("country", "FR")))
|
||||
.state(new State(Type.SUCCESS,
|
||||
List.of(new State.History(State.Type.CREATED, executionCreateDate), new State.History(Type.SUCCESS, executionCreateDate.plus(executionDuration)))))
|
||||
.taskRunList(List.of())
|
||||
.build();
|
||||
|
||||
execution = executionRepository.save(execution);
|
||||
|
||||
// Create an execution BEYOND 365 days (400 days ago) - should be filtered out
|
||||
var executionCreateDateOld = Instant.now().minus(Duration.ofDays(400));
|
||||
Execution executionOld = Execution.builder()
|
||||
.tenantId(tenantId)
|
||||
.id(IdUtils.create())
|
||||
.namespace("io.kestra.unittest")
|
||||
.flowId("some-execution-old")
|
||||
.flowRevision(1)
|
||||
.labels(Label.from(Map.of("country", "US")))
|
||||
.state(new State(Type.SUCCESS,
|
||||
List.of(new State.History(State.Type.CREATED, executionCreateDateOld), new State.History(Type.SUCCESS, executionCreateDateOld.plus(executionDuration)))))
|
||||
.taskRunList(List.of())
|
||||
.build();
|
||||
|
||||
executionRepository.save(executionOld);
|
||||
|
||||
var now = ZonedDateTime.now();
|
||||
ArrayListTotal<Map<String, Object>> data = executionRepository.fetchData(tenantId, Executions.builder()
|
||||
.type(Executions.class.getName())
|
||||
.columns(Map.of(
|
||||
"count", ColumnDescriptor.<Executions.Fields>builder().field(Executions.Fields.ID).agg(AggregationType.COUNT).build(),
|
||||
"id", ColumnDescriptor.<Executions.Fields>builder().field(Executions.Fields.ID).build(),
|
||||
"date", ColumnDescriptor.<Executions.Fields>builder().field(Executions.Fields.START_DATE).build(),
|
||||
"duration", ColumnDescriptor.<Executions.Fields>builder().field(Executions.Fields.DURATION).build()
|
||||
)).build(),
|
||||
now.minusDays(365),
|
||||
now,
|
||||
null
|
||||
);
|
||||
|
||||
// Should only return 1 execution (the recent one), not the 400-day-old execution
|
||||
assertThat(data.getTotal()).isGreaterThanOrEqualTo(1L);
|
||||
assertThat(data).isNotEmpty();
|
||||
assertThat(data).first().hasFieldOrProperty("count");
|
||||
}
|
||||
|
||||
|
||||
|
||||
private static Execution buildWithCreatedDate(String tenant, Instant instant) {
|
||||
return Execution.builder()
|
||||
.id(IdUtils.create())
|
||||
|
||||
@@ -16,7 +16,7 @@ public final class H2RepositoryUtils {
|
||||
case MONTH:
|
||||
return DSL.field("FORMATDATETIME(\"" + dateField + "\", 'yyyy-MM')", Date.class);
|
||||
case WEEK:
|
||||
return DSL.field("FORMATDATETIME(\"" + dateField + "\", 'YYYY-ww')", Date.class);
|
||||
return DSL.field("DATE_TRUNC('WEEK', \"" + dateField + "\")", Date.class);
|
||||
case DAY:
|
||||
return DSL.field("FORMATDATETIME(\"" + dateField + "\", 'yyyy-MM-dd')", Date.class);
|
||||
case HOUR:
|
||||
|
||||
@@ -16,7 +16,7 @@ public final class MysqlRepositoryUtils {
|
||||
case MONTH:
|
||||
return DSL.field("DATE_FORMAT({0}, '%Y-%m')", Date.class, DSL.field(dateField));
|
||||
case WEEK:
|
||||
return DSL.field("DATE_FORMAT({0}, '%x-%v')", Date.class, DSL.field(dateField));
|
||||
return DSL.field("STR_TO_DATE(CONCAT(YEARWEEK({0}, 3), ' Monday'), '%X%V %W')", Date.class, DSL.field(dateField));
|
||||
case DAY:
|
||||
return DSL.field("DATE({0})", Date.class, DSL.field(dateField));
|
||||
case HOUR:
|
||||
|
||||
@@ -16,7 +16,7 @@ public final class PostgresRepositoryUtils {
|
||||
case MONTH:
|
||||
return DSL.field("TO_CHAR({0}, 'YYYY-MM')", Date.class, DSL.field(dateField));
|
||||
case WEEK:
|
||||
return DSL.field("TO_CHAR({0}, 'IYYY-IW')", Date.class, DSL.field(dateField));
|
||||
return DSL.field("DATE_TRUNC('week', {0})", Date.class, DSL.field(dateField));
|
||||
case DAY:
|
||||
return DSL.field("DATE({0})", Date.class, DSL.field(dateField));
|
||||
case HOUR:
|
||||
|
||||
Reference in New Issue
Block a user