diff --git a/.idea/libraries/Maven__com_cwbase_logback_redis_appender_1_1_6.xml b/.idea/libraries/Maven__com_cwbase_logback_redis_appender_1_1_6.xml
new file mode 100644
index 0000000..53d5a43
--- /dev/null
+++ b/.idea/libraries/Maven__com_cwbase_logback_redis_appender_1_1_6.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml
new file mode 100644
index 0000000..bc7d7fd
--- /dev/null
+++ b/.idea/libraries/Maven__com_fasterxml_classmate_1_5_1.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_persistence_jakarta_persistence_api_2_2_3.xml b/.idea/libraries/Maven__jakarta_persistence_jakarta_persistence_api_2_2_3.xml
new file mode 100644
index 0000000..c11957d
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_persistence_jakarta_persistence_api_2_2_3.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml b/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml
new file mode 100644
index 0000000..e66afb9
--- /dev/null
+++ b/.idea/libraries/Maven__jakarta_validation_jakarta_validation_api_2_0_2.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_1_5_Final.xml b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_1_5_Final.xml
new file mode 100644
index 0000000..6d045ad
--- /dev/null
+++ b/.idea/libraries/Maven__org_hibernate_validator_hibernate_validator_6_1_5_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml
new file mode 100644
index 0000000..0b76247
--- /dev/null
+++ b/.idea/libraries/Maven__org_jboss_logging_jboss_logging_3_4_1_Final.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_3_1_RELEASE.xml b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_3_1_RELEASE.xml
new file mode 100644
index 0000000..559d806
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_boot_spring_boot_starter_validation_2_3_1_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_2_6_RELEASE.xml b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_2_6_RELEASE.xml
new file mode 100644
index 0000000..86ebc51
--- /dev/null
+++ b/.idea/libraries/Maven__org_springframework_data_spring_data_redis_2_2_6_RELEASE.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/java/com/release11/klaus/model/constraints/HttpCode.java b/src/main/java/com/release11/klaus/model/constraints/HttpCode.java
new file mode 100644
index 0000000..05c6a20
--- /dev/null
+++ b/src/main/java/com/release11/klaus/model/constraints/HttpCode.java
@@ -0,0 +1,19 @@
+package com.release11.klaus.model.constraints;
+
+import javax.validation.Constraint;
+import javax.validation.Payload;
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+
+@Target({ ElementType.FIELD})
+@Retention(RetentionPolicy.RUNTIME)
+@Constraint(validatedBy = HttpCodeValidation.class )
+public @interface HttpCode {
+ String message() default "must be a valid http code";
+
+ Class>[] groups() default { };
+ Class extends Payload>[] payload() default { };
+}
diff --git a/src/main/java/com/release11/klaus/model/constraints/HttpCodeValidation.java b/src/main/java/com/release11/klaus/model/constraints/HttpCodeValidation.java
new file mode 100644
index 0000000..57bbd62
--- /dev/null
+++ b/src/main/java/com/release11/klaus/model/constraints/HttpCodeValidation.java
@@ -0,0 +1,28 @@
+package com.release11.klaus.model.constraints;
+
+import com.release11.klaus.repository.MockedResponseRepository;
+import org.springframework.http.HttpStatus;
+
+import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorContext;
+import java.util.EnumSet;
+import java.util.List;
+import java.util.Set;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+public class HttpCodeValidation implements ConstraintValidator {
+ private Set allowedValues;
+
+ @Override
+ public void initialize(HttpCode targetEnum) {
+ allowedValues = Stream.of(HttpStatus.values())
+ .map(HttpStatus::value)
+ .collect(Collectors.toSet());
+ }
+
+ @Override
+ public boolean isValid(Integer integer, ConstraintValidatorContext context) {
+ return allowedValues.contains(integer);
+ }
+}
diff --git a/src/main/java/com/release11/klaus/repository/LogsRepository.java b/src/main/java/com/release11/klaus/repository/LogsRepository.java
new file mode 100644
index 0000000..bf803bc
--- /dev/null
+++ b/src/main/java/com/release11/klaus/repository/LogsRepository.java
@@ -0,0 +1,12 @@
+package com.release11.klaus.repository;
+
+import com.release11.klaus.utilis.BusinessKey;
+import org.springframework.stereotype.Repository;
+
+import java.time.ZonedDateTime;
+import java.util.List;
+
+@Repository
+public interface LogsRepository {
+ String getLogsByBusinessKeys(List businessKeys, ZonedDateTime zonedDateTime);
+}
diff --git a/src/main/java/com/release11/klaus/utilis/BusinessKey.java b/src/main/java/com/release11/klaus/utilis/BusinessKey.java
new file mode 100644
index 0000000..d647c75
--- /dev/null
+++ b/src/main/java/com/release11/klaus/utilis/BusinessKey.java
@@ -0,0 +1,16 @@
+package com.release11.klaus.utilis;
+
+import lombok.AllArgsConstructor;
+
+@AllArgsConstructor
+public enum BusinessKey {
+ INTERFACE_NAME("interfaceName"),
+ CLIENT_UUID("clientUUID"),
+ MESSAGE_ID("messageId");
+
+ private final String phrase;
+
+ public String getReasonPhrase() {
+ return this.phrase;
+ }
+}
diff --git a/src/main/java/com/release11/klaus/utilis/TrackingClient.java b/src/main/java/com/release11/klaus/utilis/TrackingClient.java
new file mode 100644
index 0000000..fecacef
--- /dev/null
+++ b/src/main/java/com/release11/klaus/utilis/TrackingClient.java
@@ -0,0 +1,18 @@
+package com.release11.klaus.utilis;
+
+import org.slf4j.MDC;
+
+import java.util.Map;
+
+public final class TrackingClient {
+
+ private TrackingClient(){};
+
+ public static void setBusinessKeys(Map businessKeysMap){
+ for (Map.Entry entry : businessKeysMap.entrySet()) {
+ MDC.put(entry.getKey().getReasonPhrase(), entry.getValue());
+ }
+ }
+
+
+}
diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml
new file mode 100644
index 0000000..476fda0
--- /dev/null
+++ b/src/main/resources/logback.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ localhost
+ 6379
+ logstash
+
+
+
+ {"date" : "%d{yyyy-MM-dd}", "timestamp":"%d{HH:mm:ss}", "businessKeys": ["interfaceName": "%X{interfaceName}", "clientUUID": "%X{clientUUID}", "messageId": "%X{messageId}"],"thread":"%t","level":"%-5level", "message":"%msg"}%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/main/resources/static/js/main.js b/src/main/resources/static/js/main.js
new file mode 100644
index 0000000..3e322d2
--- /dev/null
+++ b/src/main/resources/static/js/main.js
@@ -0,0 +1,38 @@
+
+function httpGet()
+{
+ var clientUUID = document.getElementById("getClientUUID").value;
+ var mockedResponseId = document.getElementById("getMockedResponseId").value;
+ var url = "http://localhost:8097/klaus/v1/get/" + clientUUID + "/" + mockedResponseId;
+ var xmlHttp = new XMLHttpRequest();
+ xmlHttp.open( "GET", url, false ); // false for synchronous request
+ xmlHttp.send( null );
+
+ var container = document.getElementById("getMockedResponse");
+ var headers = xmlHttp.getAllResponseHeaders();
+ container.appendChild(document.createTextNode(headers));
+ container.appendChild(document.createTextNode("Your message: "));
+ container.appendChild(document.createElement("br"));
+ container.appendChild(document.createTextNode((xmlHttp.responseText)));
+ return xmlHttp.responseText;
+
+}
+
+ var numberOfHeaders = 0;
+ function addFields(){
+ var container = document.getElementById("headers");
+
+ numberOfHeaders++;
+ container.appendChild(document.createElement("br"));
+ container.appendChild(document.createTextNode("Header " + (numberOfHeaders)));
+ var headerInput = document.createElement("input");
+ headerInput.type = "text";
+ headerInput.name = "header";
+ container.appendChild(headerInput);
+
+ container.appendChild(document.createTextNode("Value " + (numberOfHeaders)));
+ var valueInput = document.createElement("input");
+ valueInput.type = "text";
+ valueInput.name = "value";
+ container.appendChild(valueInput);
+ }
\ No newline at end of file
diff --git a/target/classes/META-INF/Klaus.kotlin_module b/target/classes/META-INF/Klaus.kotlin_module
new file mode 100644
index 0000000..a49347a
Binary files /dev/null and b/target/classes/META-INF/Klaus.kotlin_module differ
diff --git a/target/classes/com/release11/klaus/model/constraints/HttpCode.class b/target/classes/com/release11/klaus/model/constraints/HttpCode.class
new file mode 100644
index 0000000..c2cbb82
Binary files /dev/null and b/target/classes/com/release11/klaus/model/constraints/HttpCode.class differ
diff --git a/target/classes/com/release11/klaus/model/constraints/HttpCodeValidation.class b/target/classes/com/release11/klaus/model/constraints/HttpCodeValidation.class
new file mode 100644
index 0000000..183a0e2
Binary files /dev/null and b/target/classes/com/release11/klaus/model/constraints/HttpCodeValidation.class differ
diff --git a/target/classes/com/release11/klaus/repository/LogsRepository.class b/target/classes/com/release11/klaus/repository/LogsRepository.class
new file mode 100644
index 0000000..0c36ee4
Binary files /dev/null and b/target/classes/com/release11/klaus/repository/LogsRepository.class differ
diff --git a/target/classes/com/release11/klaus/utilis/BusinessKey.class b/target/classes/com/release11/klaus/utilis/BusinessKey.class
new file mode 100644
index 0000000..591e4df
Binary files /dev/null and b/target/classes/com/release11/klaus/utilis/BusinessKey.class differ
diff --git a/target/classes/com/release11/klaus/utilis/TrackingClient.class b/target/classes/com/release11/klaus/utilis/TrackingClient.class
new file mode 100644
index 0000000..99271ce
Binary files /dev/null and b/target/classes/com/release11/klaus/utilis/TrackingClient.class differ
diff --git a/target/classes/logback.xml b/target/classes/logback.xml
new file mode 100644
index 0000000..476fda0
--- /dev/null
+++ b/target/classes/logback.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+ localhost
+ 6379
+ logstash
+
+
+
+ {"date" : "%d{yyyy-MM-dd}", "timestamp":"%d{HH:mm:ss}", "businessKeys": ["interfaceName": "%X{interfaceName}", "clientUUID": "%X{clientUUID}", "messageId": "%X{messageId}"],"thread":"%t","level":"%-5level", "message":"%msg"}%n
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/target/classes/static/js/main.js b/target/classes/static/js/main.js
new file mode 100644
index 0000000..3e322d2
--- /dev/null
+++ b/target/classes/static/js/main.js
@@ -0,0 +1,38 @@
+
+function httpGet()
+{
+ var clientUUID = document.getElementById("getClientUUID").value;
+ var mockedResponseId = document.getElementById("getMockedResponseId").value;
+ var url = "http://localhost:8097/klaus/v1/get/" + clientUUID + "/" + mockedResponseId;
+ var xmlHttp = new XMLHttpRequest();
+ xmlHttp.open( "GET", url, false ); // false for synchronous request
+ xmlHttp.send( null );
+
+ var container = document.getElementById("getMockedResponse");
+ var headers = xmlHttp.getAllResponseHeaders();
+ container.appendChild(document.createTextNode(headers));
+ container.appendChild(document.createTextNode("Your message: "));
+ container.appendChild(document.createElement("br"));
+ container.appendChild(document.createTextNode((xmlHttp.responseText)));
+ return xmlHttp.responseText;
+
+}
+
+ var numberOfHeaders = 0;
+ function addFields(){
+ var container = document.getElementById("headers");
+
+ numberOfHeaders++;
+ container.appendChild(document.createElement("br"));
+ container.appendChild(document.createTextNode("Header " + (numberOfHeaders)));
+ var headerInput = document.createElement("input");
+ headerInput.type = "text";
+ headerInput.name = "header";
+ container.appendChild(headerInput);
+
+ container.appendChild(document.createTextNode("Value " + (numberOfHeaders)));
+ var valueInput = document.createElement("input");
+ valueInput.type = "text";
+ valueInput.name = "value";
+ container.appendChild(valueInput);
+ }
\ No newline at end of file