mirror of
https://github.com/kestra-io/kestra.git
synced 2025-12-19 18:05:41 -05:00
feat(trigger): refactor Schedule to not use the application context
Part-of: https://github.com/kestra-io/kestra-ee/issues/4228
This commit is contained in:
@@ -4,7 +4,6 @@ import com.cronutils.utils.VisibleForTesting;
|
|||||||
import io.kestra.core.exceptions.InternalException;
|
import io.kestra.core.exceptions.InternalException;
|
||||||
import io.kestra.core.models.conditions.Condition;
|
import io.kestra.core.models.conditions.Condition;
|
||||||
import io.kestra.core.models.conditions.ConditionContext;
|
import io.kestra.core.models.conditions.ConditionContext;
|
||||||
import io.kestra.core.models.conditions.ScheduleCondition;
|
|
||||||
import io.kestra.core.models.executions.Execution;
|
import io.kestra.core.models.executions.Execution;
|
||||||
import io.kestra.core.models.flows.Flow;
|
import io.kestra.core.models.flows.Flow;
|
||||||
import io.kestra.core.models.flows.FlowInterface;
|
import io.kestra.core.models.flows.FlowInterface;
|
||||||
@@ -65,16 +64,6 @@ public class ConditionService {
|
|||||||
return this.valid(flow, conditions, conditionContext);
|
return this.valid(flow, conditions, conditionContext);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Check that all conditions are valid.
|
|
||||||
* Warning, this method throws if a condition cannot be evaluated.
|
|
||||||
*/
|
|
||||||
public boolean isValid(List<ScheduleCondition> conditions, ConditionContext conditionContext) throws InternalException {
|
|
||||||
return conditions
|
|
||||||
.stream()
|
|
||||||
.allMatch(throwPredicate(condition -> condition.test(conditionContext)));
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check that all conditions are valid.
|
* Check that all conditions are valid.
|
||||||
* Warning, this method throws if a condition cannot be evaluated.
|
* Warning, this method throws if a condition cannot be evaluated.
|
||||||
|
|||||||
@@ -18,9 +18,7 @@ import io.kestra.core.models.conditions.ScheduleCondition;
|
|||||||
import io.kestra.core.models.executions.Execution;
|
import io.kestra.core.models.executions.Execution;
|
||||||
import io.kestra.core.models.flows.State;
|
import io.kestra.core.models.flows.State;
|
||||||
import io.kestra.core.models.triggers.*;
|
import io.kestra.core.models.triggers.*;
|
||||||
import io.kestra.core.runners.DefaultRunContext;
|
|
||||||
import io.kestra.core.runners.RunContext;
|
import io.kestra.core.runners.RunContext;
|
||||||
import io.kestra.core.services.ConditionService;
|
|
||||||
import io.kestra.core.services.LabelService;
|
import io.kestra.core.services.LabelService;
|
||||||
import io.kestra.core.utils.ListUtils;
|
import io.kestra.core.utils.ListUtils;
|
||||||
import io.kestra.core.validations.ScheduleValidation;
|
import io.kestra.core.validations.ScheduleValidation;
|
||||||
@@ -40,6 +38,8 @@ import java.time.temporal.ChronoUnit;
|
|||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.stream.Stream;
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import static io.kestra.core.utils.Rethrow.throwPredicate;
|
||||||
|
|
||||||
@Slf4j
|
@Slf4j
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@ToString
|
@ToString
|
||||||
@@ -549,9 +549,9 @@ public class Schedule extends AbstractTrigger implements Schedulable, TriggerOut
|
|||||||
Optional<ZonedDateTime> truePreviousNextDateWithCondition(ExecutionTime executionTime, ConditionContext conditionContext, ZonedDateTime toTestDate, boolean next) throws InternalException {
|
Optional<ZonedDateTime> truePreviousNextDateWithCondition(ExecutionTime executionTime, ConditionContext conditionContext, ZonedDateTime toTestDate, boolean next) throws InternalException {
|
||||||
int upperYearBound = ZonedDateTime.now().getYear() + 10;
|
int upperYearBound = ZonedDateTime.now().getYear() + 10;
|
||||||
int lowerYearBound = ZonedDateTime.now().getYear() - 10;
|
int lowerYearBound = ZonedDateTime.now().getYear() - 10;
|
||||||
|
|
||||||
while ((next && toTestDate.getYear() < upperYearBound) || (!next && toTestDate.getYear() > lowerYearBound)) {
|
while ((next && toTestDate.getYear() < upperYearBound) || (!next && toTestDate.getYear() > lowerYearBound)) {
|
||||||
|
|
||||||
Optional<ZonedDateTime> currentDate = next ?
|
Optional<ZonedDateTime> currentDate = next ?
|
||||||
executionTime.nextExecution(toTestDate) :
|
executionTime.nextExecution(toTestDate) :
|
||||||
executionTime.lastExecution(toTestDate);
|
executionTime.lastExecution(toTestDate);
|
||||||
@@ -607,16 +607,21 @@ public class Schedule extends AbstractTrigger implements Schedulable, TriggerOut
|
|||||||
|
|
||||||
private boolean validateScheduleCondition(ConditionContext conditionContext) throws InternalException {
|
private boolean validateScheduleCondition(ConditionContext conditionContext) throws InternalException {
|
||||||
if (conditions != null) {
|
if (conditions != null) {
|
||||||
ConditionService conditionService = ((DefaultRunContext)conditionContext.getRunContext()).getApplicationContext().getBean(ConditionService.class);
|
return conditions.stream()
|
||||||
return conditionService.isValid(
|
.filter(c -> c instanceof ScheduleCondition)
|
||||||
conditions.stream().filter(c -> c instanceof ScheduleCondition).map(c -> (ScheduleCondition) c).toList(),
|
.map(c -> (ScheduleCondition) c)
|
||||||
conditionContext
|
.allMatch(throwPredicate(condition -> condition.test(conditionContext)));
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private boolean isValid(List<ScheduleCondition> conditions, ConditionContext conditionContext) throws InternalException {
|
||||||
|
return conditions
|
||||||
|
.stream()
|
||||||
|
.allMatch(throwPredicate(condition -> condition.test(conditionContext)));
|
||||||
|
}
|
||||||
|
|
||||||
@SuperBuilder
|
@SuperBuilder
|
||||||
@ToString
|
@ToString
|
||||||
@EqualsAndHashCode
|
@EqualsAndHashCode
|
||||||
|
|||||||
Reference in New Issue
Block a user