diff --git a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/IConfigClient.java b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/IConfigClient.java index 5370b221..9e08c946 100644 --- a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/IConfigClient.java +++ b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/IConfigClient.java @@ -23,6 +23,6 @@ public interface IConfigClient { ConfigItemDTO getConfigurationItems(ConfigItemTypeEnum type); - String getProps(ConfigItemTypeEnum type, String props, String previous); + String getProps(String props, String previous, ConfigItemTypeEnum ms); } diff --git a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/impl/ConfigClient.java b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/impl/ConfigClient.java index d575cb4d..fdaf9372 100644 --- a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/impl/ConfigClient.java +++ b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/client/impl/ConfigClient.java @@ -28,6 +28,8 @@ import org.springframework.web.client.ResourceAccessException; import org.springframework.web.client.RestTemplate; +import static it.finanze.sanita.fse2.ms.gtw.dispatcher.enums.ConfigItemTypeEnum.GENERIC; + /** * Implementation of gtw-config Client. */ @@ -100,12 +102,23 @@ private boolean isReachable() { @Override - public String getProps(ConfigItemTypeEnum type, String props, String previous) { + public String getProps(String props, String previous, ConfigItemTypeEnum ms) { String out = previous; - String endpoint = routes.getConfigItem(type, props); - if (isReachable()) out = client.getForObject(endpoint, String.class); + ConfigItemTypeEnum src = ms; + // Check if gtw-config is available and get props + if (isReachable()) { + // Try to get the specific one + out = client.getForObject(routes.getConfigItem(ms, props), String.class); + // If the props don't exist + if (out == null) { + // Retrieve the generic one + out = client.getForObject(routes.getConfigItem(GENERIC, props), String.class); + // Set where has been retrieved from + src = GENERIC; + } + } if(out == null || !out.equals(previous)) { - log.info("[GTW-CFG] Property {} is set as {} (previously: {})", props, out, previous); + log.info("[GTW-CFG] {} set as {} (previously: {}) from {}", props, out, previous, src); } return out; } diff --git a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/enums/ConfigItemTypeEnum.java b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/enums/ConfigItemTypeEnum.java index cd7d1c19..4d693faa 100644 --- a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/enums/ConfigItemTypeEnum.java +++ b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/enums/ConfigItemTypeEnum.java @@ -1,6 +1,20 @@ package it.finanze.sanita.fse2.ms.gtw.dispatcher.enums; +import java.util.Arrays; +import java.util.List; + public enum ConfigItemTypeEnum { GENERIC, - DISPATCHER, + DISPATCHER; + + /** + * This method may seem useless, but it has been made + * to prevent relying on enum declaration order {@link ConfigItemTypeEnum#values()} + * @return The config item types sort by priority + */ + public static List priority() { + List items = Arrays.asList(ConfigItemTypeEnum.values()); + items.sort((a, b) -> a == GENERIC ? -1 : b == GENERIC ? 1 : 0); + return items; + } } \ No newline at end of file diff --git a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/service/impl/ConfigSRV.java b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/service/impl/ConfigSRV.java index 3cd90604..f09bf144 100644 --- a/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/service/impl/ConfigSRV.java +++ b/src/main/java/it/finanze/sanita/fse2/ms/gtw/dispatcher/service/impl/ConfigSRV.java @@ -18,7 +18,6 @@ import static it.finanze.sanita.fse2.ms.gtw.dispatcher.client.routes.base.ClientRoutes.Config.*; import static it.finanze.sanita.fse2.ms.gtw.dispatcher.dto.ConfigItemDTO.ConfigDataItemDTO; import static it.finanze.sanita.fse2.ms.gtw.dispatcher.enums.ConfigItemTypeEnum.DISPATCHER; -import static it.finanze.sanita.fse2.ms.gtw.dispatcher.enums.ConfigItemTypeEnum.GENERIC; @Slf4j @Service @@ -38,7 +37,7 @@ public ConfigSRV() { @PostConstruct public void postConstruct() { - for(ConfigItemTypeEnum en : ConfigItemTypeEnum.values()) { + for(ConfigItemTypeEnum en : ConfigItemTypeEnum.priority()) { log.info("[GTW-CFG] Retrieving {} properties ...", en.name()); ConfigItemDTO items = client.getConfigurationItems(en); List opts = items.getConfigurationItems(); @@ -47,6 +46,7 @@ public void postConstruct() { log.info("[GTW-CFG] Property {} is set as {}", key, value); props.put(key, Pair.of(new Date().getTime(), value)); }); + if(opt.getItems().isEmpty()) log.info("[GTW-CFG] No props were found"); } } integrity(); @@ -58,7 +58,7 @@ public Boolean isAuditEnable() { if (new Date().getTime() - lastUpdate >= DELTA_MS) { synchronized(PROPS_NAME_CONTROL_LOG_ENABLED) { if (new Date().getTime() - lastUpdate >= DELTA_MS) { - refresh(DISPATCHER, PROPS_NAME_AUDIT_ENABLED); + refresh(PROPS_NAME_AUDIT_ENABLED); } } } @@ -73,7 +73,7 @@ public Boolean isControlLogPersistenceEnable() { if (new Date().getTime() - lastUpdate >= DELTA_MS) { synchronized(PROPS_NAME_CONTROL_LOG_ENABLED) { if (new Date().getTime() - lastUpdate >= DELTA_MS) { - refresh(GENERIC, PROPS_NAME_CONTROL_LOG_ENABLED); + refresh(PROPS_NAME_CONTROL_LOG_ENABLED); } } } @@ -88,7 +88,7 @@ public Boolean isSubjectNotAllowed() { if (new Date().getTime() - lastUpdate >= DELTA_MS) { synchronized (PROPS_NAME_SUBJECT) { if (new Date().getTime() - lastUpdate >= DELTA_MS) { - refresh(GENERIC, PROPS_NAME_SUBJECT); + refresh(PROPS_NAME_SUBJECT); } } } @@ -103,7 +103,7 @@ public Boolean isCfOnIssuerNotAllowed() { if (new Date().getTime() - lastUpdate >= DELTA_MS) { synchronized(PROPS_NAME_ISSUER_CF) { if (new Date().getTime() - lastUpdate >= DELTA_MS) { - refresh(GENERIC, PROPS_NAME_ISSUER_CF); + refresh(PROPS_NAME_ISSUER_CF); } } } @@ -112,9 +112,9 @@ public Boolean isCfOnIssuerNotAllowed() { ); } - private void refresh(ConfigItemTypeEnum type, String name) { + private void refresh(String name) { String previous = props.getOrDefault(name, Pair.of(0L, null)).getValue(); - String prop = client.getProps(type, name, previous); + String prop = client.getProps(name, previous, DISPATCHER); props.put(name, Pair.of(new Date().getTime(), prop)); }