Рефакторинг по пакетам
This commit is contained in:
parent
7b0019f4fe
commit
d2e1fdbfcb
@ -0,0 +1,17 @@
|
||||
package dev.struchkov.bot.gitlab.context.prop;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* Основные настройки приложения.
|
||||
*
|
||||
* @author upagge 11.10.2020
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
public class AppProperty {
|
||||
|
||||
private String version;
|
||||
|
||||
}
|
@ -1,9 +1,7 @@
|
||||
package dev.struchkov.bot.gitlab.core.config.properties;
|
||||
package dev.struchkov.bot.gitlab.context.prop;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
/**
|
||||
* Данные необходимые для взаимодействия с API GitLab.
|
||||
@ -12,8 +10,6 @@ import org.springframework.stereotype.Component;
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Component
|
||||
@ConfigurationProperties("gitlab-bot.gitlab")
|
||||
public class GitlabProperty {
|
||||
|
||||
private String baseUrl;
|
@ -0,0 +1,17 @@
|
||||
package dev.struchkov.bot.gitlab.context.prop;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
|
||||
/**
|
||||
* @author upagge 15.01.2021
|
||||
*/
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
public class PersonProperty {
|
||||
|
||||
private String token;
|
||||
private String telegramId;
|
||||
|
||||
}
|
@ -34,6 +34,10 @@
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter</artifactId>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
<artifactId>spring-boot-starter-web</artifactId>
|
||||
</dependency>
|
||||
|
||||
<dependency>
|
||||
<groupId>org.springframework.boot</groupId>
|
||||
|
@ -1,16 +0,0 @@
|
||||
package dev.struchkov.bot.gitlab.core.config;
|
||||
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
|
||||
@Configuration
|
||||
public class CoreConfig {
|
||||
|
||||
@Bean("parserPool")
|
||||
public ForkJoinPool parserPool() {
|
||||
return new ForkJoinPool(4);
|
||||
}
|
||||
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package dev.struchkov.bot.gitlab.core.config.properties;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* Основные настройки приложения.
|
||||
*
|
||||
* @author upagge 11.10.2020
|
||||
*/
|
||||
@Getter
|
||||
@Setter
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "gitlab-bot")
|
||||
public class AppProperty {
|
||||
|
||||
private String version;
|
||||
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
package dev.struchkov.bot.gitlab.core.config.properties;
|
||||
|
||||
import lombok.Getter;
|
||||
import lombok.Setter;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
|
||||
/**
|
||||
* @author upagge 15.01.2021
|
||||
*/
|
||||
|
||||
@Getter
|
||||
@Setter
|
||||
@Configuration
|
||||
@ConfigurationProperties(prefix = "gitlab-bot.person")
|
||||
public class PersonProperty {
|
||||
|
||||
private String token;
|
||||
private String telegramId;
|
||||
|
||||
}
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.convert;
|
||||
package dev.struchkov.bot.gitlab.core.convert;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Discussion;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.convert;
|
||||
package dev.struchkov.bot.gitlab.core.convert;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.MergeRequestState;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.convert;
|
||||
package dev.struchkov.bot.gitlab.core.convert;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Note;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.NoteJson;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.convert;
|
||||
package dev.struchkov.bot.gitlab.core.convert;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.PersonJson;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.convert;
|
||||
package dev.struchkov.bot.gitlab.core.convert;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.convert;
|
||||
package dev.struchkov.bot.gitlab.core.convert;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Project;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.ProjectJson;
|
@ -1,14 +1,14 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser;
|
||||
package dev.struchkov.bot.gitlab.core.parser;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Discussion;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequestForDiscussion;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Note;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
|
||||
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;
|
||||
import lombok.extern.slf4j.Slf4j;
|
@ -1,16 +1,16 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser;
|
||||
package dev.struchkov.bot.gitlab.core.parser;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.IdAndStatusPr;
|
||||
import dev.struchkov.bot.gitlab.context.domain.MergeRequestState;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
||||
import dev.struchkov.bot.gitlab.context.service.ProjectService;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetAllMergeRequestForProjectTask;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetSingleMergeRequestTask;
|
||||
import dev.struchkov.bot.gitlab.core.parser.forktask.GetAllMergeRequestForProjectTask;
|
||||
import dev.struchkov.bot.gitlab.core.parser.forktask.GetSingleMergeRequestTask;
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.ApprovalContainerJson;
|
@ -1,14 +1,14 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser;
|
||||
package dev.struchkov.bot.gitlab.core.parser;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.PipelineStatus;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Pipeline;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.service.PipelineService;
|
||||
import dev.struchkov.bot.gitlab.context.service.ProjectService;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetPipelineShortTask;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.forktask.GetPipelineTask;
|
||||
import dev.struchkov.bot.gitlab.core.parser.forktask.GetPipelineShortTask;
|
||||
import dev.struchkov.bot.gitlab.core.parser.forktask.GetPipelineTask;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.PipelineJson;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.PipelineShortJson;
|
||||
import lombok.extern.slf4j.Slf4j;
|
@ -1,13 +1,13 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser;
|
||||
package dev.struchkov.bot.gitlab.core.parser;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Project;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
||||
import dev.struchkov.bot.gitlab.context.service.PersonService;
|
||||
import dev.struchkov.bot.gitlab.context.service.ProjectService;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.PersonJson;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
|
||||
package dev.struchkov.bot.gitlab.core.parser.forktask;
|
||||
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.sdk.domain.DiscussionJson;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
|
||||
package dev.struchkov.bot.gitlab.core.parser.forktask;
|
||||
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
|
||||
package dev.struchkov.bot.gitlab.core.parser.forktask;
|
||||
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
|
||||
package dev.struchkov.bot.gitlab.core.parser.forktask;
|
||||
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.parser.forktask;
|
||||
package dev.struchkov.bot.gitlab.core.parser.forktask;
|
||||
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.AppSetting;
|
||||
import dev.struchkov.bot.gitlab.context.domain.notify.level.DiscussionLevel;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
|
||||
@ -10,12 +10,12 @@ import dev.struchkov.bot.gitlab.context.domain.notify.comment.NewCommentNotify;
|
||||
import dev.struchkov.bot.gitlab.context.domain.notify.level.DiscussionLevel;
|
||||
import dev.struchkov.bot.gitlab.context.domain.notify.task.DiscussionNewNotify;
|
||||
import dev.struchkov.bot.gitlab.context.domain.notify.task.ThreadCloseNotify;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.repository.DiscussionRepository;
|
||||
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
||||
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
|
||||
import dev.struchkov.bot.gitlab.context.service.NotifyService;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
||||
import dev.struchkov.haiti.utils.container.Pair;
|
||||
import lombok.NonNull;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.AssigneeChanged;
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl.note;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Note;
|
||||
import dev.struchkov.bot.gitlab.context.repository.NoteRepository;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.notify.Notify;
|
||||
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Person;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
|
@ -1,4 +1,4 @@
|
||||
package dev.struchkov.bot.gitlab.core.service.impl;
|
||||
package dev.struchkov.bot.gitlab.core.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.ExistContainer;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Project;
|
@ -2,124 +2,98 @@ package dev.struchkov.bot.gitlab.core.utils;
|
||||
|
||||
import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
import dev.struchkov.haiti.utils.Inspector;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import okhttp3.HttpUrl;
|
||||
import okhttp3.OkHttpClient;
|
||||
import okhttp3.Request;
|
||||
import okhttp3.Response;
|
||||
import okhttp3.ResponseBody;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.HttpEntity;
|
||||
import org.springframework.http.HttpHeaders;
|
||||
import org.springframework.http.HttpMethod;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.util.UriComponentsBuilder;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
||||
import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
||||
|
||||
/**
|
||||
* Утилитарный класс для работы с web.
|
||||
*
|
||||
* @author upagge 30.09.2020
|
||||
*/
|
||||
@Component
|
||||
public class HttpParse {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(HttpParse.class);
|
||||
|
||||
public static final HttpHeader ACCEPT = HttpHeader.of("Accept", "text/html,application/xhtml+xml,application/json");
|
||||
|
||||
private static final ObjectMapper objectMapper;
|
||||
|
||||
private final Request.Builder requestBuilder = new Request.Builder();
|
||||
private final HttpUrl.Builder httpUrlBuilder;
|
||||
private final HttpHeaders headers = new HttpHeaders();
|
||||
private final UriComponentsBuilder uriBuilder;
|
||||
|
||||
static {
|
||||
objectMapper = new ObjectMapper();
|
||||
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
}
|
||||
|
||||
public HttpParse(String url) {
|
||||
Inspector.isNotNull(url);
|
||||
httpUrlBuilder = HttpUrl.parse(url).newBuilder();
|
||||
private final RestTemplate restTemplate;
|
||||
|
||||
public HttpParse(String url, RestTemplate restTemplate) {
|
||||
this.restTemplate = restTemplate;
|
||||
this.uriBuilder = UriComponentsBuilder.fromHttpUrl(url);
|
||||
}
|
||||
|
||||
public static HttpParse request(String url) {
|
||||
Inspector.isNotNull(url);
|
||||
return new HttpParse(url);
|
||||
public static HttpParse request(String url, RestTemplate restTemplate) {
|
||||
return new HttpParse(url, restTemplate);
|
||||
}
|
||||
|
||||
public HttpParse header(String name, String value) {
|
||||
isNotNull(name);
|
||||
if (value != null) {
|
||||
requestBuilder.header(name, value);
|
||||
if (name != null && value != null) {
|
||||
headers.add(name, value);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public HttpParse header(HttpHeader header) {
|
||||
isNotNull(header);
|
||||
requestBuilder.header(header.getName(), header.getValue());
|
||||
if (header != null) {
|
||||
headers.add(header.getName(), header.getValue());
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public HttpParse getParameter(String name, String value) {
|
||||
isNotNull(name);
|
||||
if (value != null) {
|
||||
httpUrlBuilder.addQueryParameter(name, value);
|
||||
if (name != null && value != null) {
|
||||
uriBuilder.queryParam(name, value);
|
||||
}
|
||||
return this;
|
||||
}
|
||||
|
||||
public <T> Optional<T> execute(Class<T> classOfT) {
|
||||
isNotNull(classOfT);
|
||||
final HttpUrl url = httpUrlBuilder.build();
|
||||
final Request request = requestBuilder.url(url).build();
|
||||
log.trace("Выполняется okhttp3 запрос | {}", url);
|
||||
final OkHttpClient httpClient = getNewClient();
|
||||
try (final Response execute = httpClient.newCall(request).execute()) {
|
||||
try {
|
||||
String url = uriBuilder.toUriString();
|
||||
log.trace("Выполняется RestTemplate запрос | {}", url);
|
||||
HttpEntity<String> entity = new HttpEntity<>(headers);
|
||||
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
|
||||
log.trace("Запрос выполнен | {}", url);
|
||||
if (execute.isSuccessful() && checkNotNull(execute.body())) {
|
||||
final String string = execute.body().string();
|
||||
return Optional.ofNullable(objectMapper.readValue(string, classOfT));
|
||||
if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) {
|
||||
String body = response.getBody();
|
||||
return Optional.ofNullable(objectMapper.readValue(body, classOfT));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error("Ошибка выполнения okhttp3", e);
|
||||
log.error("Ошибка выполнения RestTemplate", e);
|
||||
}
|
||||
return Optional.empty();
|
||||
}
|
||||
|
||||
//TODO [16.01.2023|uPagge]: Okhttp Client создается на каждый запрос, что не рационально по потреблению ресурсов и производительности, но позволяет обойти ограничение со стороны гитлаба, при котором один и тот же клиент отбрасывался спустя 1000 запросов. Возможно стоит заменить OkHttp на что-то другое, например, RestTemplate
|
||||
public <T> List<T> executeList(Class<T> classOfT) {
|
||||
isNotNull(classOfT);
|
||||
final HttpUrl url = httpUrlBuilder.build();
|
||||
final Request request = requestBuilder.url(url).build();
|
||||
log.trace("Выполняется okhttp3 запрос | {}", url);
|
||||
final OkHttpClient httpClient = getNewClient();
|
||||
try (Response execute = httpClient.newCall(request).execute()) {
|
||||
try {
|
||||
String url = uriBuilder.toUriString();
|
||||
log.trace("Выполняется RestTemplate запрос | {}", url);
|
||||
HttpEntity<String> entity = new HttpEntity<>(headers);
|
||||
ResponseEntity<String> response = restTemplate.exchange(url, HttpMethod.GET, entity, String.class);
|
||||
log.trace("Запрос выполнен | {}", url);
|
||||
ResponseBody body = execute.body();
|
||||
if (execute.isSuccessful() && checkNotNull(body)) {
|
||||
final String stringBody = body.string();
|
||||
final List<T> list = objectMapper.readValue(stringBody, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT));
|
||||
return (list == null || list.isEmpty()) ? Collections.emptyList() : list;
|
||||
if (response.getStatusCode().is2xxSuccessful() && response.hasBody()) {
|
||||
String body = response.getBody();
|
||||
return objectMapper.readValue(body, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT));
|
||||
}
|
||||
} catch (IOException e) {
|
||||
log.error("Ошибка выполнения okhttp3", e);
|
||||
log.error("Ошибка выполнения RestTemplate", e);
|
||||
}
|
||||
return Collections.emptyList();
|
||||
}
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private static OkHttpClient getNewClient() {
|
||||
return new OkHttpClient().newBuilder()
|
||||
.connectTimeout(30, TimeUnit.SECONDS)
|
||||
.readTimeout(30, TimeUnit.SECONDS)
|
||||
.writeTimeout(30, TimeUnit.SECONDS)
|
||||
.build();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,125 @@
|
||||
//package dev.struchkov.bot.gitlab.core.utils;
|
||||
//
|
||||
//import com.fasterxml.jackson.databind.DeserializationFeature;
|
||||
//import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
//import dev.struchkov.haiti.utils.Inspector;
|
||||
//import jakarta.validation.constraints.NotNull;
|
||||
//import okhttp3.HttpUrl;
|
||||
//import okhttp3.OkHttpClient;
|
||||
//import okhttp3.Request;
|
||||
//import okhttp3.Response;
|
||||
//import okhttp3.ResponseBody;
|
||||
//import org.slf4j.Logger;
|
||||
//import org.slf4j.LoggerFactory;
|
||||
//
|
||||
//import java.io.IOException;
|
||||
//import java.util.Collections;
|
||||
//import java.util.List;
|
||||
//import java.util.Optional;
|
||||
//import java.util.concurrent.TimeUnit;
|
||||
//
|
||||
//import static dev.struchkov.haiti.utils.Checker.checkNotNull;
|
||||
//import static dev.struchkov.haiti.utils.Inspector.isNotNull;
|
||||
//
|
||||
///**
|
||||
// * Утилитарный класс для работы с web.
|
||||
// *
|
||||
// * @author upagge 30.09.2020
|
||||
// */
|
||||
//public class HttpParse {
|
||||
//
|
||||
// private static final Logger log = LoggerFactory.getLogger(HttpParse.class);
|
||||
//
|
||||
// public static final HttpHeader ACCEPT = HttpHeader.of("Accept", "text/html,application/xhtml+xml,application/json");
|
||||
//
|
||||
// private static final ObjectMapper objectMapper;
|
||||
//
|
||||
// private final Request.Builder requestBuilder = new Request.Builder();
|
||||
// private final HttpUrl.Builder httpUrlBuilder;
|
||||
//
|
||||
// static {
|
||||
// objectMapper = new ObjectMapper();
|
||||
// objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
|
||||
// }
|
||||
//
|
||||
// public HttpParse(String url) {
|
||||
// Inspector.isNotNull(url);
|
||||
// httpUrlBuilder = HttpUrl.parse(url).newBuilder();
|
||||
// }
|
||||
//
|
||||
// public static HttpParse request(String url) {
|
||||
// Inspector.isNotNull(url);
|
||||
// return new HttpParse(url);
|
||||
// }
|
||||
//
|
||||
// public HttpParse header(String name, String value) {
|
||||
// isNotNull(name);
|
||||
// if (value != null) {
|
||||
// requestBuilder.header(name, value);
|
||||
// }
|
||||
// return this;
|
||||
// }
|
||||
//
|
||||
// public HttpParse header(HttpHeader header) {
|
||||
// isNotNull(header);
|
||||
// requestBuilder.header(header.getName(), header.getValue());
|
||||
// return this;
|
||||
// }
|
||||
//
|
||||
// public HttpParse getParameter(String name, String value) {
|
||||
// isNotNull(name);
|
||||
// if (value != null) {
|
||||
// httpUrlBuilder.addQueryParameter(name, value);
|
||||
// }
|
||||
// return this;
|
||||
// }
|
||||
//
|
||||
// public <T> Optional<T> execute(Class<T> classOfT) {
|
||||
// isNotNull(classOfT);
|
||||
// final HttpUrl url = httpUrlBuilder.build();
|
||||
// final Request request = requestBuilder.url(url).build();
|
||||
// log.trace("Выполняется okhttp3 запрос | {}", url);
|
||||
// final OkHttpClient httpClient = getNewClient();
|
||||
// try (final Response execute = httpClient.newCall(request).execute()) {
|
||||
// log.trace("Запрос выполнен | {}", url);
|
||||
// if (execute.isSuccessful() && checkNotNull(execute.body())) {
|
||||
// final String string = execute.body().string();
|
||||
// return Optional.ofNullable(objectMapper.readValue(string, classOfT));
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// log.error("Ошибка выполнения okhttp3", e);
|
||||
// }
|
||||
// return Optional.empty();
|
||||
// }
|
||||
//
|
||||
// //TODO [16.01.2023|uPagge]: Okhttp Client создается на каждый запрос, что не рационально по потреблению ресурсов и производительности, но позволяет обойти ограничение со стороны гитлаба, при котором один и тот же клиент отбрасывался спустя 1000 запросов. Возможно стоит заменить OkHttp на что-то другое, например, RestTemplate
|
||||
// public <T> List<T> executeList(Class<T> classOfT) {
|
||||
// isNotNull(classOfT);
|
||||
// final HttpUrl url = httpUrlBuilder.build();
|
||||
// final Request request = requestBuilder.url(url).build();
|
||||
// log.trace("Выполняется okhttp3 запрос | {}", url);
|
||||
// final OkHttpClient httpClient = getNewClient();
|
||||
// try (Response execute = httpClient.newCall(request).execute()) {
|
||||
// log.trace("Запрос выполнен | {}", url);
|
||||
// ResponseBody body = execute.body();
|
||||
// if (execute.isSuccessful() && checkNotNull(body)) {
|
||||
// final String stringBody = body.string();
|
||||
// final List<T> list = objectMapper.readValue(stringBody, objectMapper.getTypeFactory().constructCollectionType(List.class, classOfT));
|
||||
// return (list == null || list.isEmpty()) ? Collections.emptyList() : list;
|
||||
// }
|
||||
// } catch (IOException e) {
|
||||
// log.error("Ошибка выполнения okhttp3", e);
|
||||
// }
|
||||
// return Collections.emptyList();
|
||||
// }
|
||||
//
|
||||
// @NotNull
|
||||
// private static OkHttpClient getNewClient() {
|
||||
// return new OkHttpClient().newBuilder()
|
||||
// .connectTimeout(30, TimeUnit.SECONDS)
|
||||
// .readTimeout(30, TimeUnit.SECONDS)
|
||||
// .writeTimeout(30, TimeUnit.SECONDS)
|
||||
// .build();
|
||||
// }
|
||||
//
|
||||
//}
|
@ -1,10 +1,12 @@
|
||||
package dev.struchkov.bot.gitlab.config;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.AppProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.core.utils.HttpParse;
|
||||
import dev.struchkov.bot.gitlab.core.utils.StringUtils;
|
||||
import org.springframework.boot.context.properties.ConfigurationProperties;
|
||||
import org.springframework.context.annotation.Bean;
|
||||
import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.core.convert.ConversionService;
|
||||
@ -13,6 +15,7 @@ import org.springframework.core.convert.support.DefaultConversionService;
|
||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.ForkJoinPool;
|
||||
|
||||
import static dev.struchkov.bot.gitlab.core.utils.HttpParse.ACCEPT;
|
||||
import static dev.struchkov.haiti.context.exception.NotFoundException.notFoundException;
|
||||
@ -36,6 +39,29 @@ public class AppConfig {
|
||||
// return taskScheduler;
|
||||
// }
|
||||
|
||||
@Bean
|
||||
@ConfigurationProperties(prefix = "gitlab-bot")
|
||||
public AppProperty appProperty() {
|
||||
return new AppProperty();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConfigurationProperties("gitlab-bot.gitlab")
|
||||
public GitlabProperty gitlabProperty() {
|
||||
return new GitlabProperty();
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ConfigurationProperties(prefix = "gitlab-bot.person")
|
||||
public PersonProperty personProperty() {
|
||||
return new PersonProperty();
|
||||
}
|
||||
|
||||
@Bean("parserPool")
|
||||
public ForkJoinPool parserPool() {
|
||||
return new ForkJoinPool(4);
|
||||
}
|
||||
|
||||
@Bean
|
||||
public ConversionService conversionService(Converter... converters) {
|
||||
final DefaultConversionService defaultConversionService = new DefaultConversionService();
|
||||
|
@ -4,10 +4,10 @@ import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
||||
import dev.struchkov.bot.gitlab.context.service.DiscussionService;
|
||||
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
||||
import dev.struchkov.bot.gitlab.context.service.PipelineService;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.DiscussionParser;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.MergeRequestParser;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.PipelineParser;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.DiscussionParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.MergeRequestParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.PipelineParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.ProjectParser;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.scheduling.annotation.Scheduled;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package dev.struchkov.bot.gitlab.telegram.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.godfather.main.domain.content.Message;
|
||||
import dev.struchkov.godfather.simple.context.service.ErrorHandler;
|
||||
import dev.struchkov.godfather.simple.domain.BoxAnswer;
|
||||
|
@ -1,6 +1,6 @@
|
||||
package dev.struchkov.bot.gitlab.telegram.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.godfather.simple.domain.BoxAnswer;
|
||||
import dev.struchkov.godfather.simple.domain.action.PreSendProcessing;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
|
@ -1,9 +1,9 @@
|
||||
package dev.struchkov.bot.gitlab.telegram.service;
|
||||
|
||||
import dev.struchkov.bot.gitlab.context.prop.AppProperty;
|
||||
import dev.struchkov.bot.gitlab.context.prop.PersonProperty;
|
||||
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
||||
import dev.struchkov.bot.gitlab.context.utils.Icons;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.AppProperty;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.PersonProperty;
|
||||
import dev.struchkov.godfather.simple.domain.BoxAnswer;
|
||||
import dev.struchkov.godfather.telegram.domain.ClientBotCommand;
|
||||
import dev.struchkov.godfather.telegram.simple.context.service.TelegramSending;
|
||||
|
@ -3,13 +3,13 @@ package dev.struchkov.bot.gitlab.telegram.unit;
|
||||
import dev.struchkov.bot.gitlab.context.domain.PersonInformation;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.MergeRequest;
|
||||
import dev.struchkov.bot.gitlab.context.domain.entity.Project;
|
||||
import dev.struchkov.bot.gitlab.context.prop.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.context.service.AppSettingService;
|
||||
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
||||
import dev.struchkov.bot.gitlab.context.service.NoteService;
|
||||
import dev.struchkov.bot.gitlab.context.service.ProjectService;
|
||||
import dev.struchkov.bot.gitlab.context.utils.Icons;
|
||||
import dev.struchkov.bot.gitlab.core.config.properties.GitlabProperty;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.ProjectParser;
|
||||
import dev.struchkov.bot.gitlab.telegram.utils.UnitName;
|
||||
import dev.struchkov.godfather.main.domain.annotation.Unit;
|
||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
||||
|
@ -7,10 +7,10 @@ import dev.struchkov.bot.gitlab.context.service.DiscussionService;
|
||||
import dev.struchkov.bot.gitlab.context.service.MergeRequestsService;
|
||||
import dev.struchkov.bot.gitlab.context.service.PipelineService;
|
||||
import dev.struchkov.bot.gitlab.context.service.ProjectService;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.DiscussionParser;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.MergeRequestParser;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.PipelineParser;
|
||||
import dev.struchkov.bot.gitlab.core.service.parser.ProjectParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.DiscussionParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.MergeRequestParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.PipelineParser;
|
||||
import dev.struchkov.bot.gitlab.core.parser.ProjectParser;
|
||||
import dev.struchkov.godfather.main.domain.annotation.Unit;
|
||||
import dev.struchkov.godfather.main.domain.content.Mail;
|
||||
import dev.struchkov.godfather.main.domain.content.Message;
|
||||
|
Loading…
Reference in New Issue
Block a user