adding missing files
This commit is contained in:
		
							
								
								
									
										13
									
								
								.idea/libraries/Maven__net_logstash_logback_logstash_logback_encoder_6_4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								.idea/libraries/Maven__net_logstash_logback_logstash_logback_encoder_6_4.xml
									
									
									
										generated
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,13 @@ | ||||
| <component name="libraryTable"> | ||||
|   <library name="Maven: net.logstash.logback:logstash-logback-encoder:6.4"> | ||||
|     <CLASSES> | ||||
|       <root url="jar://$MAVEN_REPOSITORY$/net/logstash/logback/logstash-logback-encoder/6.4/logstash-logback-encoder-6.4.jar!/" /> | ||||
|     </CLASSES> | ||||
|     <JAVADOC> | ||||
|       <root url="jar://$MAVEN_REPOSITORY$/net/logstash/logback/logstash-logback-encoder/6.4/logstash-logback-encoder-6.4-javadoc.jar!/" /> | ||||
|     </JAVADOC> | ||||
|     <SOURCES> | ||||
|       <root url="jar://$MAVEN_REPOSITORY$/net/logstash/logback/logstash-logback-encoder/6.4/logstash-logback-encoder-6.4-sources.jar!/" /> | ||||
|     </SOURCES> | ||||
|   </library> | ||||
| </component> | ||||
| @@ -1,180 +0,0 @@ | ||||
| Index: src/main/resources/data-access.properties | ||||
| IDEA additional info: | ||||
| Subsystem: com.intellij.openapi.diff.impl.patch.BaseRevisionTextPatchEP | ||||
| <+>redis.host = redis-server\r\nredis.port = 6379 | ||||
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | ||||
| <+>windows-1252 | ||||
| =================================================================== | ||||
| --- src/main/resources/data-access.properties	(revision 37db249a69977824a4908292c11c4e1324adb132) | ||||
| +++ src/main/resources/data-access.properties	(date 1597659599864) | ||||
| @@ -1,2 +1,3 @@ | ||||
| -redis.host = redis-server | ||||
| +//redis.host = redis-server | ||||
| +redis.host = localhost | ||||
|  redis.port = 6379 | ||||
| \ No newline at end of file | ||||
| Index: .idea/inspectionProfiles/Project_Default.xml | ||||
| IDEA additional info: | ||||
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | ||||
| <+>UTF-8 | ||||
| =================================================================== | ||||
| --- .idea/inspectionProfiles/Project_Default.xml	(date 1598274178652) | ||||
| +++ .idea/inspectionProfiles/Project_Default.xml	(date 1598274178652) | ||||
| @@ -0,0 +1,23 @@ | ||||
| +<component name="InspectionProjectProfileManager"> | ||||
| +  <profile version="1.0"> | ||||
| +    <option name="myName" value="Project Default" /> | ||||
| +    <inspection_tool class="HtmlUnknownAttribute" enabled="true" level="WARNING" enabled_by_default="true"> | ||||
| +      <option name="myValues"> | ||||
| +        <value> | ||||
| +          <list size="9"> | ||||
| +            <item index="0" class="java.lang.String" itemvalue="th:field" /> | ||||
| +            <item index="1" class="java.lang.String" itemvalue="th:action" /> | ||||
| +            <item index="2" class="java.lang.String" itemvalue="th:object" /> | ||||
| +            <item index="3" class="java.lang.String" itemvalue="th:placeholder" /> | ||||
| +            <item index="4" class="java.lang.String" itemvalue="th:value" /> | ||||
| +            <item index="5" class="java.lang.String" itemvalue="th:name" /> | ||||
| +            <item index="6" class="java.lang.String" itemvalue="rows" /> | ||||
| +            <item index="7" class="java.lang.String" itemvalue="cols" /> | ||||
| +            <item index="8" class="java.lang.String" itemvalue="th:hidden" /> | ||||
| +          </list> | ||||
| +        </value> | ||||
| +      </option> | ||||
| +      <option name="myCustomValuesEnabled" value="true" /> | ||||
| +    </inspection_tool> | ||||
| +  </profile> | ||||
| +</component> | ||||
| \ No newline at end of file | ||||
| Index: .idea/uiDesigner.xml | ||||
| IDEA additional info: | ||||
| Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP | ||||
| <+>UTF-8 | ||||
| =================================================================== | ||||
| --- .idea/uiDesigner.xml	(date 1598257920551) | ||||
| +++ .idea/uiDesigner.xml	(date 1598257920551) | ||||
| @@ -0,0 +1,124 @@ | ||||
| +<?xml version="1.0" encoding="UTF-8"?> | ||||
| +<project version="4"> | ||||
| +  <component name="Palette2"> | ||||
| +    <group name="Swing"> | ||||
| +      <item class="com.intellij.uiDesigner.HSpacer" tooltip-text="Horizontal Spacer" icon="/com/intellij/uiDesigner/icons/hspacer.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="1" hsize-policy="6" anchor="0" fill="1" /> | ||||
| +      </item> | ||||
| +      <item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JButton" icon="/com/intellij/uiDesigner/icons/button.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="3" anchor="0" fill="1" /> | ||||
| +        <initial-values> | ||||
| +          <property name="text" value="Button" /> | ||||
| +        </initial-values> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JRadioButton" icon="/com/intellij/uiDesigner/icons/radioButton.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> | ||||
| +        <initial-values> | ||||
| +          <property name="text" value="RadioButton" /> | ||||
| +        </initial-values> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" /> | ||||
| +        <initial-values> | ||||
| +          <property name="text" value="CheckBox" /> | ||||
| +        </initial-values> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JLabel" icon="/com/intellij/uiDesigner/icons/label.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="0" anchor="8" fill="0" /> | ||||
| +        <initial-values> | ||||
| +          <property name="text" value="Label" /> | ||||
| +        </initial-values> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JTextField" icon="/com/intellij/uiDesigner/icons/textField.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||
| +          <preferred-size width="150" height="-1" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JPasswordField" icon="/com/intellij/uiDesigner/icons/passwordField.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||
| +          <preferred-size width="150" height="-1" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JFormattedTextField" icon="/com/intellij/uiDesigner/icons/formattedTextField.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1"> | ||||
| +          <preferred-size width="150" height="-1" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JTextArea" icon="/com/intellij/uiDesigner/icons/textArea.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
| +          <preferred-size width="150" height="50" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JTextPane" icon="/com/intellij/uiDesigner/icons/textPane.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
| +          <preferred-size width="150" height="50" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JEditorPane" icon="/com/intellij/uiDesigner/icons/editorPane.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
| +          <preferred-size width="150" height="50" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JComboBox" icon="/com/intellij/uiDesigner/icons/comboBox.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="2" anchor="8" fill="1" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JTable" icon="/com/intellij/uiDesigner/icons/table.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
| +          <preferred-size width="150" height="50" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JList" icon="/com/intellij/uiDesigner/icons/list.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="2" anchor="0" fill="3"> | ||||
| +          <preferred-size width="150" height="50" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JTree" icon="/com/intellij/uiDesigner/icons/tree.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3"> | ||||
| +          <preferred-size width="150" height="50" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JTabbedPane" icon="/com/intellij/uiDesigner/icons/tabbedPane.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> | ||||
| +          <preferred-size width="200" height="200" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JSplitPane" icon="/com/intellij/uiDesigner/icons/splitPane.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3"> | ||||
| +          <preferred-size width="200" height="200" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JSpinner" icon="/com/intellij/uiDesigner/icons/spinner.png" removable="false" auto-create-binding="true" can-attach-label="true"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JSlider" icon="/com/intellij/uiDesigner/icons/slider.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="6" anchor="8" fill="1" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JSeparator" icon="/com/intellij/uiDesigner/icons/separator.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="6" anchor="0" fill="3" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JProgressBar" icon="/com/intellij/uiDesigner/icons/progressbar.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JToolBar" icon="/com/intellij/uiDesigner/icons/toolbar.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="6" anchor="0" fill="1"> | ||||
| +          <preferred-size width="-1" height="20" /> | ||||
| +        </default-constraints> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JToolBar$Separator" icon="/com/intellij/uiDesigner/icons/toolbarSeparator.png" removable="false" auto-create-binding="false" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="0" hsize-policy="0" anchor="0" fill="1" /> | ||||
| +      </item> | ||||
| +      <item class="javax.swing.JScrollBar" icon="/com/intellij/uiDesigner/icons/scrollbar.png" removable="false" auto-create-binding="true" can-attach-label="false"> | ||||
| +        <default-constraints vsize-policy="6" hsize-policy="0" anchor="0" fill="2" /> | ||||
| +      </item> | ||||
| +    </group> | ||||
| +  </component> | ||||
| +</project> | ||||
| \ No newline at end of file | ||||
							
								
								
									
										28
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										28
									
								
								.idea/workspace.xml
									
									
									
										generated
									
									
									
								
							| @@ -19,10 +19,7 @@ | ||||
