diff --git a/Dockerfile_debug b/Dockerfile_debug new file mode 100644 index 0000000..a903974 --- /dev/null +++ b/Dockerfile_debug @@ -0,0 +1,21 @@ +FROM eclipse-temurin:23 +COPY /build/libs/healenium-backend-*.jar /healenium-backend.jar +CMD java -jar /healenium-backend.jar + + +LABEL maintainer="healenium" + +ENV JAR=healenium-backend.jar +ENV EXECUTABLE=run.sh + +WORKDIR / + +COPY /build/libs/healenium-backend-*.jar /${JAR} +COPY run.sh /${EXECUTABLE} + +RUN chmod +x /${EXECUTABLE} + +EXPOSE 7878 +EXPOSE 5005 + +CMD /${EXECUTABLE} \ No newline at end of file diff --git a/run.sh b/run.sh new file mode 100644 index 0000000..e20bad2 --- /dev/null +++ b/run.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +DEFAULT_JAVA_OPTIONS="-XX:+UseG1GC -XX:MaxRAMPercentage=75" +DEBUG_OPTIONS="" + +if [ -n "${JAVA_DEBUG_ENABLE:-}" ] || [ -n "${JAVA_DEBUG:-}" ]; then + debug_port="${JAVA_DEBUG_PORT:-5005}" + DEBUG_OPTIONS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:${debug_port}" +fi + +echo -e "run.sh configuration:" +echo -e "\tDEFAULT_JAVA_OPTIONS: ${DEFAULT_JAVA_OPTIONS:-}" +echo -e "\tJAVA_OPTIONS: ${JAVA_OPTIONS:-}" +echo -e "\tDEBUG_OPTIONS: ${DEBUG_OPTIONS:-}" + +java $DEFAULT_JAVA_OPTIONS $JAVA_OPTIONS $DEBUG_OPTIONS -jar /$JAR + diff --git a/src/main/java/com/epam/healenium/controller/HealingController.java b/src/main/java/com/epam/healenium/controller/HealingController.java index 1b0307b..848c749 100644 --- a/src/main/java/com/epam/healenium/controller/HealingController.java +++ b/src/main/java/com/epam/healenium/controller/HealingController.java @@ -16,15 +16,15 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.util.StringUtils; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestHeader; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; -import org.springframework.web.bind.annotation.ExceptionHandler; -import org.springframework.web.bind.MethodArgumentNotValidException; -import org.springframework.validation.FieldError; import org.springframework.web.servlet.ModelAndView; import javax.validation.Valid; diff --git a/src/main/java/com/epam/healenium/controller/ImageController.java b/src/main/java/com/epam/healenium/controller/ImageController.java index dda3f65..9a26c44 100644 --- a/src/main/java/com/epam/healenium/controller/ImageController.java +++ b/src/main/java/com/epam/healenium/controller/ImageController.java @@ -4,7 +4,11 @@ import lombok.extern.slf4j.Slf4j; import org.apache.commons.compress.utils.IOUtils; import org.springframework.http.MediaType; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; import java.io.FileInputStream; import java.io.IOException; diff --git a/src/main/java/com/epam/healenium/controller/IntegrationController.java b/src/main/java/com/epam/healenium/controller/IntegrationController.java index 2947097..4a2471b 100644 --- a/src/main/java/com/epam/healenium/controller/IntegrationController.java +++ b/src/main/java/com/epam/healenium/controller/IntegrationController.java @@ -2,15 +2,25 @@ import com.epam.healenium.model.domain.HealingResult; import com.epam.healenium.model.domain.Report; -import com.epam.healenium.model.dto.elitea.*; +import com.epam.healenium.model.dto.elitea.DedicatedInfo; +import com.epam.healenium.model.dto.elitea.LlmDto; +import com.epam.healenium.model.dto.elitea.LocatorPathsDto; +import com.epam.healenium.model.dto.elitea.VcsDto; import com.epam.healenium.repository.ReportRepository; +import com.epam.healenium.service.IntegrationService; import com.epam.healenium.service.ReportService; import com.epam.healenium.service.SelectorService; -import com.epam.healenium.service.IntegrationService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import javax.validation.Valid; import java.util.List; diff --git a/src/main/java/com/epam/healenium/controller/LogController.java b/src/main/java/com/epam/healenium/controller/LogController.java index bbea9b1..f06901c 100644 --- a/src/main/java/com/epam/healenium/controller/LogController.java +++ b/src/main/java/com/epam/healenium/controller/LogController.java @@ -4,7 +4,11 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; diff --git a/src/main/java/com/epam/healenium/controller/ReportController.java b/src/main/java/com/epam/healenium/controller/ReportController.java index 500ee5e..62c58e9 100644 --- a/src/main/java/com/epam/healenium/controller/ReportController.java +++ b/src/main/java/com/epam/healenium/controller/ReportController.java @@ -8,14 +8,21 @@ import org.springframework.beans.factory.annotation.Value; import org.springframework.format.annotation.DateTimeFormat; import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestHeader; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.ModelAndView; -import java.time.LocalDateTime; -import java.util.Map; - import java.nio.file.Paths; +import java.time.LocalDateTime; import java.util.List; +import java.util.Map; @Slf4j @RestController diff --git a/src/main/java/com/epam/healenium/converter/NodeConverter.java b/src/main/java/com/epam/healenium/converter/NodeConverter.java index e87f700..da41c97 100644 --- a/src/main/java/com/epam/healenium/converter/NodeConverter.java +++ b/src/main/java/com/epam/healenium/converter/NodeConverter.java @@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import java.io.IOException; @Component diff --git a/src/main/java/com/epam/healenium/converter/RecordWrapperConverter.java b/src/main/java/com/epam/healenium/converter/RecordWrapperConverter.java index 781e216..b4c67a0 100644 --- a/src/main/java/com/epam/healenium/converter/RecordWrapperConverter.java +++ b/src/main/java/com/epam/healenium/converter/RecordWrapperConverter.java @@ -8,7 +8,6 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; - import java.io.IOException; @Slf4j diff --git a/src/main/java/com/epam/healenium/mapper/LocatorMapper.java b/src/main/java/com/epam/healenium/mapper/LocatorMapper.java index fea2e5f..fdbc13f 100644 --- a/src/main/java/com/epam/healenium/mapper/LocatorMapper.java +++ b/src/main/java/com/epam/healenium/mapper/LocatorMapper.java @@ -1,14 +1,14 @@ package com.epam.healenium.mapper; -import java.util.Collection; -import java.util.Set; - import com.epam.healenium.model.Locator; import org.mapstruct.IterableMapping; import org.mapstruct.Mapper; import org.mapstruct.ReportingPolicy; import org.openqa.selenium.By; +import java.util.Collection; +import java.util.Set; + @Mapper(componentModel = "spring", unmappedTargetPolicy = ReportingPolicy.IGNORE) public interface LocatorMapper { diff --git a/src/main/java/com/epam/healenium/model/domain/Healing.java b/src/main/java/com/epam/healenium/model/domain/Healing.java index 27b90be..0dbfe90 100644 --- a/src/main/java/com/epam/healenium/model/domain/Healing.java +++ b/src/main/java/com/epam/healenium/model/domain/Healing.java @@ -1,7 +1,18 @@ package com.epam.healenium.model.domain; -import jakarta.persistence.*; -import lombok.*; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.OneToMany; +import jakarta.persistence.Table; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; import lombok.experimental.Accessors; import org.hibernate.annotations.BatchSize; import org.hibernate.annotations.CreationTimestamp; diff --git a/src/main/java/com/epam/healenium/model/domain/HealingResult.java b/src/main/java/com/epam/healenium/model/domain/HealingResult.java index 4b473d3..e718ebb 100644 --- a/src/main/java/com/epam/healenium/model/domain/HealingResult.java +++ b/src/main/java/com/epam/healenium/model/domain/HealingResult.java @@ -1,7 +1,18 @@ package com.epam.healenium.model.domain; import com.epam.healenium.model.Locator; -import jakarta.persistence.*; +import jakarta.persistence.Basic; +import jakarta.persistence.CascadeType; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.JoinColumn; +import jakarta.persistence.ManyToOne; +import jakarta.persistence.SequenceGenerator; +import jakarta.persistence.Table; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.Setter; diff --git a/src/main/java/com/epam/healenium/model/domain/Report.java b/src/main/java/com/epam/healenium/model/domain/Report.java index b700e4d..debba6b 100644 --- a/src/main/java/com/epam/healenium/model/domain/Report.java +++ b/src/main/java/com/epam/healenium/model/domain/Report.java @@ -2,11 +2,17 @@ import com.epam.healenium.converter.RecordWrapperConverter; import com.epam.healenium.model.wrapper.RecordWrapper; -import jakarta.persistence.*; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Convert; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import jakarta.persistence.Version; import lombok.Data; import lombok.experimental.Accessors; import org.hibernate.annotations.CreationTimestamp; -import org.hibernate.annotations.GenericGenerator; import java.time.LocalDateTime; diff --git a/src/main/java/com/epam/healenium/model/domain/Selector.java b/src/main/java/com/epam/healenium/model/domain/Selector.java index a220fea..888b0de 100644 --- a/src/main/java/com/epam/healenium/model/domain/Selector.java +++ b/src/main/java/com/epam/healenium/model/domain/Selector.java @@ -3,7 +3,13 @@ import com.epam.healenium.converter.NodeConverter; import com.epam.healenium.model.Locator; import com.epam.healenium.model.wrapper.NodePathWrapper; -import jakarta.persistence.*; +import jakarta.persistence.Basic; +import jakarta.persistence.Column; +import jakarta.persistence.Convert; +import jakarta.persistence.Entity; +import jakarta.persistence.FetchType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; import lombok.Data; import lombok.ToString; import lombok.experimental.Accessors; @@ -11,6 +17,7 @@ import org.hibernate.annotations.CreationTimestamp; import org.hibernate.annotations.JdbcTypeCode; import org.hibernate.type.SqlTypes; + import java.time.LocalDateTime; /** diff --git a/src/main/java/com/epam/healenium/service/SelectorService.java b/src/main/java/com/epam/healenium/service/SelectorService.java index 585825a..ba172ef 100644 --- a/src/main/java/com/epam/healenium/service/SelectorService.java +++ b/src/main/java/com/epam/healenium/service/SelectorService.java @@ -1,7 +1,12 @@ package com.epam.healenium.service; import com.epam.healenium.model.domain.Selector; -import com.epam.healenium.model.dto.*; +import com.epam.healenium.model.dto.ConfigSelectorDto; +import com.epam.healenium.model.dto.RecordDto; +import com.epam.healenium.model.dto.ReferenceElementsDto; +import com.epam.healenium.model.dto.RequestDto; +import com.epam.healenium.model.dto.SelectorDto; +import com.epam.healenium.model.dto.SelectorRequestDto; import com.epam.healenium.model.dto.elitea.LocatorPathsDto; import java.util.List; diff --git a/src/main/java/com/epam/healenium/service/impl/HealingServiceImpl.java b/src/main/java/com/epam/healenium/service/impl/HealingServiceImpl.java index 5304fe2..d0a46ef 100644 --- a/src/main/java/com/epam/healenium/service/impl/HealingServiceImpl.java +++ b/src/main/java/com/epam/healenium/service/impl/HealingServiceImpl.java @@ -37,12 +37,7 @@ import java.util.Set; import java.util.stream.Collectors; -import static com.epam.healenium.constants.Constants.EMPTY_PROJECT; -import static com.epam.healenium.constants.Constants.HOST_PROJECT; -import static com.epam.healenium.constants.Constants.SESSION_KEY_V1; -import static com.epam.healenium.constants.Constants.SESSION_KEY_V2; -import static com.epam.healenium.constants.Constants.SUCCESSFUL_HEALING_BUCKET; -import static com.epam.healenium.constants.Constants.UNSUCCESSFUL_HEALING_BUCKET; +import static com.epam.healenium.constants.Constants.*; @Slf4j @Service diff --git a/src/main/java/com/epam/healenium/service/impl/IntegrationServiceImpl.java b/src/main/java/com/epam/healenium/service/impl/IntegrationServiceImpl.java index b65ac44..ac0e856 100644 --- a/src/main/java/com/epam/healenium/service/impl/IntegrationServiceImpl.java +++ b/src/main/java/com/epam/healenium/service/impl/IntegrationServiceImpl.java @@ -15,7 +15,10 @@ import org.jetbrains.annotations.NotNull; import org.springframework.stereotype.Service; -import java.util.*; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.UUID; @Slf4j @Service diff --git a/src/main/java/com/epam/healenium/service/impl/ReportServiceImpl.java b/src/main/java/com/epam/healenium/service/impl/ReportServiceImpl.java index 2be45f5..1063918 100644 --- a/src/main/java/com/epam/healenium/service/impl/ReportServiceImpl.java +++ b/src/main/java/com/epam/healenium/service/impl/ReportServiceImpl.java @@ -17,12 +17,12 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.apache.commons.io.FileUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.orm.ObjectOptimisticLockingFailureException; import org.springframework.retry.annotation.Backoff; import org.springframework.retry.annotation.Retryable; import org.springframework.stereotype.Service; -import org.apache.commons.io.FileUtils; import java.io.File; import java.nio.file.Paths; @@ -369,16 +369,15 @@ private ReportRecord createReportRecord(RecordWrapper.Record record) { } private void setDeclaringClass(ReportRecord reportRecord, RecordWrapper.Record record) { - String className = getClassNameFromSelector(record); + String classNameFromSelector = getClassNameFromSelector(record); - if ("HealeniumFindElementPostRequest".equals(className)) { + if ("HealeniumFindElementPostRequest".equals(classNameFromSelector)) { reportRecord.setDeclaringClass(record.getFailedLocator().getValue()); + return; } - else if (className != null && !className.trim().isEmpty()) { - reportRecord.setDeclaringClass(className); - } else { - setDeclaringClassFromRecord(reportRecord, record); - } + + String classNameFromRecord = getDeclaringClassFromRecord(record); + reportRecord.setDeclaringClass(classNameFromRecord); } private String getClassNameFromSelector(RecordWrapper.Record record) { @@ -389,18 +388,12 @@ private String getClassNameFromSelector(RecordWrapper.Record record) { .orElse(null); } - private void setDeclaringClassFromRecord(ReportRecord reportRecord, RecordWrapper.Record record) { + private String getDeclaringClassFromRecord(RecordWrapper.Record record) { String className = record.getClassName(); - if (className != null) { - String[] path = className.split("\\."); - if (path.length > 0) { - reportRecord.setDeclaringClass(path[path.length - 1]); - } else { - reportRecord.setDeclaringClass(className); - } - } else { - reportRecord.setDeclaringClass("Not Set"); + if (className == null) { + return "Not Set"; } + return className; } private void setCommonFields(ReportRecord reportRecord, RecordWrapper.Record record) { diff --git a/src/main/java/com/epam/healenium/service/impl/SelectorServiceImpl.java b/src/main/java/com/epam/healenium/service/impl/SelectorServiceImpl.java index 8fa78dd..94c8f17 100644 --- a/src/main/java/com/epam/healenium/service/impl/SelectorServiceImpl.java +++ b/src/main/java/com/epam/healenium/service/impl/SelectorServiceImpl.java @@ -8,7 +8,12 @@ import com.epam.healenium.model.domain.HealingResult; import com.epam.healenium.model.domain.Report; import com.epam.healenium.model.domain.Selector; -import com.epam.healenium.model.dto.*; +import com.epam.healenium.model.dto.ConfigSelectorDto; +import com.epam.healenium.model.dto.RecordDto; +import com.epam.healenium.model.dto.ReferenceElementsDto; +import com.epam.healenium.model.dto.RequestDto; +import com.epam.healenium.model.dto.SelectorDto; +import com.epam.healenium.model.dto.SelectorRequestDto; import com.epam.healenium.model.dto.elitea.LocatorPathsDto; import com.epam.healenium.model.wrapper.RecordWrapper; import com.epam.healenium.repository.HealingRepository; @@ -21,7 +26,6 @@ import jakarta.transaction.Transactional; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import java.util.Collections; diff --git a/src/main/java/com/epam/healenium/util/JpaTools.java b/src/main/java/com/epam/healenium/util/JpaTools.java index 16f7176..3c86203 100644 --- a/src/main/java/com/epam/healenium/util/JpaTools.java +++ b/src/main/java/com/epam/healenium/util/JpaTools.java @@ -1,6 +1,11 @@ package com.epam.healenium.util; -import jakarta.persistence.criteria.*; +import jakarta.persistence.criteria.CriteriaQuery; +import jakarta.persistence.criteria.Fetch; +import jakarta.persistence.criteria.From; +import jakarta.persistence.criteria.Join; +import jakarta.persistence.criteria.JoinType; +import jakarta.persistence.criteria.Root; import jakarta.persistence.metamodel.SetAttribute; import jakarta.persistence.metamodel.SingularAttribute; import lombok.experimental.UtilityClass; diff --git a/src/main/java/com/epam/healenium/util/LogFileReader.java b/src/main/java/com/epam/healenium/util/LogFileReader.java index d6b5e5e..8cb621b 100644 --- a/src/main/java/com/epam/healenium/util/LogFileReader.java +++ b/src/main/java/com/epam/healenium/util/LogFileReader.java @@ -3,11 +3,16 @@ import lombok.Getter; import lombok.extern.slf4j.Slf4j; -import java.io.*; -import java.nio.file.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.nio.file.Files; +import java.nio.file.Path; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.AbstractMap; +import java.util.Collections; +import java.util.List; import java.util.stream.Collectors; import java.util.stream.Stream; import java.util.zip.GZIPInputStream; diff --git a/src/main/resources/templates/selector.html b/src/main/resources/templates/selector.html index fb89aa1..5d733a5 100644 --- a/src/main/resources/templates/selector.html +++ b/src/main/resources/templates/selector.html @@ -342,7 +342,8 @@
method: