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 e4e4d93..322eb2c 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 @@ -1,5 +1,6 @@ package rocks.inspectit.gepard.agent.configuration.http; +import java.io.IOException; import org.apache.hc.client5.http.async.methods.SimpleHttpResponse; import org.apache.hc.core5.concurrent.FutureCallback; import org.slf4j.Logger; @@ -8,8 +9,6 @@ import rocks.inspectit.gepard.agent.internal.configuration.model.InspectitConfiguration; import rocks.inspectit.gepard.agent.internal.configuration.util.ConfigurationMapper; -import java.io.IOException; - /** Callback for configuration requests to the configuration server. */ public class HttpConfigurationCallback implements FutureCallback { private static final Logger log = LoggerFactory.getLogger(HttpConfigurationCallback.class); @@ -30,10 +29,11 @@ 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) { - log.error("Could not process new configuration", e); + log.error("Could not process new configuration", e); } } } diff --git a/src/main/java/rocks/inspectit/gepard/agent/internal/configuration/file/ConfigurationFileAccessor.java b/src/main/java/rocks/inspectit/gepard/agent/internal/configuration/file/ConfigurationFileAccessor.java index b0b58c4..70b30d3 100644 --- a/src/main/java/rocks/inspectit/gepard/agent/internal/configuration/file/ConfigurationFileAccessor.java +++ b/src/main/java/rocks/inspectit/gepard/agent/internal/configuration/file/ConfigurationFileAccessor.java @@ -9,8 +9,11 @@ import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReadWriteLock; import java.util.concurrent.locks.ReentrantReadWriteLock; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; public class ConfigurationFileAccessor { + private static final Logger log = LoggerFactory.getLogger(ConfigurationFileAccessor.class); private static ConfigurationFileAccessor instance; @@ -34,7 +37,7 @@ public static ConfigurationFileAccessor getInstance() { public byte[] readFile(Path path) throws IOException { readLock.lock(); try { - if (!Files.exists(path)) + if (Files.notExists(path)) throw new FileNotFoundException("Configuration file not found: " + path); if (!Files.isReadable(path)) @@ -49,8 +52,11 @@ public byte[] readFile(Path path) throws IOException { public void writeFile(Path path, String content) throws IOException { writeLock.lock(); try { - if (!Files.exists(path)) - throw new FileNotFoundException("Configuration file not found: " + path); + if (Files.notExists(path)) { + log.info("Creating local configuration file at {}", path); + Files.createDirectories(path.getParent()); + Files.createFile(path); + } if (!Files.isWritable(path)) throw new AccessDeniedException("Configuration file is not writable: " + path); 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 c126181..b5fbca7 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 @@ -1,5 +1,6 @@ package rocks.inspectit.gepard.agent.internal.properties; +import io.opentelemetry.javaagent.bootstrap.JavaagentFileHolder; import java.time.Duration; import java.util.Objects; @@ -63,9 +64,10 @@ public static String getPersistenceFile() { * * @return the default persistence file name */ + @SuppressWarnings("ConstantConditions") private static String getDefaultPersistenceFile() { - // TODO optimize location - return "inspectit-gepard/last-http-config.json"; + String suffix = "/inspectit-gepard/last-http-config.json"; + return JavaagentFileHolder.getJavaagentFile().getParent() + suffix; } /** diff --git a/src/test/java/rocks/inspectit/gepard/agent/internal/configuration/util/ConfigurationMapperTest.java b/src/test/java/rocks/inspectit/gepard/agent/internal/configuration/util/ConfigurationMapperTest.java index 935730a..30dbd79 100644 --- a/src/test/java/rocks/inspectit/gepard/agent/internal/configuration/util/ConfigurationMapperTest.java +++ b/src/test/java/rocks/inspectit/gepard/agent/internal/configuration/util/ConfigurationMapperTest.java @@ -2,12 +2,11 @@ import static org.junit.jupiter.api.Assertions.*; +import java.io.IOException; import org.junit.jupiter.api.Test; import rocks.inspectit.gepard.agent.internal.configuration.exception.CouldNotDeserializeConfigurationException; import rocks.inspectit.gepard.agent.internal.configuration.model.InspectitConfiguration; -import java.io.IOException; - class ConfigurationMapperTest { @Test