From 96fba5cb03e9540644df5c0a1262dbe7291dd71e Mon Sep 17 00:00:00 2001 From: EddeCCC Date: Wed, 21 Aug 2024 15:14:15 +0200 Subject: [PATCH] add configuration update check --- .../ConfigurationPersistence.java | 23 ++++++++++++++++++- .../file/ConfigurationFileReader.java | 2 +- .../http/HttpConfigurationCallback.java | 1 - .../http/HttpConfigurationPoller.java | 10 ++++---- .../properties/PropertiesResolver.java | 3 +-- .../notification/NotificationManager.java | 3 --- 6 files changed, 28 insertions(+), 14 deletions(-) diff --git a/src/main/java/rocks/inspectit/gepard/agent/configuration/ConfigurationPersistence.java b/src/main/java/rocks/inspectit/gepard/agent/configuration/ConfigurationPersistence.java index fb24dd2..9657007 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/configuration/ConfigurationPersistence.java +++ b/src/main/java/rocks/inspectit/gepard/agent/configuration/ConfigurationPersistence.java @@ -1,5 +1,6 @@ package rocks.inspectit.gepard.agent.configuration; +import java.io.IOException; import java.util.Objects; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -7,6 +8,7 @@ import rocks.inspectit.gepard.agent.configuration.file.ConfigurationFileWriter; import rocks.inspectit.gepard.agent.internal.configuration.model.InspectitConfiguration; import rocks.inspectit.gepard.agent.internal.configuration.observer.ConfigurationReceivedSubject; +import rocks.inspectit.gepard.agent.internal.configuration.util.ConfigurationMapper; public class ConfigurationPersistence { private static final Logger log = LoggerFactory.getLogger(ConfigurationPersistence.class); @@ -57,6 +59,25 @@ public void loadLocalConfiguration() { * @param configuration the new configuration */ public void processConfiguration(InspectitConfiguration configuration) { - configurationSubject.notifyObservers(configuration); + if (configurationIsSame(configuration)) log.info("Configuration has not changed"); + else configurationSubject.notifyObservers(configuration); + } + + // TODO Remove this method and check for changes in the configuration server + /** + * Temporary method to check, whether the configuration has changed. + * + * @return true, if the new configuration differs from the current one + */ + private boolean configurationIsSame(InspectitConfiguration configuration) { + InspectitConfiguration currentConfig = reader.readConfiguration(); + try { + String current = ConfigurationMapper.toString(currentConfig); + String update = ConfigurationMapper.toString(configuration); + return current.equals(update); + } catch (IOException e) { + log.error("Could not compare configurations", e); + throw new RuntimeException(e); + } } } diff --git a/src/main/java/rocks/inspectit/gepard/agent/configuration/file/ConfigurationFileReader.java b/src/main/java/rocks/inspectit/gepard/agent/configuration/file/ConfigurationFileReader.java index 985c7a5..9350300 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/configuration/file/ConfigurationFileReader.java +++ b/src/main/java/rocks/inspectit/gepard/agent/configuration/file/ConfigurationFileReader.java @@ -35,7 +35,7 @@ public static ConfigurationFileReader create() { public InspectitConfiguration readConfiguration() { try { byte[] rawFileContent = fileAccessor.readFile(filePath); - String fileContent = new String(rawFileContent); // TODO Add encoding? + String fileContent = new String(rawFileContent); return ConfigurationMapper.toObject(fileContent); } catch (IOException e) { log.error("Could not read local configuration", e); diff --git a/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationCallback.java b/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationCallback.java index 322eb2c..7d99d14 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationCallback.java +++ b/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationCallback.java @@ -29,7 +29,6 @@ public void completed(SimpleHttpResponse result) { if (result.getCode() == 200) { String body = result.getBodyText(); try { - // ToDo Only process, if changes were made InspectitConfiguration configuration = ConfigurationMapper.toObject(body); persistence.processConfiguration(configuration); } catch (IOException e) { diff --git a/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationPoller.java b/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationPoller.java index 7b335ba..d75795f 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationPoller.java +++ b/src/main/java/rocks/inspectit/gepard/agent/configuration/http/HttpConfigurationPoller.java @@ -32,15 +32,13 @@ public void run() { successful = pollConfiguration(); } catch (Exception e) { log.error("Error while polling configuration", e); - return; + successful = false; } - if (successful) { - log.info("Configuration was polled successfully"); - } else if (isFirstAttempt) { - log.warn("Configuration polling failed - Trying to load local configuration..."); + if (!successful && isFirstAttempt) { + log.info("Trying to load local configuration..."); persistence.loadLocalConfiguration(); - } else log.error("Configuration polling failed"); + } isFirstAttempt = false; } diff --git a/src/main/java/rocks/inspectit/gepard/agent/internal/properties/PropertiesResolver.java b/src/main/java/rocks/inspectit/gepard/agent/internal/properties/PropertiesResolver.java index 05d0144..68c68c7 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/internal/properties/PropertiesResolver.java +++ b/src/main/java/rocks/inspectit/gepard/agent/internal/properties/PropertiesResolver.java @@ -69,8 +69,7 @@ private static String getDefaultPersistenceFile() { String suffix = "inspectit-gepard/last-http-config.json"; File agentFile = JavaagentFileHolder.getJavaagentFile(); - if (Objects.nonNull(agentFile)) - return JavaagentFileHolder.getJavaagentFile().getParent() + "/" + suffix; + if (Objects.nonNull(agentFile)) return agentFile.getParent() + "/" + suffix; return suffix; } diff --git a/src/main/java/rocks/inspectit/gepard/agent/notification/NotificationManager.java b/src/main/java/rocks/inspectit/gepard/agent/notification/NotificationManager.java index 8e97bb6..3f2a156 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/notification/NotificationManager.java +++ b/src/main/java/rocks/inspectit/gepard/agent/notification/NotificationManager.java @@ -42,9 +42,6 @@ public boolean sendStartNotification() { else { log.info("Sending start notification to configuration server with url: {}", serverBaseUrl); successful = startNotifier.sendNotification(serverBaseUrl); - - if (successful) log.info("Successfully notified configuration server about start"); - else log.warn("Could not notify configuration server about start"); } return successful; }