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[] 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