io.kestra.plugin.jdbc.AbstractJdbcTrigger Maven / Gradle / Ivy
package io.kestra.plugin.jdbc;
import io.kestra.core.models.conditions.ConditionContext;
import io.kestra.core.models.executions.Execution;
import io.kestra.core.models.executions.ExecutionTrigger;
import io.kestra.core.models.flows.State;
import io.kestra.core.models.triggers.AbstractTrigger;
import io.kestra.core.models.triggers.PollingTriggerInterface;
import io.kestra.core.models.triggers.TriggerContext;
import io.kestra.core.models.triggers.TriggerOutput;
import io.kestra.core.runners.RunContext;
import io.kestra.core.utils.IdUtils;
import lombok.*;
import lombok.experimental.SuperBuilder;
import org.slf4j.Logger;
import java.time.Duration;
import java.util.HashMap;
import java.util.Map;
import java.util.Optional;
@SuperBuilder
@ToString
@EqualsAndHashCode
@Getter
@NoArgsConstructor
public abstract class AbstractJdbcTrigger extends AbstractTrigger implements PollingTriggerInterface, TriggerOutput, JdbcQueryInterface {
@Builder.Default
private final Duration interval = Duration.ofSeconds(60);
private String url;
private String username;
private String password;
private String timeZoneId;
private String sql;
@Builder.Default
private boolean store = false;
@Builder.Default
private boolean fetchOne = false;
@Builder.Default
private boolean fetch = false;
@Builder.Default
protected Integer fetchSize = 10000;
@Builder.Default
@Getter(AccessLevel.NONE)
protected transient Map additionalVars = new HashMap<>();
@Override
public Optional evaluate(ConditionContext conditionContext, TriggerContext context) throws Exception {
RunContext runContext = conditionContext.getRunContext();
Logger logger = runContext.logger();
var run = runQuery(runContext);
logger.debug("Found '{}' rows from '{}'", run.getSize(), runContext.render(this.sql));
if (run.getSize() == 0) {
return Optional.empty();
}
String executionId = IdUtils.create();
ExecutionTrigger executionTrigger = ExecutionTrigger.of(
this,
run
);
Execution execution = Execution.builder()
.id(executionId)
.namespace(context.getNamespace())
.flowId(context.getFlowId())
.flowRevision(context.getFlowRevision())
.state(new State())
.trigger(executionTrigger)
.build();
return Optional.of(execution);
}
protected abstract AbstractJdbcQuery.Output runQuery(RunContext runContext) throws Exception;
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy