X-Git-Url: https://gerrit.o-ran-sc.org/r/gitweb?a=blobdiff_plain;f=policy-agent%2Fsrc%2Fmain%2Fjava%2Forg%2Foransc%2Fpolicyagent%2Ftasks%2FStartupService.java;h=251f3437acc3f00a0106b7a665fad5d24ed578ea;hb=592ce20ec359928373de2e7f06214c8f8ad73c20;hp=8bfa81ea17dfa1e322a70dd87c687d1c18aa6559;hpb=e6f2305abd791d003d4729c3bd8c8652d89eed70;p=nonrtric.git diff --git a/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java b/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java index 8bfa81ea..251f3437 100644 --- a/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java +++ b/policy-agent/src/main/java/org/oransc/policyagent/tasks/StartupService.java @@ -22,18 +22,16 @@ package org.oransc.policyagent.tasks; import org.oransc.policyagent.clients.A1Client; import org.oransc.policyagent.configuration.ApplicationConfig; -import org.oransc.policyagent.repository.ImmutablePolicyType; -import org.oransc.policyagent.repository.PolicyType; +import org.oransc.policyagent.configuration.RicConfig; +import org.oransc.policyagent.repository.Policies; import org.oransc.policyagent.repository.PolicyTypes; import org.oransc.policyagent.repository.Ric; -import org.oransc.policyagent.repository.Ric.RicState; import org.oransc.policyagent.repository.Rics; +import org.oransc.policyagent.repository.Services; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import reactor.core.publisher.Flux; -import reactor.core.publisher.Mono; /** * Loads information about RealTime-RICs at startup. @@ -55,73 +53,34 @@ public class StartupService { @Autowired private A1Client a1Client; - StartupService(ApplicationConfig appConfig, Rics rics, PolicyTypes policyTypes, A1Client a1Client) { + @Autowired + private Policies policies; + + @Autowired + private Services services; + + // Only for unittesting + StartupService(ApplicationConfig appConfig, Rics rics, PolicyTypes policyTypes, A1Client a1Client, + Policies policies, Services services) { this.applicationConfig = appConfig; this.rics = rics; this.policyTypes = policyTypes; this.a1Client = a1Client; + this.policies = policies; + this.services = services; } /** * Reads the configured Rics and performs the service discovery. The result is put into the repository. */ public void startup() { + logger.debug("Starting up"); applicationConfig.initialize(); - Flux.fromIterable(applicationConfig.getRicConfigs()) // - .map(ricConfig -> new Ric(ricConfig)) // - .doOnNext(ric -> logger.debug("Handling ric: {}", ric.getConfig().name())) // - .flatMap(this::addPolicyTypesForRic) // - .flatMap(this::deletePoliciesForRic) // - .flatMap(this::addRicToRepo) // - .subscribe(); - } - - private Mono addPolicyTypesForRic(Ric ric) { - a1Client.getPolicyTypeIdentities(ric.getConfig().baseUrl()) // - .doOnNext(typeId -> logger.debug("For ric: {}, handling type: {}", ric.getConfig().name(), typeId)) - .flatMap(this::addTypeToRepo) // - .flatMap(type -> addTypeToRic(ric, type)) // - .subscribe(null, cause -> setRicToNotReachable(ric, cause), () -> setRicToActive(ric)); - return Mono.just(ric); - } - - private Mono addTypeToRepo(String policyTypeId) { - ImmutablePolicyType type = ImmutablePolicyType.builder().name(policyTypeId).build(); - if (!policyTypes.contains(policyTypeId)) { - policyTypes.put(type); - } - return Mono.just(type); - } - - private Mono addTypeToRic(Ric ric, PolicyType policyType) { - ric.addSupportedPolicyType(policyType); - return Mono.empty(); - } - - private Mono deletePoliciesForRic(Ric ric) { - if (!Ric.RicState.NOT_REACHABLE.equals(ric.state())) { - a1Client.getPolicyIdentities(ric.getConfig().baseUrl()) // - .doOnNext( - policyId -> logger.debug("Deleting policy: {}, for ric: {}", policyId, ric.getConfig().name())) - .flatMap(policyId -> a1Client.deletePolicy(ric.getConfig().baseUrl(), policyId)) // - .subscribe(null, cause -> setRicToNotReachable(ric, cause), null); + for (RicConfig ricConfig : applicationConfig.getRicConfigs()) { + rics.put(new Ric(ricConfig)); } - - return Mono.just(ric); - } - - private void setRicToNotReachable(Ric ric, Throwable t) { - ric.setState(Ric.RicState.NOT_REACHABLE); - logger.info("Unable to connect to ric {}. Cause: {}", ric.name(), t.getMessage()); - } - - private void setRicToActive(Ric ric) { - ric.setState(RicState.ACTIVE); + RicRecoveryTask recoveryTask = new RicRecoveryTask(a1Client, policyTypes, policies, services); + recoveryTask.run(rics.getRics()); // recover all Rics } - private Mono addRicToRepo(Ric ric) { - rics.put(ric); - - return Mono.empty(); - } }