|     <select /> | ||||
|   </component> | ||||
|   <component name="ChangeListManager"> | ||||
|     <list default="true" id="458cde88-df3d-44bc-9d57-a33823e2f1a6" name="Default Changelist" comment=""> | ||||
|       <change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" /> | ||||
|       <change beforePath="$PROJECT_DIR$/Klaus.iml" beforeDir="false" afterPath="$PROJECT_DIR$/Klaus.iml" afterDir="false" /> | ||||
|     </list> | ||||
|     <list default="true" id="458cde88-df3d-44bc-9d57-a33823e2f1a6" name="Default Changelist" comment="" /> | ||||
|     <option name="SHOW_DIALOG" value="false" /> | ||||
|     <option name="HIGHLIGHT_CONFLICTS" value="true" /> | ||||
|     <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" /> | ||||
| @@ -252,7 +249,21 @@ | ||||
|       <option name="project" value="LOCAL" /> | ||||
|       <updated>1599228274986</updated> | ||||
|     </task> | ||||
|     <option name="localTasksCounter" value="12" /> | ||||
|     <task id="LOCAL-00012" summary="iml fix"> | ||||
|       <created>1599228665178</created> | ||||
|       <option name="number" value="00012" /> | ||||
|       <option name="presentableId" value="LOCAL-00012" /> | ||||
|       <option name="project" value="LOCAL" /> | ||||
|       <updated>1599228665178</updated> | ||||
|     </task> | ||||
|     <task id="LOCAL-00013" summary="iml fix"> | ||||
|       <created>1599228713444</created> | ||||
|       <option name="number" value="00013" /> | ||||
|       <option name="presentableId" value="LOCAL-00013" /> | ||||
|       <option name="project" value="LOCAL" /> | ||||
|       <updated>1599228713444</updated> | ||||
|     </task> | ||||
|     <option name="localTasksCounter" value="14" /> | ||||
|     <servers /> | ||||
|   </component> | ||||
|   <component name="Vcs.Log.Tabs.Properties"> | ||||
| @@ -279,7 +290,8 @@ | ||||
|     <MESSAGE value="updating html pages" /> | ||||
|     <MESSAGE value="MvcExceptionHandler" /> | ||||
|     <MESSAGE value="Etrack works!!!" /> | ||||
|     <option name="LAST_COMMIT_MESSAGE" value="Etrack works!!!" /> | ||||
|     <MESSAGE value="iml fix" /> | ||||
|     <option name="LAST_COMMIT_MESSAGE" value="iml fix" /> | ||||
|   </component> | ||||
|   <component name="WindowStateProjectService"> | ||||
|     <state x="574" y="128" key="#com.intellij.ide.util.MemberChooser" timestamp="1599035277816"> | ||||
| @@ -338,10 +350,10 @@ | ||||
|       <screen x="0" y="0" width="1536" height="824" /> | ||||
|     </state> | ||||
|     <state x="299" y="67" key="Maven.ArtifactSearchDialog/0.0.1536.824@0.0.1536.824" timestamp="1598862685882" /> | ||||
|     <state x="361" y="145" key="Vcs.Push.Dialog.v2" timestamp="1599228369824"> | ||||
|     <state x="361" y="145" key="Vcs.Push.Dialog.v2" timestamp="1599228717329"> | ||||
|       <screen x="0" y="0" width="1536" height="824" /> | ||||
|     </state> | ||||
|     <state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1599228369824" /> | ||||
|     <state x="361" y="145" key="Vcs.Push.Dialog.v2/0.0.1536.824@0.0.1536.824" timestamp="1599228717329" /> | ||||
|     <state x="209" y="33" key="new project wizard" timestamp="1598955672188"> | ||||
|       <screen x="0" y="0" width="1536" height="824" /> | ||||
|     </state> | ||||
|   | ||||
| @@ -0,0 +1,29 @@ | ||||
| package com.release11.klaus.controller; | ||||
|  | ||||
| import com.release11.klaus.model.EventRequestDto; | ||||
| import com.release11.klaus.service.EtrackService; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.stereotype.Controller; | ||||
| import org.springframework.validation.BindingResult; | ||||
| import org.springframework.web.bind.annotation.PostMapping; | ||||
| import org.springframework.web.bind.annotation.RequestMapping; | ||||
| import org.springframework.web.bind.annotation.ResponseBody; | ||||
|  | ||||
| import javax.validation.Valid; | ||||
|  | ||||
| @Slf4j | ||||
| @Controller | ||||
| @RequestMapping | ||||
| @AllArgsConstructor | ||||
| public class EventController { | ||||
|  | ||||
|     private final EtrackService etrackService; | ||||
|      | ||||
|     @PostMapping("/eventsForm") | ||||
|     @ResponseBody | ||||
|     public String getLogs(@Valid EventRequestDto eventsDto, BindingResult bindingResult){ | ||||
|         return String.valueOf(etrackService.getEventsByDateTimeAndBusinessKeys(eventsDto)); | ||||
|     } | ||||
| } | ||||
|  | ||||
| @@ -0,0 +1,33 @@ | ||||
| package com.release11.klaus.controller; | ||||
|  | ||||
| import org.springframework.http.HttpStatus; | ||||
| import org.springframework.http.ResponseEntity; | ||||
| import org.springframework.validation.BindException; | ||||
| import org.springframework.web.bind.annotation.ControllerAdvice; | ||||
| import org.springframework.web.bind.annotation.ExceptionHandler; | ||||
|  | ||||
| import javax.validation.ConstraintViolationException; | ||||
| import java.util.ArrayList; | ||||
| import java.util.List; | ||||
|  | ||||
| @ControllerAdvice | ||||
| public class MvcExceptionHandler { | ||||
|  | ||||
|     @ExceptionHandler(ConstraintViolationException.class) | ||||
|     public ResponseEntity<List> validationErrorHandler(ConstraintViolationException e){ | ||||
|         List<String> errors = new ArrayList<>(e.getConstraintViolations().size()); | ||||
|  | ||||
|         e.getConstraintViolations().forEach(constraintViolation -> { | ||||
|             errors.add(constraintViolation.getPropertyPath() + " : " + constraintViolation.getMessage()); | ||||
|         }); | ||||
|         return new ResponseEntity<>(errors, HttpStatus.BAD_REQUEST); | ||||
|     } | ||||
|  | ||||
|     @ExceptionHandler(BindException.class) | ||||
|     public ResponseEntity<List> handleBindException(BindException ex){ | ||||
|         return new ResponseEntity(ex.getAllErrors(), HttpStatus.BAD_REQUEST); | ||||
|     } | ||||
|  | ||||
| } | ||||
|  | ||||
|  | ||||
							
								
								
									
										35
									
								
								src/main/java/com/release11/klaus/model/Event.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								src/main/java/com/release11/klaus/model/Event.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,35 @@ | ||||
