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 />
|
<select />
|
||||||
</component>
|
</component>
|
||||||
<component name="ChangeListManager">
|
<component name="ChangeListManager">
|
||||||
<list default="true" id="458cde88-df3d-44bc-9d57-a33823e2f1a6" name="Default Changelist" comment="">
|
<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>
|
|
||||||
<option name="SHOW_DIALOG" value="false" />
|
<option name="SHOW_DIALOG" value="false" />
|
||||||
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
<option name="HIGHLIGHT_CONFLICTS" value="true" />
|
||||||
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
<option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
||||||
@@ -252,7 +249,21 @@
|
|||||||
<option name="project" value="LOCAL" />
|
<option name="project" value="LOCAL" />
|
||||||
<updated>1599228274986</updated>
|
<updated>1599228274986</updated>
|
||||||
</task>
|
</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 />
|
<servers />
|
||||||
</component>
|
</component>
|
||||||
<component name="Vcs.Log.Tabs.Properties">
|
<component name="Vcs.Log.Tabs.Properties">
|
||||||
@@ -279,7 +290,8 @@
|
|||||||
<MESSAGE value="updating html pages" />
|
<MESSAGE value="updating html pages" />
|
||||||
<MESSAGE value="MvcExceptionHandler" />
|
<MESSAGE value="MvcExceptionHandler" />
|
||||||
<MESSAGE value="Etrack works!!!" />
|
<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>
|
||||||
<component name="WindowStateProjectService">
|
<component name="WindowStateProjectService">
|
||||||
<state x="574" y="128" key="#com.intellij.ide.util.MemberChooser" timestamp="1599035277816">
|
<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" />
|
<screen x="0" y="0" width="1536" height="824" />
|
||||||
</state>
|
</state>
|
||||||
<state x="299" y="67" key="Maven.ArtifactSearchDialog/0.0.1536.824@0.0.1536.824" timestamp="1598862685882" />
|
<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" />
|
<screen x="0" y="0" width="1536" height="824" />
|
||||||
</state>
|
</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">
|
<state x="209" y="33" key="new project wizard" timestamp="1598955672188">
|
||||||
<screen x="0" y="0" width="1536" height="824" />
|
<screen x="0" y="0" width="1536" height="824" />
|
||||||
</state>
|
</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