- finishing etrack

- new buttons for main page
- swagger
This commit is contained in:
Szakalakamaka
2020-09-22 10:05:11 +02:00
parent 9f3f2161cb
commit db625b650b
68 changed files with 1736 additions and 494 deletions

View File

@@ -2,6 +2,7 @@ package com.release11.klaus;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
@SpringBootApplication
@@ -12,10 +13,5 @@ public class KlausApplication {
}
}
//TODO
//TODO JedisPool jedisPool = new JedisPool(jedisPoolConfig, redisHost, redisPort, timeout, redisPassword)
//TODO JedisPool optimalization https://partners-intl.aliyun.com/help/doc-detail/98726.htm
// logging, security, account creation
// tracking clients activity, admin panel
// use a centralized logging collection tool like logstash for admin panel
//TODO swagger

View File

@@ -0,0 +1,24 @@
package com.release11.klaus.config;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import springfox.documentation.builders.RequestHandlerSelectors;
import springfox.documentation.spi.DocumentationType;
import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import static springfox.documentation.builders.PathSelectors.regex;
@Configuration
@EnableSwagger2
public class SwaggerConfig {
@Bean
public Docket productApi() {
return new Docket(DocumentationType.SWAGGER_2).select()
.apis(RequestHandlerSelectors.basePackage("com.release11.klaus.controller"))
.paths(regex("/klaus/v1.*"))
.build();
}
}

View File