| package com.release11.klaus.model; | ||||
|  | ||||
| import com.release11.klaus.utilis.BusinessKey; | ||||
| import lombok.*; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
| import org.springframework.lang.Nullable; | ||||
|  | ||||
| import javax.persistence.Entity; | ||||
| import java.time.LocalDate; | ||||
| import java.time.LocalDateTime; | ||||
| import java.time.LocalTime; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
| import java.util.UUID; | ||||
|  | ||||
| @Data | ||||
| @Entity | ||||
| @Builder | ||||
| @ToString | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class Event { | ||||
|  | ||||
|     @DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss") | ||||
|     private LocalDateTime dateTimeStamp; | ||||
|     @Nullable | ||||
|     private String[] businessKeys; | ||||
|     private String thread; | ||||
|     private String level; | ||||
|     @Nullable | ||||
|     private String message; | ||||
| } | ||||
|  | ||||
| //{"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 | ||||
							
								
								
									
										25
									
								
								src/main/java/com/release11/klaus/model/EventRequestDto.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								src/main/java/com/release11/klaus/model/EventRequestDto.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,25 @@ | ||||
| package com.release11.klaus.model; | ||||
|  | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.Builder; | ||||
| import lombok.Data; | ||||
| import lombok.NoArgsConstructor; | ||||
| import org.springframework.format.annotation.DateTimeFormat; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.UUID; | ||||
|  | ||||
| @Data | ||||
| @Builder | ||||
| @NoArgsConstructor | ||||
| @AllArgsConstructor | ||||
| public class EventRequestDto { | ||||
|  | ||||
|     private UUID clientUUID; | ||||
|     @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) | ||||
|     private LocalDateTime localDateTimeFrom; | ||||
|     @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) | ||||
|     private LocalDateTime localDateTimeTo; | ||||
|     private int mockedResponseId; | ||||
|  | ||||
| } | ||||
| @@ -0,0 +1,17 @@ | ||||
| package com.release11.klaus.repository; | ||||
|  | ||||
| import com.release11.klaus.model.Event; | ||||
| import com.release11.klaus.utilis.BusinessKey; | ||||
| import org.springframework.stereotype.Repository; | ||||
| import org.springframework.transaction.annotation.Transactional; | ||||
|  | ||||
| import java.time.LocalDateTime; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| @Repository | ||||
| @Transactional | ||||
| public interface EventRepository { | ||||
|     List<Event> findEvents(LocalDateTime localDateTimeFrom, LocalDateTime localDateTimeTo, | ||||
|                            Map<BusinessKey, String> businessKeys); | ||||
| } | ||||
| @@ -0,0 +1,72 @@ | ||||
| package com.release11.klaus.repository; | ||||
|  | ||||
| import com.fasterxml.jackson.core.JsonProcessingException; | ||||
| import com.fasterxml.jackson.databind.ObjectMapper; | ||||
| import com.release11.klaus.model.Event; | ||||
| import com.release11.klaus.utilis.BusinessKey; | ||||
| import lombok.AllArgsConstructor; | ||||
| import org.springframework.boot.configurationprocessor.json.JSONException; | ||||
| import org.springframework.boot.configurationprocessor.json.JSONObject; | ||||
| import org.springframework.stereotype.Repository; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisPool; | ||||
|  | ||||
| import java.time.LocalDate; | ||||
| import java.time.LocalDateTime; | ||||
| import java.time.LocalTime; | ||||
| import java.util.*; | ||||
| import java.util.stream.Collectors; | ||||
|  | ||||
| @Repository | ||||
| @AllArgsConstructor | ||||
| public class EventRepositoryImpl implements EventRepository { | ||||
|  | ||||
|     private final String LOG_PREFIX = "logstash_"; | ||||
|     private final JedisPool jedisPool; | ||||
|     private final ObjectMapper objectMapper; | ||||
|  | ||||
|     @Override | ||||
|     public List<Event> findEvents(LocalDateTime localDateTimeFrom, LocalDateTime localDateTimeTo, | ||||
|                                    Map<BusinessKey, String> businessKeys) { | ||||
|         List<String> eventStrings = findEventsBetweenDates(localDateTimeFrom.toLocalDate(), localDateTimeTo.toLocalDate()); | ||||
|         if (businessKeys.size() > 0) { | ||||
|             eventStrings = businessKeysFilter(eventStrings, businessKeys); | ||||
|         } | ||||
|         List<Event> events = parseEvents(eventStrings); | ||||
|         if (localDateTimeFrom.toLocalTime() != LocalTime.MIN) { | ||||
|             events = events.stream().filter(event -> event.getDateTimeStamp().compareTo(localDateTimeFrom) >= 0) | ||||
|                     .collect(Collectors.toList()); | ||||
|         } | ||||
|         return events.stream().filter(event -> event.getDateTimeStamp().compareTo(localDateTimeTo) <= 0) | ||||
|                 .collect(Collectors.toList()); | ||||
|     } | ||||
|  | ||||
|     private List<String> findEventsBetweenDates(LocalDate localDateFrom, LocalDate localDateTo) { | ||||
|         try (Jedis jedis = jedisPool.getResource()) { | ||||
|             return localDateFrom.datesUntil(localDateTo.plusDays(1)).map(day -> LOG_PREFIX + day.toString()) | ||||
|                     .map(key -> jedis.lrange(key, 0, -1)).flatMap(Collection::stream).collect(Collectors.toList()); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     private List<String> businessKeysFilter(List<String> events, Map<BusinessKey, String> businessKeys) { | ||||
|         List<String> resultList = new ArrayList<>(); | ||||
|         for (Map.Entry<BusinessKey, String> entry : businessKeys.entrySet()) { | ||||
|             String stringPattern = "\"" + entry.getKey() + ":" + entry.getValue() + "\""; | ||||
|             resultList = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList()); | ||||
|         } | ||||
|         return resultList; | ||||
|     } | ||||
|  | ||||
|     private List<Event> parseEvents(List<String> eventStrings) { | ||||
|         List<Event> events = new ArrayList<>(); | ||||
|         for (String eventString : eventStrings) { | ||||
|             try { | ||||
|                 events.add(objectMapper.readValue(eventString, Event.class)); | ||||
|             } catch (JsonProcessingException e) { | ||||
|                 System.out.println(e); | ||||
|                 e.printStackTrace(); | ||||
|             } | ||||
|         } | ||||
|         return events; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										12
									
								
								src/main/java/com/release11/klaus/service/EtrackService.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/main/java/com/release11/klaus/service/EtrackService.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | ||||
| package com.release11.klaus.service; | ||||
|  | ||||
| import com.release11.klaus.model.Event; | ||||
| import com.release11.klaus.model.EventRequestDto; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.List; | ||||
|  | ||||
| @Service | ||||
| public interface EtrackService { | ||||
|     List<Event> getEventsByDateTimeAndBusinessKeys(EventRequestDto eventsDto); | ||||
| } | ||||
| @@ -0,0 +1,29 @@ | ||||
| package com.release11.klaus.service; | ||||
|  | ||||
| import com.release11.klaus.model.Event; | ||||
| import com.release11.klaus.model.EventRequestDto; | ||||
| import com.release11.klaus.repository.EventRepository; | ||||
| import com.release11.klaus.utilis.BusinessKey; | ||||
| import lombok.AllArgsConstructor; | ||||
| import lombok.extern.slf4j.Slf4j; | ||||
| import org.springframework.stereotype.Service; | ||||
|  | ||||
| import java.util.HashMap; | ||||
| import java.util.List; | ||||
| import java.util.Map; | ||||
|  | ||||
| @Slf4j | ||||
| @Service | ||||
| @AllArgsConstructor | ||||
| public class EtrackServiceImpl implements EtrackService { | ||||
|  | ||||
|     private final EventRepository eventRepository; | ||||
|  | ||||
|     @Override | ||||
|     public List<Event> getEventsByDateTimeAndBusinessKeys(EventRequestDto eventsDto) { | ||||
|         Map<BusinessKey, String> businessKeys = new HashMap<>(); | ||||
|         businessKeys.put(BusinessKey.CLIENT_UUID, eventsDto.getClientUUID().toString()); | ||||
|         return eventRepository.findEvents(eventsDto.getLocalDateTimeFrom(), eventsDto.getLocalDateTimeTo(), | ||||
|                 businessKeys); | ||||
|     } | ||||
| } | ||||
							
								
								
									
										224
									
								
								src/main/java/com/release11/klaus/utilis/RedisAppender.java
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										224
									
								
								src/main/java/com/release11/klaus/utilis/RedisAppender.java
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,224 @@ | ||||
| package com.release11.klaus.utilis; | ||||
|  | ||||
| import java.time.LocalDate; | ||||
| import java.util.Arrays; | ||||
| import java.util.Iterator; | ||||
|  | ||||
| import com.cwbase.logback.AdditionalField; | ||||
| import com.cwbase.logback.JSONEventLayout; | ||||
| import org.apache.commons.pool2.impl.GenericObjectPoolConfig; | ||||
|  | ||||
| import ch.qos.logback.classic.spi.ILoggingEvent; | ||||
| import ch.qos.logback.core.Layout; | ||||
| import ch.qos.logback.core.UnsynchronizedAppenderBase; | ||||
| import redis.clients.jedis.Jedis; | ||||
| import redis.clients.jedis.JedisPool; | ||||
| import redis.clients.jedis.Protocol; | ||||
|  | ||||
| public class RedisAppender extends UnsynchronizedAppenderBase<ILoggingEvent> { | ||||
|  | ||||
|     JedisPool pool; | ||||
|  | ||||
|     // keep this for config compatibility for now | ||||
|     JSONEventLayout jsonlayout; | ||||
|  | ||||
|     Layout<ILoggingEvent> layout; | ||||
|  | ||||
|     // logger configurable options | ||||
|     String host = "localhost"; | ||||
|     int port = Protocol.DEFAULT_PORT; | ||||
|     String key = null; | ||||
|     int timeout = Protocol.DEFAULT_TIMEOUT; | ||||
|     String password = null; | ||||
|     int database = Protocol.DEFAULT_DATABASE; | ||||
|  | ||||
|     public RedisAppender() { | ||||
|         jsonlayout = new JSONEventLayout(); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     protected void append(ILoggingEvent event) { | ||||
|         Jedis client = pool.getResource(); | ||||
|         try { | ||||
|             String json = layout == null ? jsonlayout.doLayout(event) : layout.doLayout(event); | ||||
|             key = "logstash_" + LocalDate.now(); | ||||
|             client.rpush(key, json); | ||||
|         } catch (Exception e) { | ||||
|             e.printStackTrace(); | ||||
|         } finally { | ||||
|             if (client != null) { | ||||
|                 client.close(); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public String getSource() { | ||||
|         return jsonlayout.getSource(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setSource(String source) { | ||||
|         jsonlayout.setSource(source); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public String getSourceHost() { | ||||
|         return jsonlayout.getSourceHost(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setSourceHost(String sourceHost) { | ||||
|         jsonlayout.setSourceHost(sourceHost); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public String getSourcePath() { | ||||
|         return jsonlayout.getSourcePath(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setSourcePath(String sourcePath) { | ||||
|         jsonlayout.setSourcePath(sourcePath); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public String getTags() { | ||||
|         if (jsonlayout.getTags() != null) { | ||||
|             Iterator<String> i = jsonlayout.getTags().iterator(); | ||||
|             StringBuilder sb = new StringBuilder(); | ||||
|             while (i.hasNext()) { | ||||
|                 sb.append(i.next()); | ||||
|                 if (i.hasNext()) { | ||||
|                     sb.append(','); | ||||
|                 } | ||||
|             } | ||||
|             return sb.toString(); | ||||
|         } | ||||
|         return null; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setTags(String tags) { | ||||
|         if (tags != null) { | ||||
|             String[] atags = tags.split(","); | ||||
|             jsonlayout.setTags(Arrays.asList(atags)); | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public String getType() { | ||||
|         return jsonlayout.getType(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setType(String type) { | ||||
|         jsonlayout.setType(type); | ||||
|     } | ||||
|  | ||||
|     public String getHost() { | ||||
|         return host; | ||||
|     } | ||||
|  | ||||
|     public void setHost(String host) { | ||||
|         this.host = host; | ||||
|     } | ||||
|  | ||||
|     public int getPort() { | ||||
|         return port; | ||||
|     } | ||||
|  | ||||
|     public void setPort(int port) { | ||||
|         this.port = port; | ||||
|     } | ||||
|  | ||||
|     public String getKey() { | ||||
|         return key; | ||||
|     } | ||||
|  | ||||
|     public void setKey(String key) { | ||||
|         this.key = key; | ||||
|     } | ||||
|  | ||||
|     public int getTimeout() { | ||||
|         return timeout; | ||||
|     } | ||||
|  | ||||
|     public void setTimeout(int timeout) { | ||||
|         this.timeout = timeout; | ||||
|     } | ||||
|  | ||||
|     public String getPassword() { | ||||
|         return password; | ||||
|     } | ||||
|  | ||||
|     public void setPassword(String password) { | ||||
|         this.password = password; | ||||
|     } | ||||
|  | ||||
|     public int getDatabase() { | ||||
|         return database; | ||||
|     } | ||||
|  | ||||
|     public void setDatabase(int database) { | ||||
|         this.database = database; | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setMdc(boolean flag) { | ||||
|         jsonlayout.setProperties(flag); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean getMdc() { | ||||
|         return jsonlayout.getProperties(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setLocation(boolean flag) { | ||||
|         jsonlayout.setLocationInfo(flag); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public boolean getLocation() { | ||||
|         return jsonlayout.getLocationInfo(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void setCallerStackIndex(int index) { | ||||
|         jsonlayout.setCallerStackIdx(index); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public int getCallerStackIndex() { | ||||
|         return jsonlayout.getCallerStackIdx(); | ||||
|     } | ||||
|  | ||||
|     @Deprecated | ||||
|     public void addAdditionalField(AdditionalField p) { | ||||
|         jsonlayout.addAdditionalField(p); | ||||
|     } | ||||
|  | ||||
|     public Layout<ILoggingEvent> getLayout() { | ||||
|         return layout; | ||||
|     } | ||||
|  | ||||
|     public void setLayout(Layout<ILoggingEvent> layout) { | ||||
|         this.layout = layout; | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void start() { | ||||
|         super.start(); | ||||
|         GenericObjectPoolConfig config = new GenericObjectPoolConfig(); | ||||
|         config.setTestOnBorrow(true); | ||||
|         pool = new JedisPool(config, host, port, timeout, password, database); | ||||
|     } | ||||
|  | ||||
|     @Override | ||||
|     public void stop() { | ||||
|         super.stop(); | ||||
|         pool.destroy(); | ||||
|     } | ||||
|  | ||||
| } | ||||
							
								
								
									
										14
									
								
								src/main/resources/static/css/styles.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/main/resources/static/css/styles.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| .page-section{ | ||||
|   padding: 2rem 0; | ||||
| } | ||||
|  | ||||
| .page-section .column{ | ||||
|     float: left; | ||||
|     width: 50%; | ||||
| } | ||||
|  | ||||
| .page-section .row:after { | ||||
|   content: ""; | ||||
|   display: table; | ||||
|   clear: both; | ||||
| } | ||||
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/model/Event.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/model/Event.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/model/EventRequestDto.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/model/EventRequestDto.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/service/EtrackService.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/service/EtrackService.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/utilis/RedisAppender.class
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										
											BIN
										
									
								
								target/classes/com/release11/klaus/utilis/RedisAppender.class
									
									
									
									
									
										Normal file
									
								
							
										
											Binary file not shown.
										
									
								
							
							
								
								
									
										14
									
								
								target/classes/static/css/styles.css
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								target/classes/static/css/styles.css
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,14 @@ | ||||
| .page-section{ | ||||
|   padding: 2rem 0; | ||||
| } | ||||
|  | ||||
| .page-section .column{ | ||||
|     float: left; | ||||
|     width: 50%; | ||||
| } | ||||
|  | ||||
| .page-section .row:after { | ||||
|   content: ""; | ||||
|   display: table; | ||||
|   clear: both; | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Szakalakamaka
					Szakalakamaka