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=283e8ea92fa3f78622ab2e67cb368514960bca34;hb=ffe0c150f08205d73ee362f58f492aeb2703f295;hp=cd816739475af1bbe13808df1e5aed5a0e182192;hpb=3e827b5c2bc00500577af25e9cb559b6243e1abd;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 cd816739..283e8ea9 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,6 +22,7 @@ package org.oransc.policyagent.tasks; import org.oransc.policyagent.clients.A1Client; import org.oransc.policyagent.configuration.ApplicationConfig; +import org.oransc.policyagent.exceptions.ServiceException; import org.oransc.policyagent.repository.ImmutablePolicyType; import org.oransc.policyagent.repository.PolicyType; import org.oransc.policyagent.repository.PolicyTypes; @@ -73,51 +74,61 @@ public class StartupService { .doOnNext(ric -> logger.debug("Handling ric: {}", ric.getConfig().name())) // .flatMap(this::addPolicyTypesForRic) // .flatMap(this::deletePoliciesForRic) // - .flatMap(this::setRicToActive) // - .flatMap(this::addRicToRepo) // + .doOnNext(rics::put) // .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((policyTypeId) -> addTypeToRepo(ric, policyTypeId)) // .flatMap(type -> addTypeToRic(ric, type)) // - .subscribe(); + .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); + private Mono addTypeToRepo(Ric ric, String policyTypeId) { + if (policyTypes.contains(policyTypeId)) { + try { + return Mono.just(policyTypes.getType(policyTypeId)); + } catch (ServiceException e) { + return Mono.error(e); + } } - return Mono.just(type); + return a1Client.getPolicyType(ric.getConfig().baseUrl(), policyTypeId) // + .flatMap(schema -> createPolicyType(policyTypeId, schema)); + } + + private Mono createPolicyType(String policyTypeId, String schema) { + PolicyType pt = ImmutablePolicyType.builder().name(policyTypeId).schema(schema).build(); + policyTypes.put(pt); + return Mono.just(pt); } - private Mono addTypeToRic(Ric ric, PolicyType policyType) { + private Mono addTypeToRic(Ric ric, PolicyType policyType) { ric.addSupportedPolicyType(policyType); - return Mono.empty(); + return Mono.just(policyType); } private Mono deletePoliciesForRic(Ric ric) { - 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(); + 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); + } return Mono.just(ric); } - private Mono setRicToActive(Ric ric) { - ric.setState(RicState.ACTIVE); - - 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 Mono addRicToRepo(Ric ric) { - rics.put(ric); - - return Mono.empty(); + private void setRicToActive(Ric ric) { + ric.setState(RicState.ACTIVE); } + }