- finishing etrack
- new buttons for main page - swagger
This commit is contained in:
@@ -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
|
||||
24
src/main/java/com/release11/klaus/config/SwaggerConfig.java
Normal file
24
src/main/java/com/release11/klaus/config/SwaggerConfig.java
Normal 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();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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){
|
||||
|
||||
@@ -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";
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user