diff --git a/.idea/libraries/Maven__com_github_feature_flip_flips_core_1_0_1.xml b/.idea/libraries/Maven__com_github_feature_flip_flips_core_1_0_1.xml new file mode 100644 index 0000000..fca74d0 --- /dev/null +++ b/.idea/libraries/Maven__com_github_feature_flip_flips_core_1_0_1.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_5.xml b/.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_5.xml new file mode 100644 index 0000000..649cc0e --- /dev/null +++ b/.idea/libraries/Maven__org_aspectj_aspectjrt_1_9_5.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml new file mode 100644 index 0000000..f92b959 --- /dev/null +++ b/.idea/libraries/Maven__org_slf4j_jcl_over_slf4j_1_7_30.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + \ No newline at end of file diff --git a/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_5_RELEASE.xml b/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_5_RELEASE.xml deleted file mode 100644 index 3077cc0..0000000 --- a/.idea/libraries/Maven__org_springframework_retry_spring_retry_1_2_5_RELEASE.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/.idea/workspace.xml b/.idea/workspace.xml index 4e54ac7..7db65c9 100644 --- a/.idea/workspace.xml +++ b/.idea/workspace.xml @@ -23,12 +23,49 @@ + + + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + @@ -45,9 +82,9 @@ - + @@ -80,7 +117,7 @@ - + @@ -268,20 +305,6 @@ 1598862102028 - - 1601297895444 - - - - 1601297895444 - - - 1601300366399 - - - - 1601300366399 - 1601300573031 @@ -611,7 +634,21 @@ 1603883796526 - + + 1603886642002 + + + + 1603886642002 + + + 1603886748106 + + + + 1603886748106 + + @@ -631,7 +668,6 @@ - @@ -656,7 +692,8 @@ - + + @@ -708,37 +745,41 @@ - - + + - + - + + - - + + - + - + + - - + + - + - + + - - + + - + - + + @@ -786,27 +827,28 @@ - + - + - - + + - + + - + @@ -823,10 +865,11 @@ - - + + + \ No newline at end of file diff --git a/Klaus.iml b/Klaus.iml index 9d7024e..f34510a 100644 --- a/Klaus.iml +++ b/Klaus.iml @@ -15,8 +15,6 @@ - - @@ -38,7 +36,6 @@ - @@ -107,7 +104,6 @@ - @@ -191,5 +187,12 @@ + + + + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index cf08277..dec0c69 100644 --- a/pom.xml +++ b/pom.xml @@ -110,6 +110,11 @@ spring-cloud-starter-netflix-eureka-client ${eureka-client.version} + + com.github.feature-flip + flips-core + 1.0.1 + diff --git a/src/main/java/com/release11/klaus/controller/KlausController.java b/src/main/java/com/release11/klaus/controller/KlausController.java index b34cc32..7aa1244 100644 --- a/src/main/java/com/release11/klaus/controller/KlausController.java +++ b/src/main/java/com/release11/klaus/controller/KlausController.java @@ -7,6 +7,7 @@ import com.release11.klaus.utilis.BusinessKey; import com.release11.klaus.utilis.TrackingClient; import lombok.AllArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.springframework.context.annotation.Profile; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; import org.springframework.http.RequestEntity; @@ -21,6 +22,7 @@ import java.util.UUID; @Controller("/") @Slf4j +@Profile({"DEV", "default"}) @AllArgsConstructor public class KlausController { diff --git a/src/main/java/com/release11/klaus/controller/KlausMvcController.java b/src/main/java/com/release11/klaus/controller/KlausMvcController.java index b263bc0..6f40884 100644 --- a/src/main/java/com/release11/klaus/controller/KlausMvcController.java +++ b/src/main/java/com/release11/klaus/controller/KlausMvcController.java @@ -7,6 +7,7 @@ import com.release11.klaus.utilis.TrackingClient; import lombok.AllArgsConstructor; import lombok.SneakyThrows; import lombok.extern.slf4j.Slf4j; +import org.springframework.http.MediaType; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.validation.BindingResult; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.*; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import java.net.InetAddress; +import java.time.LocalDateTime; import java.util.*; @Slf4j @@ -23,6 +25,7 @@ import java.util.*; @AllArgsConstructor public class KlausMvcController { private final KlausService klausService; + private static MockedMessageDto globalMockedMessageDto = new MockedMessageDto(); private final Set globalMockedMessageDtoList = new HashSet<>(); @SneakyThrows @@ -32,38 +35,38 @@ public class KlausMvcController { @PathVariable(required = false) UUID uuid) { if (uuid != null) clientUUID = uuid; if (clientUUID != null) mockedMessageDto.setClientUUID(clientUUID); - populateModelWithLists(model, mockedMessageDto,true); + else mockedMessageDto.setClientUUID(UUID.randomUUID()); + populateModelVars(model, mockedMessageDto,true); return "index"; } @PostMapping("/home/{uuid}") - public String showHomePost(@Valid final MockedMessageDto mockedMessageDto, BindingResult bindingResult, - final Model model) { + public String showHomePost(@Valid MockedMessageDto mockedMessageDto, BindingResult bindingResult, Model model) { TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "setMockedResponse", BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()), BusinessKey.MESSAGE_ID, String.valueOf(mockedMessageDto.getMockedResponseId()))); if (bindingResult.hasErrors()){ - populateModelWithLists(model, mockedMessageDto,false); + populateModelVars(model, mockedMessageDto,false); return "index"; } klausService.setMockedResponse(mockedMessageDto); - populateModelWithLists(model, mockedMessageDto,true); + populateModelVars(model, mockedMessageDto,true); model.addAttribute("mockSaved", "true"); model.addAttribute("canTest", "true"); return "index"; } @PostMapping(value="/home/{uuid}", params={"newMessage"}) - public String newMessage(final Model model, @RequestParam UUID clientUUID) { + public String newMessage(Model model, @RequestParam UUID clientUUID) { MockedMessageDto mockedMessageDto = new MockedMessageDto(clientUUID, new LinkedHashMap<>()); - populateModelWithLists(model, mockedMessageDto, true); + populateModelVars(model, mockedMessageDto, true); model.addAttribute("mockedMessageDto", mockedMessageDto); return "index"; } @GetMapping("/home/getMockedResponse") @ResponseBody - public String showGetMockedResponse(final MockedMessageDto mockedMessageDto) { + public String showGetMockedResponse(MockedMessageDto mockedMessageDto) { TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse", BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()), BusinessKey.MESSAGE_ID, String.valueOf(mockedMessageDto.getMockedResponseId()))); @@ -72,37 +75,37 @@ public class KlausMvcController { } @PostMapping(value = "/home/{uuid}", params = {"addHeader"} ) - public String addHeader(final MockedMessageDto mockedMessageDto, @RequestParam String headerKey, + public String addHeader(MockedMessageDto mockedMessageDto, @RequestParam String headerKey, @RequestParam String headerValue, final Model model) { - populateModelWithLists(model, mockedMessageDto,false); + populateModelVars(model, mockedMessageDto,false); mockedMessageDto.getHttpHeaders().put(headerKey, headerValue); return "index"; } @PostMapping(value="/home/{uuid}", params={"removeHeader"}) - public String removeHeader(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) { - populateModelWithLists(model, mockedMessageDto,false); + public String removeHeader(MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) { + populateModelVars(model, mockedMessageDto,false); mockedMessageDto.getHttpHeaders().remove(req.getParameter("removeHeader")); return "index"; } @PostMapping(value="/home/{uuid}", params={"updateMessage"}) - public String updateMessage(final HttpServletRequest req, final MockedMessageDto mockedMessageDto, final Model model) { + public String updateMessage(final HttpServletRequest req, MockedMessageDto mockedMessageDto, final Model model) { + populateModelVars(model, mockedMessageDto, false); model.addAttribute("mockedMessageDto", klausService.getMockedResponse(mockedMessageDto.getClientUUID(), Integer.parseInt(req.getParameter("updateMessage")))); - populateModelWithLists(model, mockedMessageDto, false); model.addAttribute("canTest", "true"); return "index"; } @PostMapping(value="/home/{uuid}", params={"removeMessage"}) - public String removeMessage(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) { + public String removeMessage(MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) { TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "deleteMockedResponse", BusinessKey.CLIENT_UUID, String.valueOf(mockedMessageDto.getClientUUID()), BusinessKey.MESSAGE_ID, String.valueOf(Integer.parseInt(req.getParameter("removeMessage"))))); klausService.deleteMockedResponse(mockedMessageDto.getClientUUID(), Integer.parseInt(req.getParameter("removeMessage"))); - populateModelWithLists(model, mockedMessageDto, true); + populateModelVars(model, mockedMessageDto, true); return "index"; } @@ -117,17 +120,47 @@ public class KlausMvcController { return UUID.randomUUID(); } - @ModelAttribute("mockedMessageDto") - public MockedMessageDto mockedMessageDto() { - return new MockedMessageDto(UUID.randomUUID(), new LinkedHashMap<>()); + public void getModelMockedMessageDto(Model model, MockedMessageDto mockedMessageDto) { + System.out.println(mockedMessageDto); + System.out.println(globalMockedMessageDto); + if (mockedMessageDto.getMockedResponseId() == null){ + Map headers = new HashMap<>(); + headers.put("Keep-Alive", "timeout=60"); + headers.put("Connection", "keep-alive"); + headers.put("Date", LocalDateTime.now().toString()); + + globalMockedMessageDto = MockedMessageDto.builder() + .clientUUID(mockedMessageDto.getClientUUID()) + .mockedResponseId(1) + .mediaType(MediaType.APPLICATION_XML_VALUE) + .messageBody("\n" + + "\n" + + " Tove\n" + + " Jani\n" + + " Reminder\n" + + " Don't forget me this weekend!\n" + + "") + .httpHeaders(headers) + .httpStatus(200) + .build(); + } else { + globalMockedMessageDto = mockedMessageDto; + } + model.addAttribute("mockedMessageDto", globalMockedMessageDto); } - private void populateModelWithLists(Model model, MockedMessageDto mockedMessageDto, boolean updateList){ + private void populateModelVars(Model model, MockedMessageDto mockedMessageDto, boolean updateList){ if (updateList){ globalMockedMessageDtoList.clear(); - globalMockedMessageDtoList.addAll(klausService.getAllMockedResponses(mockedMessageDto.getClientUUID())); + List mockedMessageDtoList = klausService. + getAllMockedResponses(mockedMessageDto.getClientUUID()); + System.out.println(mockedMessageDtoList); + if (mockedMessageDtoList.size() > 0){ + globalMockedMessageDtoList.addAll(mockedMessageDtoList); + } } model.addAttribute("mockedMessageDtoList", globalMockedMessageDtoList); + getModelMockedMessageDto(model, mockedMessageDto); } } \ No newline at end of file diff --git a/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java b/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java index 9be7cfb..4b6a12b 100644 --- a/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java +++ b/src/main/java/com/release11/klaus/repository/EventRepositoryImpl.java @@ -61,6 +61,7 @@ public class EventRepositoryImpl implements EventRepository { List events = new ArrayList<>(); for (String eventString : eventStrings) { try { + eventString = eventString.replaceAll("\\R", "\\n"); events.add(objectMapper.readValue(eventString, Event.class)); } catch (JsonProcessingException e) { e.printStackTrace(); diff --git a/src/main/java/com/release11/klaus/service/KlausServiceImpl.java b/src/main/java/com/release11/klaus/service/KlausServiceImpl.java index 4d67cf9..ad6be86 100644 --- a/src/main/java/com/release11/klaus/service/KlausServiceImpl.java +++ b/src/main/java/com/release11/klaus/service/KlausServiceImpl.java @@ -20,7 +20,6 @@ import java.util.stream.Collectors; @Service @AllArgsConstructor public class KlausServiceImpl implements KlausService { - private final MockedMessageMapper mockedMessageMapper; private final MockedResponseRepository mockedResponseRepository; @@ -45,7 +44,7 @@ public class KlausServiceImpl implements KlausService { MockedMessageDto mockedMessageDto = new MockedMessageDto(); if (optionalMockedMessage.isPresent()) { mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get()); - log.info(mockedMessageDto.toString()); + log.info(mockedMessageDto.toString().replaceAll("\"","\\\"")); return mockedMessageDto; } log.info(mockedMessageDto.toString()); @@ -55,7 +54,7 @@ public class KlausServiceImpl implements KlausService { @Override public ResponseEntity setMockedResponse(MockedMessageDto mockedMessageDto) { mockedResponseRepository.save(mockedMessageMapper.mockedMessageDtoToMockedMessage(mockedMessageDto)); - log.info(mockedMessageDto.toString()); + log.info(mockedMessageDto.toString().replaceAll("\"","\\\\\"")); return new ResponseEntity<>("MockedResponse has been setup successfully!", new HttpHeaders(), HttpStatus.ACCEPTED); } diff --git a/src/main/resources/application-DEV.properties b/src/main/resources/application-DEV.properties deleted file mode 100644 index 521587f..0000000 --- a/src/main/resources/application-DEV.properties +++ /dev/null @@ -1,10 +0,0 @@ -#environment: -server.port = 8097 -spring.application.name = klaus -eureka.client.service-url.defaultZone=http://netflix:eureka@localhost:8761/eureka/ - -#logging: -spring.output.ansi.enabled = always -logging.level.root=DEBUG -logging.level.org.springframework.web=DEBUG -logging.level.com.release11=DEBUG diff --git a/src/main/resources/application-PROD.properties b/src/main/resources/application-PROD.properties deleted file mode 100644 index b637467..0000000 --- a/src/main/resources/application-PROD.properties +++ /dev/null @@ -1,10 +0,0 @@ -#environment: -server.port = 8097 -spring.application.name = klaus -eureka.client.service-url.defaultZone=http://netflix:eureka@eureka:8761/eureka/ - -#logging: -spring.output.ansi.enabled = always -logging.level.root=INFO -logging.level.org.springframework.web=INFO -logging.level.com.release11=INFO diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index d321935..2b743f5 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,5 +1,6 @@ #environment: server.port = 8097 +endpoints.env.enabled = false #spring.cloud.config.username = SpringConfigUsername #spring.cloud.config.password = SpringConfigPassword #logging: @@ -7,3 +8,8 @@ spring.output.ansi.enabled = always logging.level.root=INFO logging.level.org.springframework.web=INFO logging.level.com.release11=INFO +#operations +release11.mocked-service.controller.delete = false +release11.mocked-service.controller.getAll = false +release11.mocked-service.controller.get = true +release11.mocked-service.controller.set = true diff --git a/src/main/resources/bootstrap.properties b/src/main/resources/bootstrap.properties index 10024bd..62447d2 100644 --- a/src/main/resources/bootstrap.properties +++ b/src/main/resources/bootstrap.properties @@ -1,7 +1,7 @@ #environment: spring.cloud.config.discovery.service-id = klaus-config-service -spring.cloud.config.fail-fast=true #spring.cloud.config.retry.initial-interval = 1500 +release11.mocked-service.controller.delete = true #spring.cloud.config.retry.multiplier = 1.5 #spring.cloud.config.retry.max-attempts = 10000 #spring.cloud.config.retry.max-intervals = 1000 diff --git a/src/main/resources/bootstrap.yml b/src/main/resources/bootstrap.yml index 3484461..b6615a6 100644 --- a/src/main/resources/bootstrap.yml +++ b/src/main/resources/bootstrap.yml @@ -1,13 +1,12 @@ spring: - profiles: - active: DEV +# profiles: +# active: DEV application: name: klaus cloud: spring: cloud: config: - fail-fast: false uri: http://s5000xvn.zipper.release11.com:8888 retry: max-attempts: 20 @@ -22,4 +21,4 @@ eureka: register-with-eureka: true fetch-registry: true serviceUrl: - defaultZone: http://netflix:eureka@eureka:8761/eureka + defaultZone: http://netflix:eureka@localhost:8761/eureka diff --git a/src/main/resources/logback.xml b/src/main/resources/logback.xml index 651420c..eca6395 100644 --- a/src/main/resources/logback.xml +++ b/src/main/resources/logback.xml @@ -3,7 +3,7 @@ - redis + localhost 6379 logstash diff --git a/src/main/resources/static/css/styles.css b/src/main/resources/static/css/styles.css index f953669..893ba64 100644 --- a/src/main/resources/static/css/styles.css +++ b/src/main/resources/static/css/styles.css @@ -1,3 +1,11 @@ +html { + height: 100%; +} + +body { + min-height: 100%; +} + .page-section{ padding: 2rem 0; @@ -105,7 +113,82 @@ button[name="removeHeader"] { cursor: pointer; } -.active { +.activeButton { background-color: rgb(153, 194, 255); } + + + +#child-body{ + margin-left: 220px; +} + +#container1{ + +} +#foot { + clear: both; + position: relative; + right: 0; + bottom: 0; + left: 0; +} + +/* The side navigation menu */ +.sidebar { + margin-top: 100px; + padding-top: 200px; + padding: 0; + width: 200px; + background-color: #f1f1f1; + position: absolute; + height: 100%; + overflow: auto; +} + +/* Sidebar links */ +.sidebar a { + display: block; + color: black; + padding: 16px; + text-decoration: none; +} + +/* Active/current link */ +.sidebar a.active { + background-color: #4CAF50; + color: white; +} + +/* Links on mouse-over */ +.sidebar a:hover:not(.active) { + background-color: #555; + color: white; +} + +/* On screens that are less than 700px wide, make the sidebar into a topbar */ +@media screen and (max-width: 700px) { + .sidebar { + width: 100%; + height: auto; + position: fixed; + } + .sidebar a {float: left;} + div.content {margin-left: 0;} +} + +/* On screens that are less than 400px, display the bar vertically, instead of horizontally */ +@media screen and (max-width: 400px) { + .sidebar a { + text-align: center; + float: none; + } +} + + +table { border-collapse: collapse; } +tr { border: none; } +td { +border: none; +} \ No newline at end of file diff --git a/src/main/resources/static/js/etrackPaggination.js b/src/main/resources/static/js/etrackPaggination.js index ec50748..ab219f5 100644 --- a/src/main/resources/static/js/etrackPaggination.js +++ b/src/main/resources/static/js/etrackPaggination.js @@ -27,9 +27,9 @@ for (let i = 3; i >= 0; i--) { function addButtonListeners(i) { var buttons = document.querySelectorAll('.btn-sort'); for (var j = buttons.length - 1; j >= 0; j--) { - buttons[j].classList.remove('active'); + buttons[j].classList.remove('activeButton'); } - document.querySelector('#btn-sort-' + i).classList.add('active'); + document.querySelector('#btn-sort-' + i).classList.add('activeButton'); buildTable(); } @@ -132,7 +132,7 @@ function showTable() { function sortTable() { - var sortBy = document.querySelector('.active').textContent + var sortBy = document.querySelector('.activeButton').textContent switch (sortBy) { case "MessageId": if (previousSort === "MessageId") { diff --git a/src/main/resources/static/js/paggination.js b/src/main/resources/static/js/paggination.js index 39a249c..41a6cd4 100644 --- a/src/main/resources/static/js/paggination.js +++ b/src/main/resources/static/js/paggination.js @@ -14,8 +14,7 @@ var state = { } var myList, data, previousSort; - - + console.log("raz dwa trzy") state.querySet = listForPagination; buildTable(); @@ -28,15 +27,13 @@ for (let i = 3; i >= 0; i--) { function addButtonListeners(i) { var buttons = document.querySelectorAll('.btn-sort'); for (var j = buttons.length - 1; j >= 0; j--) { - buttons[j].classList.remove('active'); + buttons[j].classList.remove('activeButton'); } - document.querySelector('#btn-sort-' + i).classList.add('active'); + document.querySelector('#btn-sort-' + i).classList.add('activeButton'); buildTable(); } - function pagination(querySet, page, rows) { - var trimStart = (page - 1) * rows var trimEnd = trimStart + rows var trimmedData = querySet.slice(trimStart, trimEnd) @@ -48,10 +45,8 @@ function pagination(querySet, page, rows) { } } - function pageButtons(pages) { var wrapper = document.getElementById('pagination-wrapper'); - wrapper.innerHTML = ``; var maxLeft = (state.page - Math.floor(state.window / 2)) var maxRight = (state.page + Math.ceil(state.window / 2)) @@ -136,7 +131,6 @@ function showTable() { ` } - table.append(row) } for (var i = myList.length + 1; i <= state.rows; i++) { @@ -158,12 +152,13 @@ function showTable() { } table.append(row) } - pageButtons(data.pages) } function sortTable() { - var sortBy = document.querySelector('.active').textContent +console.log("sortTable"); + var sortBy = document.querySelector('.activeButton').textContent; + console.log(sortBy); switch (sortBy) { case "MessageId": if (previousSort === "MessageId") { @@ -191,6 +186,7 @@ function sortTable() { previousSort = "" } else previousSort = sortBy; myList = state.querySet; + console.log(myList); } function prepareTable() { @@ -199,6 +195,7 @@ function prepareTable() { } function buildTable() { +console.log("buildTable"); sortTable(); prepareTable(); showTable(); diff --git a/src/main/resources/templates/etrack.html b/src/main/resources/templates/etrack.html index 70d1504..caad207 100644 --- a/src/main/resources/templates/etrack.html +++ b/src/main/resources/templates/etrack.html @@ -11,58 +11,82 @@ - - - - - To see your activity history use the form below - - - Mocked response id: - - mockedResponseId - error - - Date from: - - localDateTimeFrom - Error - - Date to: - - localDateTimeTo - Error - - - ... + + + + + + + + + To see your activity history use the form below + + + Mocked response id: + + mockedResponseId + error + + Date from: + + localDateTimeFrom + Error + + Date to: + + localDateTimeTo + Error + + + ... + + + + + + + + + + # + MessageId + TimeStamp + Action + + + + + + + + + - - - - - - - - - # - MessageId - TimeStamp - Action - - - - - - - - + - + + + + + + + +
...
#
MessageId
TimeStamp
Action