WIP
This commit is contained in:
parent
e4745806c2
commit
77044a2c64
|
|
@ -25,13 +25,12 @@ public class NetworkScope {
|
|||
@Getter
|
||||
@Setter
|
||||
private List<String> domains = new ArrayList<>();
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
private List<String> autoResolvedDomains = new ArrayList<>();
|
||||
private List<String> resolveDomains = new ArrayList<>();
|
||||
|
||||
public int getResourceCount() {
|
||||
return subnets.size() + ASN.size() + domains.size() + autoResolvedDomains.size();
|
||||
return subnets.size() + ASN.size() + domains.size() + resolveDomains.size();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -40,12 +39,12 @@ public class NetworkScope {
|
|||
return Objects.equals(ASN, that.ASN) &&
|
||||
Objects.equals(subnets, that.subnets) &&
|
||||
Objects.equals(domains, that.domains) &&
|
||||
Objects.equals(autoResolvedDomains, that.autoResolvedDomains);
|
||||
Objects.equals(resolveDomains, that.resolveDomains);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return Objects.hash(ASN, subnets, domains, autoResolvedDomains);
|
||||
return Objects.hash(ASN, subnets, domains, resolveDomains);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -55,7 +54,7 @@ public class NetworkScope {
|
|||
ASN.clear();
|
||||
subnets.clear();
|
||||
domains.clear();
|
||||
autoResolvedDomains.clear();
|
||||
resolveDomains.clear();
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -65,7 +64,7 @@ public class NetworkScope {
|
|||
ASN.addAll(networkScope.getASN());
|
||||
subnets.addAll(networkScope.getSubnets());
|
||||
domains.addAll(networkScope.getDomains());
|
||||
domains.addAll(networkScope.getAutoResolvedDomains());
|
||||
resolveDomains.addAll(networkScope.getResolveDomains());
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -16,16 +16,16 @@ public class ExecutionInfoEntry {
|
|||
var compareSubnets = diff(source.getSubnets(), result.getSubnets());
|
||||
var compareDomains = diff(source.getDomains(), result.getDomains());
|
||||
var compareASN = diff(source.getASN(), result.getASN());
|
||||
var compareAutoResolved = diff(source.getAutoResolvedDomains(), result.getAutoResolvedDomains());
|
||||
var compareAutoResolved = diff(source.getResolveDomains(), result.getResolveDomains());
|
||||
|
||||
added.getSubnets().addAll(compareSubnets.added);
|
||||
added.getDomains().addAll(compareDomains.added);
|
||||
added.getASN().addAll(compareASN.added);
|
||||
added.getAutoResolvedDomains().addAll(compareAutoResolved.added);
|
||||
added.getResolveDomains().addAll(compareAutoResolved.added);
|
||||
removed.getSubnets().addAll(compareSubnets.removed);
|
||||
removed.getDomains().addAll(compareDomains.removed);
|
||||
removed.getASN().addAll(compareASN.removed);
|
||||
removed.getAutoResolvedDomains().addAll(compareAutoResolved.removed);
|
||||
removed.getResolveDomains().addAll(compareAutoResolved.removed);
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,5 @@
|
|||
package ru.kirillius.pf.sdn.api.flow;
|
||||
|
||||
import lombok.Builder;
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import lombok.SneakyThrows;
|
||||
|
|
@ -11,7 +10,9 @@ import java.util.List;
|
|||
import java.util.Map;
|
||||
import java.util.function.Function;
|
||||
|
||||
@Builder
|
||||
/**
|
||||
* Представляет собой вызов функции с параметрами
|
||||
*/
|
||||
public class FlowAction implements Function<List<NetworkScope>, CallContext> {
|
||||
|
||||
private FlowFunction function;
|
||||
|
|
@ -30,13 +31,7 @@ public class FlowAction implements Function<List<NetworkScope>, CallContext> {
|
|||
function = functionClass.getConstructor().newInstance();
|
||||
}
|
||||
|
||||
public void setFunctionClass(Class<? extends FlowFunction> functionClass) {
|
||||
this.functionClass = functionClass;
|
||||
instantiateFunction();
|
||||
}
|
||||
|
||||
@Getter
|
||||
private Class<? extends FlowFunction> functionClass;
|
||||
private final Class<? extends FlowFunction> functionClass;
|
||||
@Getter
|
||||
@Setter
|
||||
private Map<String, String> properties;
|
||||
|
|
|
|||
|
|
@ -5,6 +5,9 @@ import ru.kirillius.pf.sdn.api.properties.PropertyDescriptor;
|
|||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* Интерфейс, описывающий исполняемую функцию для Flow
|
||||
*/
|
||||
public interface FlowFunction {
|
||||
void apply(CallContext context);
|
||||
|
||||
|
|
|
|||
|
|
@ -4,6 +4,6 @@ public enum TriggerType {
|
|||
Manual,
|
||||
Interval,
|
||||
OnSubscriptionUpdate,
|
||||
OnSubscriptionSetUpdate,
|
||||
OnSubscriptionGroupUpdate,
|
||||
OnStart
|
||||
}
|
||||
|
|
|
|||
|
|
@ -7,7 +7,6 @@ import ru.kirillius.pf.sdn.api.flow.StartCondition;
|
|||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.UUID;
|
||||
|
||||
@Entity
|
||||
@Table(name = "pipeline_config")
|
||||
|
|
@ -21,9 +20,6 @@ public class FlowConfig {
|
|||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@GeneratedValue(strategy = GenerationType.UUID)
|
||||
private UUID guid;
|
||||
|
||||
@Column(nullable = false, unique = true)
|
||||
private String name;
|
||||
|
||||
|
|
|
|||
|
|
@ -6,13 +6,13 @@ import lombok.*;
|
|||
import java.util.Set;
|
||||
|
||||
@Entity
|
||||
@Table(name = "subscription_set")
|
||||
@Table(name = "subscription_group")
|
||||
@Getter
|
||||
@Setter
|
||||
@NoArgsConstructor
|
||||
@Builder
|
||||
@AllArgsConstructor
|
||||
public class SubscriptionSetEntry {
|
||||
public class SubscriptionGroup {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
|
@ -6,6 +6,7 @@ import ru.kirillius.pf.sdn.api.Networking.NetworkScope;
|
|||
import ru.kirillius.pf.sdn.api.flow.CallContext;
|
||||
import ru.kirillius.pf.sdn.api.properties.PropertyDescriptor;
|
||||
import ru.kirillius.pf.sdn.api.properties.PropertyType;
|
||||
import ru.kirillius.pf.sdn.service.DomainResolverService;
|
||||
import ru.kirillius.pf.sdn.service.DomainUpdaterService;
|
||||
|
||||
import java.util.Collections;
|
||||
|
|
@ -17,6 +18,7 @@ import java.util.Map;
|
|||
public class AutoResolveDomains extends CommonFunction {
|
||||
|
||||
private final DomainUpdaterService domainCacheService;
|
||||
private final DomainResolverService domainResolverService;
|
||||
|
||||
private final static String CLEAR = "clear";
|
||||
private final static Map<String, PropertyDescriptor> properties;
|
||||
|
|
@ -41,10 +43,10 @@ public class AutoResolveDomains extends CommonFunction {
|
|||
output.add(source);
|
||||
|
||||
if (properties.containsKey(CLEAR) && properties.get(CLEAR).equals("true")) {
|
||||
output.getAutoResolvedDomains().clear();
|
||||
output.getResolveDomains().clear();
|
||||
}
|
||||
|
||||
source.getAutoResolvedDomains()
|
||||
source.getResolveDomains()
|
||||
.forEach(domain -> domainCacheService.getActualAddresses(domain)
|
||||
.forEach(address -> output
|
||||
.getSubnets()
|
||||
|
|
|
|||
|
|
@ -22,7 +22,7 @@ public class DuplicatesFilter implements FlowFunction {
|
|||
output.setSubnets(source.getSubnets().stream().distinct().toList());
|
||||
output.setDomains(source.getDomains().stream().distinct().toList());
|
||||
output.setASN(source.getASN().stream().distinct().toList());
|
||||
output.setAutoResolvedDomains(source.getAutoResolvedDomains().stream().distinct().toList());
|
||||
output.setResolveDomains(source.getResolveDomains().stream().distinct().toList());
|
||||
context.setOutputs(List.of(output));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -29,7 +29,8 @@ public class MergeNeighbourSubnetFilter extends CommonFunction {
|
|||
output.setSubnets(IPv4Util.mergeNeighbours(source.getSubnets()));
|
||||
output.setDomains(source.getDomains());
|
||||
output.setASN(source.getASN());
|
||||
output.setAutoResolvedDomains(source.getAutoResolvedDomains());
|
||||
output.setResolveDomains(source.getResolveDomains());
|
||||
context.setOutputs(List.of(output));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ public class MergeWithCoverageSubnetFilter extends CommonFunction {
|
|||
output.setSubnets(IPv4Util.mergeToLargerIfCovered(source.getSubnets(), usage));
|
||||
output.setDomains(source.getDomains());
|
||||
output.setASN(source.getASN());
|
||||
output.setAutoResolvedDomains(source.getAutoResolvedDomains());
|
||||
output.setResolveDomains(source.getResolveDomains());
|
||||
context.setOutputs(List.of(output));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -5,11 +5,8 @@ import lombok.extern.slf4j.Slf4j;
|
|||
import ru.kirillius.pf.sdn.Util.DomainUtil;
|
||||
import ru.kirillius.pf.sdn.api.Networking.NetworkScope;
|
||||
import ru.kirillius.pf.sdn.api.flow.CallContext;
|
||||
import ru.kirillius.pf.sdn.api.properties.PropertyDescriptor;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
@Slf4j
|
||||
@RequiredArgsConstructor
|
||||
|
|
@ -32,13 +29,8 @@ public class OverlappedDomainFilter extends CommonFunction {
|
|||
output.setSubnets(source.getSubnets());
|
||||
output.setDomains(DomainUtil.removeOverlapped(source.getDomains()));
|
||||
output.setASN(source.getASN());
|
||||
output.setAutoResolvedDomains(source.getAutoResolvedDomains());
|
||||
output.setResolveDomains(source.getResolveDomains());
|
||||
context.setOutputs(List.of(output));
|
||||
}
|
||||
|
||||
@Override
|
||||
public Map<String, PropertyDescriptor> getProperties() {
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ public class OverlappedSubnetFilter extends CommonFunction {
|
|||
output.setSubnets(IPv4Util.removeOverlapped(source.getSubnets()));
|
||||
output.setDomains(source.getDomains());
|
||||
output.setASN(source.getASN());
|
||||
output.setAutoResolvedDomains(source.getAutoResolvedDomains());
|
||||
output.setResolveDomains(source.getResolveDomains());
|
||||
context.setOutputs(List.of(output));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -33,13 +33,25 @@ public class ResourceFilter extends CommonFunction {
|
|||
|
||||
if (!filter.getSubnets().isEmpty()) {
|
||||
filterSubnets(source, filter, output, filtered);
|
||||
} else {
|
||||
output.setSubnets(source.getSubnets());
|
||||
}
|
||||
if (!filter.getASN().isEmpty()) {
|
||||
filterASN(source, filter, output, filtered);
|
||||
} else {
|
||||
output.setASN(source.getASN());
|
||||
}
|
||||
if (!filter.getDomains().isEmpty()) {
|
||||
filterDomains(source, filter, output, filtered);
|
||||
} else {
|
||||
output.setDomains(source.getDomains());
|
||||
}
|
||||
if (!filter.getResolveDomains().isEmpty()) {
|
||||
filterResolveDomains(source, filter, output, filtered);
|
||||
} else {
|
||||
output.setResolveDomains(source.getResolveDomains());
|
||||
}
|
||||
|
||||
context.setOutputs(List.of(output, filtered));
|
||||
}
|
||||
|
||||
|
|
@ -92,4 +104,20 @@ public class ResourceFilter extends CommonFunction {
|
|||
output.setDomains(outputDomains);
|
||||
filtered.setDomains(filteredDomains);
|
||||
}
|
||||
|
||||
private void filterResolveDomains(NetworkScope source, NetworkScope filter, NetworkScope output, NetworkScope filtered) {
|
||||
var sourceDomains = source.getResolveDomains();
|
||||
var filterDomains = filter.getResolveDomains();
|
||||
var outputDomains = new ArrayList<String>();
|
||||
var filteredDomains = new ArrayList<String>();
|
||||
sourceDomains.forEach(domain -> {
|
||||
if (!filterDomains.contains(domain)) {
|
||||
outputDomains.add(domain);
|
||||
} else {
|
||||
filteredDomains.add(domain);
|
||||
}
|
||||
});
|
||||
output.setResolveDomains(outputDomains);
|
||||
filtered.setResolveDomains(filteredDomains);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -18,6 +18,8 @@ public class StaticResourceInput extends CommonFunction {
|
|||
|
||||
private final static String SUBNETS = "subnets";
|
||||
private final static String DOMAINS = "domains";
|
||||
private final static String RESOLVE = "resolve";
|
||||
|
||||
private final static String ASN = "asn";
|
||||
|
||||
private final static Map<String, PropertyDescriptor> properties;
|
||||
|
|
@ -26,6 +28,8 @@ public class StaticResourceInput extends CommonFunction {
|
|||
properties = new HashMap<>();
|
||||
properties.put(SUBNETS, PropertyDescriptor.builder().type(PropertyType.SUBNET).array(true).required(false).defaultValue(null).build());
|
||||
properties.put(DOMAINS, PropertyDescriptor.builder().type(PropertyType.STRING).array(true).required(false).defaultValue(null).build());
|
||||
properties.put(RESOLVE, PropertyDescriptor.builder().type(PropertyType.STRING).array(true).required(false).defaultValue(null).build());
|
||||
|
||||
properties.put(ASN, PropertyDescriptor.builder().type(PropertyType.INTEGER).array(true).required(false).defaultValue(null).build().addConstraint(new IntegerConstraint(1, 99999))); //TODO какой max asn?);
|
||||
}
|
||||
|
||||
|
|
@ -47,6 +51,9 @@ public class StaticResourceInput extends CommonFunction {
|
|||
if (properties.containsKey(DOMAINS)) {
|
||||
output.setDomains(Arrays.stream(properties.get(DOMAINS).split(Pattern.quote(","))).filter(s -> !s.isBlank()).toList());
|
||||
}
|
||||
if (properties.containsKey(RESOLVE)) {
|
||||
output.setResolveDomains(Arrays.stream(properties.get(RESOLVE).split(Pattern.quote(","))).filter(s -> !s.isBlank()).toList());
|
||||
}
|
||||
|
||||
if (properties.containsKey(ASN)) {
|
||||
|
||||
|
|
@ -61,6 +68,4 @@ public class StaticResourceInput extends CommonFunction {
|
|||
return Collections.unmodifiableMap(properties);
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,29 @@
|
|||
package ru.kirillius.pf.sdn.flow;
|
||||
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import ru.kirillius.pf.sdn.api.Networking.NetworkScope;
|
||||
import ru.kirillius.pf.sdn.api.flow.CallContext;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RequiredArgsConstructor
|
||||
public class Summator extends CommonFunction {
|
||||
|
||||
@Override
|
||||
public List<String> getInputNames() {
|
||||
return List.of("A", "B");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getOutputNames() {
|
||||
return List.of("output");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void apply(CallContext context) {
|
||||
var output = new NetworkScope();
|
||||
context.getSources().forEach(output::add);
|
||||
context.setOutputs(List.of(output));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -3,9 +3,7 @@ package ru.kirillius.pf.sdn.repository;
|
|||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import ru.kirillius.pf.sdn.entity.FlowConfig;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
public interface PipelineConfigRepository extends JpaRepository<FlowConfig, Long> {
|
||||
|
||||
boolean existsByGuid(UUID guid);
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,8 +1,8 @@
|
|||
package ru.kirillius.pf.sdn.repository;
|
||||
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
import ru.kirillius.pf.sdn.entity.SubscriptionSetEntry;
|
||||
import ru.kirillius.pf.sdn.entity.SubscriptionGroup;
|
||||
|
||||
public interface SubscriptionSetRepository extends JpaRepository<SubscriptionSetEntry, Long> {
|
||||
public interface SubscriptionSetRepository extends JpaRepository<SubscriptionGroup, Long> {
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public class DomainUpdaterService {
|
|||
protected void doWork() {
|
||||
subscriptionService.getSubscriptions().forEach(subscription -> {
|
||||
var scope = subscription.getScope();
|
||||
if (!scope.isResolveDomains()) {
|
||||
if (scope.getResolveDomains().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
scope.getDomains().forEach(domain -> {
|
||||
|
|
|
|||
|
|
@ -17,13 +17,21 @@ import java.util.concurrent.ExecutorService;
|
|||
import java.util.concurrent.Future;
|
||||
import java.util.concurrent.atomic.AtomicReference;
|
||||
|
||||
/**
|
||||
* Запускает и выполняет Flow в порядке очереди
|
||||
*/
|
||||
@Slf4j
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class FlowExecutorService {
|
||||
private final ExecutorService executor;
|
||||
private final Queue<Flow> executionQueue = new ConcurrentLinkedQueue<>();
|
||||
private final AtomicReference<Flow> currentPipeline = new AtomicReference<>();
|
||||
|
||||
public Flow getCurrentFlow() {
|
||||
return currentFlow.get();
|
||||
}
|
||||
|
||||
private final AtomicReference<Flow> currentFlow = new AtomicReference<>();
|
||||
@Getter
|
||||
private final EventHandler<Flow> onExecuted = new ConcurrentEventHandler<>();
|
||||
|
||||
|
|
@ -61,14 +69,14 @@ public class FlowExecutorService {
|
|||
while (!Thread.currentThread().isInterrupted()) {
|
||||
while (!executionQueue.isEmpty()) {
|
||||
var pipeline = executionQueue.poll();
|
||||
currentPipeline.set(pipeline);
|
||||
currentFlow.set(pipeline);
|
||||
try {
|
||||
pipeline.execute();
|
||||
onExecuted.invoke(pipeline);
|
||||
} catch (Exception e) {
|
||||
log.error("Exception while executing pipeline", e);
|
||||
}
|
||||
currentPipeline.set(null);
|
||||
currentFlow.set(null);
|
||||
}
|
||||
Thread.sleep(100L);
|
||||
Thread.yield();
|
||||
|
|
|
|||
|
|
@ -13,12 +13,13 @@ import ru.kirillius.pf.sdn.api.flow.FlowFunction;
|
|||
import ru.kirillius.pf.sdn.api.flow.TriggerType;
|
||||
import ru.kirillius.pf.sdn.entity.ActionConfig;
|
||||
import ru.kirillius.pf.sdn.entity.FlowConfig;
|
||||
import ru.kirillius.pf.sdn.entity.SubscriptionSetEntry;
|
||||
import ru.kirillius.pf.sdn.entity.SubscriptionGroup;
|
||||
import ru.kirillius.pf.sdn.flow.DummyFunction;
|
||||
import ru.kirillius.pf.sdn.repository.PipelineConfigRepository;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.regex.Pattern;
|
||||
|
|
@ -33,11 +34,11 @@ public class FlowService {
|
|||
private final SubscriptionService subscriptionService;
|
||||
private final ExecutorService executorService;
|
||||
|
||||
private final Map<FlowConfig, Flow> pipelines = new ConcurrentHashMap<>();
|
||||
private final Map<FlowConfig, Flow> flows = new ConcurrentHashMap<>();
|
||||
private final Map<String, Class<? extends FlowFunction>> functions = new ConcurrentHashMap<>();
|
||||
private EventListener<Flow> executedListener;
|
||||
private EventListener<Subscription> subscriptionUpdateListener;
|
||||
private EventListener<SubscriptionSetEntry> subscriptionSetUpdateListener;
|
||||
private EventListener<SubscriptionGroup> subscriptionSetUpdateListener;
|
||||
|
||||
public void registerFunction(Class<? extends FlowFunction> functionClass, String id) {
|
||||
if (functions.containsKey(id)) {
|
||||
|
|
@ -46,13 +47,17 @@ public class FlowService {
|
|||
functions.put(id, functionClass);
|
||||
}
|
||||
|
||||
public Set<String> getFunctionNames() {
|
||||
return functions.keySet();
|
||||
}
|
||||
|
||||
public void trigger(long id) {
|
||||
pipelines.keySet().stream().filter(config -> config.getId().equals(id)).findFirst().ifPresent(this::trigger);
|
||||
flows.keySet().stream().filter(config -> config.getId().equals(id)).findFirst().ifPresent(this::trigger);
|
||||
}
|
||||
|
||||
public void trigger(FlowConfig flowConfig) {
|
||||
if (pipelines.containsKey(flowConfig)) {
|
||||
trigger(pipelines.get(flowConfig));
|
||||
if (flows.containsKey(flowConfig)) {
|
||||
trigger(flows.get(flowConfig));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -68,23 +73,26 @@ public class FlowService {
|
|||
}
|
||||
flowExecutorService.triggerExecute(pipeline);
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
public void update(FlowConfig flowConfig) {
|
||||
if (configRepository.existsByGuid(flowConfig.getGuid())) {
|
||||
load(flowConfig);
|
||||
public void loadFlow(Flow flow) {
|
||||
loadFlow(flow.getConfig());
|
||||
}
|
||||
|
||||
public void loadFlow(FlowConfig flowConfig) {
|
||||
if (configRepository.existsById(flowConfig.getId())) {
|
||||
reloadFlowInternal(flowConfig);
|
||||
} else {
|
||||
flowExecutorService.cancel(pipelines.get(flowConfig));
|
||||
pipelines.remove(flowConfig);
|
||||
flowExecutorService.cancel(flows.get(flowConfig));
|
||||
flows.remove(flowConfig);
|
||||
}
|
||||
}
|
||||
|
||||
private void load(FlowConfig flowConfig) {
|
||||
if (pipelines.containsKey(flowConfig)) {
|
||||
flowExecutorService.cancel(pipelines.get(flowConfig));
|
||||
private void reloadFlowInternal(FlowConfig flowConfig) {
|
||||
if (flows.containsKey(flowConfig)) {
|
||||
flowExecutorService.cancel(flows.get(flowConfig));
|
||||
}
|
||||
pipelines.put(flowConfig, new Flow(flowConfig, this::buildAction));
|
||||
flows.put(flowConfig, new Flow(flowConfig, this::buildAction));
|
||||
}
|
||||
|
||||
private FlowAction buildAction(ActionConfig config) {
|
||||
|
|
@ -131,8 +139,8 @@ public class FlowService {
|
|||
subscriptionSetUpdateListener = subscriptionService.getSetUpdateEvent().add(this::subscriptionSetUpdate);
|
||||
executedListener = flowExecutorService.getOnExecuted().add(this::checkForIntervalExecution);
|
||||
registerFunction(DummyFunction.class, "Error:fallback");
|
||||
configRepository.findAll().forEach(this::load);
|
||||
pipelines.values()
|
||||
configRepository.findAll().forEach(this::reloadFlowInternal);
|
||||
flows.values()
|
||||
.stream()
|
||||
.filter(p -> p
|
||||
.getConfig()
|
||||
|
|
@ -142,9 +150,9 @@ public class FlowService {
|
|||
.forEach(flowExecutorService::triggerExecute);
|
||||
}
|
||||
|
||||
private void subscriptionSetUpdate(SubscriptionSetEntry setEntry) {
|
||||
pipelines.values().forEach(pipeline -> {
|
||||
var matchedConditions = pipeline.getConfig().getStartConditions().stream().filter(c -> c.getTrigger() == TriggerType.OnSubscriptionSetUpdate).toList();
|
||||
private void subscriptionSetUpdate(SubscriptionGroup setEntry) {
|
||||
flows.values().forEach(pipeline -> {
|
||||
var matchedConditions = pipeline.getConfig().getStartConditions().stream().filter(c -> c.getTrigger() == TriggerType.OnSubscriptionGroupUpdate).toList();
|
||||
if (matchedConditions.isEmpty()) {
|
||||
return;
|
||||
}
|
||||
|
|
@ -170,7 +178,7 @@ public class FlowService {
|
|||
|
||||
private void subscriptionUpdate(Subscription subscription) {
|
||||
|
||||
pipelines.values().forEach(pipeline -> {
|
||||
flows.values().forEach(pipeline -> {
|
||||
var matchedConditions = pipeline.getConfig().getStartConditions().stream().filter(c -> c.getTrigger() == TriggerType.OnSubscriptionUpdate).toList();
|
||||
if (matchedConditions.isEmpty()) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ import ru.kirillius.pf.sdn.api.Networking.Subscriptions.CacheFallbackProviderPro
|
|||
import ru.kirillius.pf.sdn.api.Networking.Subscriptions.Subscription;
|
||||
import ru.kirillius.pf.sdn.api.Networking.Subscriptions.SubscriptionProvider;
|
||||
import ru.kirillius.pf.sdn.api.Networking.Subscriptions.SubscriptionProviderProtocol;
|
||||
import ru.kirillius.pf.sdn.entity.SubscriptionSetEntry;
|
||||
import ru.kirillius.pf.sdn.entity.SubscriptionGroup;
|
||||
import ru.kirillius.pf.sdn.repository.SubscriptionProviderConfigRepository;
|
||||
import ru.kirillius.pf.sdn.repository.SubscriptionSetRepository;
|
||||
|
||||
|
|
@ -48,7 +48,7 @@ public class SubscriptionService {
|
|||
private final EventHandler<Subscription> updateEvent = new ConcurrentEventHandler<>();
|
||||
|
||||
@Getter
|
||||
private final EventHandler<SubscriptionSetEntry> setUpdateEvent = new ConcurrentEventHandler<>();
|
||||
private final EventHandler<SubscriptionGroup> setUpdateEvent = new ConcurrentEventHandler<>();
|
||||
private Future<?> worker;
|
||||
|
||||
public List<Subscription> getSubscriptions() {
|
||||
|
|
|
|||
Loading…
Reference in New Issue