@@ -1,16 +1,22 @@
package com.release11.klaus.controller;
import com.release11.klaus.model.Event;
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.ui.Model;
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 org.springframework.web.bind.annotation.*;
import javax.validation.Valid;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.LinkedList;
import java.util.List;
import java.util.UUID;
@Slf4j
@Controller
@@ -19,11 +25,54 @@ import javax.validation.Valid;
public class EventController {
private final EtrackService etrackService;
@PostMapping("/eventsForm")
@ResponseBody
public String getLogs(@Valid EventRequestDto eventsDto, BindingResult bindingResult){
return String.valueOf(etrackService.getEventsByDateTimeAndBusinessKeys(eventsDto));
private final String sortBy = "messageId";
private final List<Event> eventList = new LinkedList<>();
@GetMapping("/etrack/{uuid}")
public String showEtrack(@Valid EventRequestDto eventRequestDto, @PathVariable UUID uuid, final Model model,
BindingResult bindingResult){
model.addAttribute("clientUUID", uuid);
model.addAttribute("eventRequestDto", eventRequestDto);
return "etrack";
}
@PostMapping("/etrack/{uuid}")
public String getLogs(@Valid EventRequestDto eventRequestDto, final Model model, BindingResult bindingResult,
@PathVariable UUID uuid){
model.addAttribute("clientUUID", uuid);
populateModelWithLists(model, eventRequestDto, true);
return "etrack";
}
@PostMapping(value = "/etrack/{uuid}", params = {"sortBy"})
public String sortBy(@Valid EventRequestDto eventRequestDto, final Model model, BindingResult bindingResult,
@PathVariable UUID uuid){
model.addAttribute("clientUUID", uuid);
populateModelWithLists(model, eventRequestDto, false);
return "etrack";
}
private void populateModelWithLists(Model model, EventRequestDto eventRequestDto, boolean updateList){
if (updateList){
eventList.clear();
eventList.addAll(etrackService.getEventsByDateTimeAndBusinessKeys(eventRequestDto));
}
model.addAttribute("eventList", eventList);
}
@ModelAttribute("eventRequestDto")
public EventRequestDto eventRequestDto() {
return EventRequestDto.builder()
.mockedResponseId(1)
.localDateTimeFrom(LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.localDateTimeTo(LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT))
.build();
}
@ModelAttribute("eventList")
public List<Event> eventList() {
return eventList;
}
}

View File

@@ -12,10 +12,7 @@ import org.springframework.http.HttpStatus;
import org.springframework.http.RequestEntity;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@@ -29,7 +26,7 @@ public class KlausController {
private final KlausService klausService;
@RequestMapping(value = "klaus/v1/delete/{clientUUID}/{mockedResponseId}")
@DeleteMapping(value = "klaus/v1/delete/{clientUUID}/{mockedResponseId}")
public ResponseEntity<String> deleteMockedResponse(@PathVariable UUID clientUUID,
@PathVariable int mockedResponseId){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "deleteMockedResponse",
@@ -38,9 +35,10 @@ public class KlausController {
klausService.deleteMockedResponse(clientUUID, mockedResponseId);
return new ResponseEntity<>("message has been deleted", HttpStatus.OK);
}
@RequestMapping(value = "klaus/v1/getAll/{clientUUID}")
@GetMapping(value = "klaus/v1/getAll/{clientUUID}")
public ResponseEntity<String> getAllMockedResponses(@PathVariable UUID clientUUID){
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getMockedResponse",
TrackingClient.setBusinessKeys(Map.of(BusinessKey.INTERFACE_NAME, "getAllMockedResponse",
BusinessKey.CLIENT_UUID, String.valueOf(clientUUID),
BusinessKey.MESSAGE_ID, "all"));
List<MockedMessageDto> mockedMessages = klausService.getAllMockedResponses(clientUUID);

View File

@@ -1,6 +1,5 @@
package com.release11.klaus.controller;
import com.release11.klaus.model.EventRequestDto;
import com.release11.klaus.model.MockedMessageDto;
import com.release11.klaus.service.KlausService;
import com.release11.klaus.utilis.BusinessKey;
@@ -16,9 +15,6 @@ import org.springframework.web.bind.annotation.*;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import java.net.InetAddress;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.LocalTime;
import java.util.*;
@Slf4j
@@ -29,11 +25,6 @@ public class KlausMvcController {
private final KlausService klausService;
private final Set<MockedMessageDto> globalMockedMessageDtoList = new HashSet<>();
@GetMapping("/login")
public String login() {
return "login";
}
@SneakyThrows
@GetMapping({"/home", "/home/{uuid}"})
public String showHome(final MockedMessageDto mockedMessageDto, final Model model,
@@ -45,15 +36,28 @@ public class KlausMvcController {
return "index";
}
@PostMapping("/home/{clientUUID}")
@PostMapping("/home/{uuid}")
public String showHomePost(@Valid final MockedMessageDto mockedMessageDto, BindingResult bindingResult,
final 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);
return "index";
}
klausService.setMockedResponse(mockedMessageDto);
populateModelWithLists(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) {
MockedMessageDto mockedMessageDto = new MockedMessageDto(clientUUID, new LinkedHashMap<>());
populateModelWithLists(model, mockedMessageDto, true);
model.addAttribute("mockedMessageDto", mockedMessageDto);
return "index";
}
@@ -67,7 +71,7 @@ public class KlausMvcController {
mockedMessageDto.getMockedResponseId()).toString();
}
@RequestMapping(value = "/home/{clientUUID}", params = {"addHeader"} )
@PostMapping(value = "/home/{uuid}", params = {"addHeader"} )
public String addHeader(final MockedMessageDto mockedMessageDto, @RequestParam String headerKey,
@RequestParam String headerValue, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
@@ -75,23 +79,27 @@ public class KlausMvcController {
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"removeHeader"})
@PostMapping(value="/home/{uuid}", params={"removeHeader"})
public String removeHeader(final MockedMessageDto mockedMessageDto, final HttpServletRequest req, final Model model) {
populateModelWithLists(model, mockedMessageDto,false);
mockedMessageDto.getHttpHeaders().remove(req.getParameter("removeHeader"));
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"updateMessage"})
@PostMapping(value="/home/{uuid}", params={"updateMessage"})
public String updateMessage(final HttpServletRequest req, final MockedMessageDto mockedMessageDto, final Model model) {
model.addAttribute("mockedMessageDto", klausService.getMockedResponse(mockedMessageDto.getClientUUID(),
Integer.parseInt(req.getParameter("updateMessage"))));
populateModelWithLists(model, mockedMessageDto, false);
model.addAttribute("canTest", "true");
return "index";
}
@RequestMapping(value="/home/{clientUUID}", params={"removeMessage"})
@PostMapping(value="/home/{uuid}", params={"removeMessage"})
public String removeMessage(final 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);
@@ -111,17 +119,7 @@ public class KlausMvcController {
@ModelAttribute("mockedMessageDto")
public MockedMessageDto mockedMessageDto() {
return new MockedMessageDto(UUID.randomUUID(), 1,
"application/xml", "body", new LinkedHashMap<>(), 200);
}
@ModelAttribute("eventRequestDto")
public EventRequestDto eventRequestDto() {
return EventRequestDto.builder()
.mockedResponseId(1)
.localDateTimeFrom(LocalDateTime.of(LocalDate.now(), LocalTime.MIN))
.localDateTimeTo(LocalDateTime.of(LocalDate.now().plusDays(1), LocalTime.MIDNIGHT))
.build();
return new MockedMessageDto(UUID.randomUUID(), new LinkedHashMap<>());
}
private void populateModelWithLists(Model model, MockedMessageDto mockedMessageDto, boolean updateList){

View File

@@ -0,0 +1,20 @@
package com.release11.klaus.controller;
import com.release11.klaus.model.MockedMessageDto;
import lombok.AllArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
@Slf4j
@Controller
@RequestMapping
@AllArgsConstructor
public class MainController {
@GetMapping("/home/tools")
public String showGetMockedResponse(final MockedMessageDto mockedMessageDto) {
return "tools";
}
}

View File

@@ -16,12 +16,15 @@ public class Event {
@DateTimeFormat(pattern = "yyyy-MM-ddTHH:mm:ss")
private LocalDateTime dateTimeStamp;
@Nullable
private String[] businessKeys;
private String interfaceName;
@Nullable
private String clientUUID;
@Nullable
private Integer messageId;
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

View File

@@ -1,7 +1,10 @@
package com.release11.klaus.model;
import com.release11.klaus.model.constraints.HttpCode;
import lombok.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import org.springframework.data.annotation.Id;
import org.springframework.data.redis.core.RedisHash;
import org.springframework.data.redis.core.index.Indexed;
@@ -22,7 +25,7 @@ public class MockedMessage implements Serializable {
@Indexed
private UUID clientUUID;
@Positive
private int mockedResponseId;
private Integer mockedResponseId;
private String mediaType;
private String messageBody;
private Map<String, String> httpHeaders;

View File

@@ -3,6 +3,7 @@ package com.release11.klaus.model;
import com.release11.klaus.model.constraints.HttpCode;
import lombok.*;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Positive;
import java.util.Map;
import java.util.UUID;
@@ -14,11 +15,20 @@ import java.util.UUID;
@AllArgsConstructor
public class MockedMessageDto {
private UUID clientUUID;
@NotNull
@Positive
private int mockedResponseId;
private Integer mockedResponseId;
private String mediaType;
private String messageBody;
private Map<String, String> httpHeaders;
@HttpCode
private Integer httpStatus;
public MockedMessageDto(UUID clientUUID) {
this.clientUUID = clientUUID;
}
public MockedMessageDto(UUID clientUUID, Map<String,String> httpHeaders) {
this.clientUUID = clientUUID;
this.httpHeaders = httpHeaders;
}
}

View File

@@ -50,14 +50,11 @@ public class EventRepositoryImpl implements EventRepository {
}
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() + "\"";
String u;
u = "das";
resultList = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList());
String stringPattern = entry.getKey().getReasonPhrase()+ "\"" + ":" + "\"" + entry.getValue() + "\"";
events = events.stream().filter(s -> s.contains(stringPattern)).collect(Collectors.toList());
}
return resultList;
return events;
}
private List<Event> parseEvents(List<String> eventStrings) {

View File

@@ -28,6 +28,7 @@ public class KlausServiceImpl implements KlausService {
public void deleteMockedResponse(UUID clientUUID, int mockedResponseId) {
String key = clientUUID.toString() + "_" + mockedResponseId;
mockedResponseRepository.deleteById(key);
log.info("Message " + mockedResponseId + " has been removed.");
}
@Override
@@ -39,20 +40,22 @@ public class KlausServiceImpl implements KlausService {
@Override
public MockedMessageDto getMockedResponse(UUID clientUUID, int mockedResponseId) {
log.info("KlausServiceImpl, operation getMockedResponse, clientId {}, mockedResponseId {} ",
clientUUID, mockedResponseId);
String key = clientUUID.toString() + "_" + mockedResponseId;
Optional<MockedMessage> optionalMockedMessage = mockedResponseRepository.findById(key);
MockedMessageDto mockedMessageDto = new MockedMessageDto();
if (optionalMockedMessage.isPresent()) {
return mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get());
mockedMessageDto = mockedMessageMapper.mockedMessageToMockedMessageDto(optionalMockedMessage.get());
log.info(mockedMessageDto.toString());
return mockedMessageDto;
}
return new MockedMessageDto();
log.info(mockedMessageDto.toString());
return mockedMessageDto;
}
@Override
public ResponseEntity<String> setMockedResponse(MockedMessageDto mockedMessageDto) {
mockedResponseRepository.save(mockedMessageMapper.mockedMessageDtoToMockedMessage(mockedMessageDto));
log.info("KlausServiceImpl, operation setMockedResponse, mockedMessage {} ", mockedMessageDto.toString());
log.info(mockedMessageDto.toString());
return new ResponseEntity<>("MockedResponse has been setup successfully!", new HttpHeaders(),
HttpStatus.ACCEPTED);
}

View File

@@ -10,7 +10,8 @@ public final class TrackingClient {
public static void setBusinessKeys(Map<BusinessKey, String> businessKeysMap){
for (Map.Entry<BusinessKey, String> entry : businessKeysMap.entrySet()) {
MDC.put(entry.getKey().toString(), entry.getValue());
String s= entry.getKey().getReasonPhrase();
MDC.put(entry.getKey().getReasonPhrase(), entry.getValue());
}
}