diff --git a/.run/Deployment compose-local.run.xml b/.run/Deployment compose-local.run.xml
deleted file mode 100644
index 4f2962b..0000000
--- a/.run/Deployment compose-local.run.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.run/MainApplication (local).run.xml b/.run/MainApplication (local).run.xml
deleted file mode 100644
index bd3928c..0000000
--- a/.run/MainApplication (local).run.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.run/MainApplication.run.xml b/.run/MainApplication.run.xml
deleted file mode 100644
index d0e71e8..0000000
--- a/.run/MainApplication.run.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.run/StatApplication (local).run.xml b/.run/StatApplication (local).run.xml
deleted file mode 100644
index ed683b0..0000000
--- a/.run/StatApplication (local).run.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.run/StatApplication.run.xml b/.run/StatApplication.run.xml
deleted file mode 100644
index 65d72ff..0000000
--- a/.run/StatApplication.run.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/core/comment-service/pom.xml b/core/comment-service/pom.xml
index d017437..fb664c3 100644
--- a/core/comment-service/pom.xml
+++ b/core/comment-service/pom.xml
@@ -55,12 +55,6 @@
${project.version}
-
- ru.yandex.practicum
- stats-dto
- ${project.version}
-
-
org.projectlombok
lombok
@@ -95,7 +89,6 @@
org.springframework.retry
spring-retry
- 2.0.5
diff --git a/core/event-service/pom.xml b/core/event-service/pom.xml
index fc467b1..4f728a4 100644
--- a/core/event-service/pom.xml
+++ b/core/event-service/pom.xml
@@ -55,12 +55,6 @@
${project.version}
-
- ru.yandex.practicum
- stats-dto
- ${project.version}
-
-
org.projectlombok
lombok
@@ -95,7 +89,6 @@
org.springframework.retry
spring-retry
- 2.0.5
diff --git a/core/event-service/src/main/java/ru/yandex/practicum/controller/PublicEventController.java b/core/event-service/src/main/java/ru/yandex/practicum/controller/PublicEventController.java
index cfe01a4..7240a8f 100644
--- a/core/event-service/src/main/java/ru/yandex/practicum/controller/PublicEventController.java
+++ b/core/event-service/src/main/java/ru/yandex/practicum/controller/PublicEventController.java
@@ -6,12 +6,15 @@
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.PageRequest;
+import org.springframework.http.HttpStatus;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
+import ru.practicum.ewm.stats.proto.RecommendedEventProto;
import ru.yandex.practicum.dto.event.*;
import ru.yandex.practicum.service.EventService;
import java.util.List;
+import java.util.stream.Stream;
@Slf4j
@Validated
@@ -34,8 +37,28 @@ public List getEventsPublic(@ModelAttribute @Valid SearchEventPub
@GetMapping("/{id}")
public EventFullDto getEventByIdPublic(@PathVariable("id") @Positive Long eventId,
- HttpServletRequest httpRequest) {
+ HttpServletRequest httpRequest,
+ @RequestHeader("X-EWM-USER-ID") Long userId) {
log.debug("Controller: getEventByIdPublic eventId={}", eventId);
- return eventService.getEventByIdPublic(eventId, httpRequest.getRemoteAddr());
+ return eventService.getEventByIdPublic(eventId, httpRequest.getRemoteAddr(), userId);
+ }
+
+ @GetMapping("/recommendations")
+ public Stream getRecommendations(
+ @RequestHeader("X-EWM-USER-ID") Long userId,
+ @RequestParam(defaultValue = "10") int maxResults) {
+
+ log.debug("Controller: getRecommendations userId={}, maxResults={}", userId, maxResults);
+ return eventService.getRecommendationsForUser(userId, maxResults);
+ }
+
+ @PutMapping("/{eventId}/like")
+ @ResponseStatus(HttpStatus.OK)
+ public void likeEvent(
+ @PathVariable Long eventId,
+ @RequestHeader("X-EWM-USER-ID") Long userId) {
+
+ log.debug("Controller: likeEvent eventId={}, userId={}", eventId, userId);
+ eventService.likeEvent(userId, eventId);
}
}
diff --git a/core/event-service/src/main/java/ru/yandex/practicum/mapper/EventMapper.java b/core/event-service/src/main/java/ru/yandex/practicum/mapper/EventMapper.java
index 18dcf68..b4d5669 100644
--- a/core/event-service/src/main/java/ru/yandex/practicum/mapper/EventMapper.java
+++ b/core/event-service/src/main/java/ru/yandex/practicum/mapper/EventMapper.java
@@ -15,7 +15,7 @@ public interface EventMapper {
@Mapping(target = "createdOn", ignore = true)
@Mapping(target = "publishedOn", ignore = true)
@Mapping(target = "confirmedRequests", ignore = true)
- @Mapping(target = "views", ignore = true)
+ @Mapping(target = "rating", ignore = true)
Event toEntity(NewEventDto dto, Long initiatorId, Category category);
@Mapping(target = "initiator", ignore = true)
@@ -32,7 +32,7 @@ public interface EventMapper {
@Mapping(target = "publishedOn", ignore = true)
@Mapping(target = "state", ignore = true)
@Mapping(target = "category", ignore = true)
- @Mapping(target = "views", ignore = true)
+ @Mapping(target = "rating", ignore = true)
@Mapping(target = "confirmedRequests", ignore = true)
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void updateEventFromUserRequest(UpdateEventUserRequest request, @MappingTarget Event event, Category category);
@@ -43,7 +43,7 @@ public interface EventMapper {
@Mapping(target = "createdOn", ignore = true)
@Mapping(target = "publishedOn", ignore = true)
@Mapping(target = "state", ignore = true)
- @Mapping(target = "views", ignore = true)
+ @Mapping(target = "rating", ignore = true)
@Mapping(target = "confirmedRequests", ignore = true)
@BeanMapping(nullValuePropertyMappingStrategy = NullValuePropertyMappingStrategy.IGNORE)
void updateEventFromAdminRequest(UpdateEventAdminRequest request, @MappingTarget Event event, Category category);
diff --git a/core/event-service/src/main/java/ru/yandex/practicum/model/Event.java b/core/event-service/src/main/java/ru/yandex/practicum/model/Event.java
index a33d87f..ec202c8 100644
--- a/core/event-service/src/main/java/ru/yandex/practicum/model/Event.java
+++ b/core/event-service/src/main/java/ru/yandex/practicum/model/Event.java
@@ -55,6 +55,7 @@ public class Event {
private Location location;
@Column(nullable = false)
+ @Builder.Default
private Boolean paid = false;
@Column(name = "participant_limit", nullable = false)
@@ -71,9 +72,9 @@ public class Event {
@Builder.Default
private Integer confirmedRequests = 0;
- @Column(name = "views", nullable = false)
+ @Column(name = "rating", nullable = false)
@Builder.Default
- private Long views = 0L;
+ private Double rating = 0.0;
public void pending() {
this.state = EventState.PENDING;
diff --git a/core/event-service/src/main/java/ru/yandex/practicum/service/EventService.java b/core/event-service/src/main/java/ru/yandex/practicum/service/EventService.java
index 934e08e..0a8205a 100644
--- a/core/event-service/src/main/java/ru/yandex/practicum/service/EventService.java
+++ b/core/event-service/src/main/java/ru/yandex/practicum/service/EventService.java
@@ -1,10 +1,12 @@
package ru.yandex.practicum.service;
import org.springframework.data.domain.Pageable;
+import ru.practicum.ewm.stats.proto.RecommendedEventProto;
import ru.yandex.practicum.dto.event.*;
import ru.yandex.practicum.model.Event;
import java.util.List;
+import java.util.stream.Stream;
public interface EventService {
List getEvents(Long userId, Pageable pageable);
@@ -23,5 +25,9 @@ public interface EventService {
List getEventsPublic(SearchEventPublicRequest requestParams, Pageable pageable, String ip);
- EventFullDto getEventByIdPublic(Long eventId, String ip);
+ EventFullDto getEventByIdPublic(Long eventId, String ip, Long userId);
+
+ Stream getRecommendationsForUser(Long userId, int maxResults);
+
+ void likeEvent(Long userId, Long eventId);
}
diff --git a/core/event-service/src/main/java/ru/yandex/practicum/service/EventServiceImpl.java b/core/event-service/src/main/java/ru/yandex/practicum/service/EventServiceImpl.java
index 1000ecc..aaf8328 100644
--- a/core/event-service/src/main/java/ru/yandex/practicum/service/EventServiceImpl.java
+++ b/core/event-service/src/main/java/ru/yandex/practicum/service/EventServiceImpl.java
@@ -1,5 +1,6 @@
package ru.yandex.practicum.service;
+import com.google.protobuf.Timestamp;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.Page;
@@ -7,9 +8,13 @@
import org.springframework.data.jpa.domain.Specification;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
-import ru.yandex.practicum.CreateEndpointHitDto;
-import ru.yandex.practicum.StatsClientApp;
-import ru.yandex.practicum.ViewStatsDto;
+import ru.practicum.ewm.stats.proto.InteractionsCountRequestProto;
+import ru.practicum.ewm.stats.proto.RecommendedEventProto;
+import ru.practicum.ewm.stats.proto.UserActionProto;
+import ru.practicum.ewm.stats.proto.UserPredictionsRequestProto;
+import ru.practicum.ewm.stats.proto.ActionTypeProto;
+import ru.yandex.practicum.client.AnalyzerClient;
+import ru.yandex.practicum.client.CollectorClient;
import ru.yandex.practicum.client.RequestClient;
import ru.yandex.practicum.client.UserClient;
import ru.yandex.practicum.dto.event.*;
@@ -21,9 +26,11 @@
import ru.yandex.practicum.model.Event;
import ru.yandex.practicum.repository.*;
+import java.time.Instant;
import java.time.LocalDateTime;
import java.util.*;
import java.util.stream.Collectors;
+import java.util.stream.Stream;
@Slf4j
@Service
@@ -33,8 +40,9 @@ public class EventServiceImpl implements EventService {
private final EventMapper eventMapper;
private final UserClient userClient;
private final RequestClient requestClient;
- private final StatsClientApp statsClient;
private final CategoryRepository categoryRepository;
+ private final AnalyzerClient analyzerClient;
+ private final CollectorClient collectorClient;
@Override
@Transactional
@@ -47,6 +55,7 @@ public EventFullDto createEvent(Long userId, NewEventDto newEventDto) {
.orElseThrow(() -> new NotFoundException("Категория с id=" + newEventDto.category() + " не найдена"));
Event event = eventMapper.toEntity(newEventDto, userId, category);
+ event.setRating(0.0);
event = eventRepository.save(event);
log.info("Создано событие с id={}, title={}, initiatorId={}", event.getId(), event.getTitle(), userId);
@@ -54,7 +63,7 @@ public EventFullDto createEvent(Long userId, NewEventDto newEventDto) {
EventFullDto dto = eventMapper.toFullDto(event);
dto.setInitiator(getUserShortDto(userId));
dto.setConfirmedRequests(0L);
- dto.setViews(0L);
+ dto.setRating(0.0);
return dto;
}
@@ -70,15 +79,16 @@ public List getEvents(Long userId, Pageable pageable) {
.map(Event::getId)
.toList();
- EventStatistics stats = getEventStatistics(eventIds);
+ Map confirmedRequests = getConfirmedRequests(eventIds);
+ Map ratings = getRatingsForEvents(eventIds);
Map userCache = new HashMap<>();
return events.stream()
.map(event -> {
EventShortDto dto = eventMapper.toShortDto(event);
- dto.setConfirmedRequests(stats.confirmedRequests().getOrDefault(event.getId(), 0L));
- dto.setViews(stats.views().getOrDefault(event.getId(), 0L));
+ dto.setConfirmedRequests(confirmedRequests.getOrDefault(event.getId(), 0L));
+ dto.setRating(ratings.getOrDefault(event.getId(), 0.0));
UserShortDto initiatorDto = userCache.computeIfAbsent(
event.getInitiatorId(),
@@ -100,13 +110,11 @@ public EventFullDto getEvent(Long userId, Long eventId, String ip) {
throw new NotFoundException("Событие c id " + eventId + " не найдено у пользователя с id " + userId);
}
- saveHit("/events/" + eventId, ip);
return buildFullDto(event);
} catch (Exception e) {
log.warn("Сервис пользователей недоступен или пользователь не найден, userId={}", userId);
Event event = getEventOrThrow(eventId);
- saveHit("/events/" + eventId, ip);
return buildFullDto(event);
}
}
@@ -171,28 +179,25 @@ public List getEventsAdmin(SearchEventAdminRequest request, Pageab
specification = specification.and(SearchEventSpecifications.addWhereStartsBefore(LocalDateTime.now()));
Page eventsPage = eventRepository.findAll(specification, pageable);
- List eventIds = eventsPage.getContent().stream()
- .map(Event::getId)
- .toList();
- if (eventIds.isEmpty()) {
+ if (eventsPage.isEmpty()) {
return List.of();
}
List events = eventsPage.getContent();
-
- List searchEventIds = events.stream()
+ List eventIds = events.stream()
.map(Event::getId)
.toList();
- EventStatistics stats = getEventStatistics(searchEventIds);
+ Map confirmedRequests = getConfirmedRequests(eventIds);
+ Map ratings = getRatingsForEvents(eventIds);
Map userCache = new HashMap<>();
return events.stream()
.map(event -> {
EventFullDto dto = eventMapper.toFullDto(event);
- dto.setConfirmedRequests(stats.confirmedRequests().getOrDefault(event.getId(), 0L));
- dto.setViews(stats.views().getOrDefault(event.getId(), 0L));
+ dto.setConfirmedRequests(confirmedRequests.getOrDefault(event.getId(), 0L));
+ dto.setRating(ratings.getOrDefault(event.getId(), 0.0));
UserShortDto initiatorDto = userCache.computeIfAbsent(
event.getInitiatorId(),
@@ -258,6 +263,7 @@ public List getEventsPublic(
specification = specification.and(SearchEventSpecifications.addWhereCategories(request.categories()));
if (request.paid() != null)
specification = specification.and(SearchEventSpecifications.isPaid(request.paid()));
+
LocalDateTime rangeStart = (request.rangeStart() == null && request.rangeEnd() == null) ?
LocalDateTime.now() : request.rangeStart();
if (rangeStart != null)
@@ -275,14 +281,15 @@ public List getEventsPublic(
.map(Event::getId)
.toList();
- EventStatistics stats = getEventStatistics(eventIds);
+ Map confirmedRequests = getConfirmedRequests(eventIds);
+ Map ratings = getRatingsForEvents(eventIds);
Map userCache = new HashMap<>();
List result = events.stream()
.map(event -> {
EventShortDto dto = eventMapper.toShortDto(event);
- dto.setConfirmedRequests(stats.confirmedRequests().getOrDefault(event.getId(), 0L));
- dto.setViews(stats.views().getOrDefault(event.getId(), 0L));
+ dto.setConfirmedRequests(confirmedRequests.getOrDefault(event.getId(), 0L));
+ dto.setRating(ratings.getOrDefault(event.getId(), 0.0));
UserShortDto initiatorDto = userCache.computeIfAbsent(
event.getInitiatorId(),
@@ -293,11 +300,9 @@ public List getEventsPublic(
})
.toList();
- saveHit("/events", ip);
-
if (SortState.VIEWS.equals(request.sort())) {
return result.stream()
- .sorted(Comparator.comparing(EventShortDto::getViews).reversed())
+ .sorted(Comparator.comparing(EventShortDto::getRating).reversed())
.toList();
} else if (SortState.EVENT_DATE.equals(request.sort())) {
return result.stream()
@@ -309,23 +314,73 @@ public List getEventsPublic(
}
@Override
- public EventFullDto getEventByIdPublic(Long eventId, String ip) {
+ public EventFullDto getEventByIdPublic(Long eventId, String ip, Long userId) {
Event event = eventRepository.findByIdNew(eventId)
.filter(ev -> ev.getState() == EventState.PUBLISHED)
.orElseThrow(() -> new NotFoundException("Событие c id " + eventId + " не найдено"));
- saveHit("/events/" + eventId, ip);
+ UserActionProto action = UserActionProto.newBuilder()
+ .setUserId(userId)
+ .setEventId(eventId)
+ .setActionType(ActionTypeProto.VIEW)
+ .setTimestamp(Timestamp.newBuilder()
+ .setSeconds(Instant.now().getEpochSecond())
+ .setNanos(Instant.now().getNano())
+ .build())
+ .build();
+
+ collectorClient.sendUserAction(action);
return buildFullDto(event);
}
+ @Override
+ public Stream getRecommendationsForUser(Long userId, int maxResults) {
+ log.info("Получение рекомендаций для пользователя userId={}, maxResults={}", userId, maxResults);
+
+ UserPredictionsRequestProto request = UserPredictionsRequestProto.newBuilder()
+ .setUserId(userId)
+ .setMaxResults(maxResults)
+ .build();
+
+ return analyzerClient.getRecommendationsForUser(request);
+ }
+
+ @Override
+ @Transactional
+ public void likeEvent(Long userId, Long eventId) {
+ log.info("Лайк события eventId={} от пользователя userId={}", eventId, userId);
+
+ Event event = getEventOrThrow(eventId);
+
+ if (event.getState() != EventState.PUBLISHED) {
+ throw new ValidationException("Нельзя лайкнуть неопубликованное событие");
+ }
+
+ if (!hasUserVisitedEvent(userId, eventId)) {
+ throw new ValidationException("Нельзя лайкнуть непосещенное мероприятие");
+ }
+
+ UserActionProto action = UserActionProto.newBuilder()
+ .setUserId(userId)
+ .setEventId(eventId)
+ .setActionType(ActionTypeProto.LIKE)
+ .setTimestamp(Timestamp.newBuilder()
+ .setSeconds(Instant.now().getEpochSecond())
+ .setNanos(Instant.now().getNano())
+ .build())
+ .build();
+
+ collectorClient.sendUserAction(action);
+ }
+
private EventFullDto buildFullDto(Event event) {
Map confirmedRequests = getConfirmedRequests(List.of(event.getId()));
- Map views = getViewsForEvents(List.of(event.getId()));
+ Double rating = getEventRating(event.getId());
EventFullDto dto = eventMapper.toFullDto(event);
dto.setConfirmedRequests(confirmedRequests.getOrDefault(event.getId(), 0L));
- dto.setViews(views.getOrDefault(event.getId(), 0L));
+ dto.setRating(rating);
UserShortDto initiatorDto = getUserShortDto(event.getInitiatorId());
dto.setInitiator(initiatorDto);
@@ -338,13 +393,48 @@ private void validateRangeStartAndEnd(LocalDateTime rangeStart, LocalDateTime ra
throw new BadRequestException("Дата начала не может быть позже даты окончания");
}
- private void saveHit(String path, String ip) {
+ private Double getEventRating(Long eventId) {
+ try {
+ InteractionsCountRequestProto request = InteractionsCountRequestProto.newBuilder()
+ .addEventId(eventId)
+ .build();
+
+ return analyzerClient.getInteractionsCount(request)
+ .findFirst()
+ .map(RecommendedEventProto::getScore)
+ .orElse(0.0);
+ } catch (Exception e) {
+ log.warn("Не удалось получить рейтинг для события {}", eventId, e);
+ return 0.0;
+ }
+ }
+
+ private Map getRatingsForEvents(List eventIds) {
+ if (eventIds.isEmpty()) return Map.of();
+
+ Map ratings = eventIds.stream()
+ .collect(Collectors.toMap(id -> id, id -> 0.0));
+
+ try {
+ InteractionsCountRequestProto request = InteractionsCountRequestProto.newBuilder()
+ .addAllEventId(eventIds)
+ .build();
+
+ analyzerClient.getInteractionsCount(request)
+ .forEach(proto -> ratings.put(proto.getEventId(), proto.getScore()));
+ } catch (Exception e) {
+ log.warn("Не удалось получить рейтинги для событий", e);
+ }
+
+ return ratings;
+ }
+
+ private boolean hasUserVisitedEvent(Long userId, Long eventId) {
try {
- CreateEndpointHitDto endpointHitDto = new CreateEndpointHitDto(
- "main-service", path, ip, LocalDateTime.now());
- statsClient.saveHit(endpointHitDto);
+ return requestClient.hasUserConfirmedRequest(userId, eventId);
} catch (Exception e) {
- log.warn("Не удалось сохранить статистику для path={}, ip={}", path, ip, e);
+ log.warn("Не удалось проверить посещение события", e);
+ return false;
}
}
@@ -374,56 +464,6 @@ private Map getConfirmedRequests(List eventIds) {
return result;
}
- private Map getViewsForEvents(List eventIds) {
- if (eventIds.isEmpty()) return Map.of();
-
- Map views = eventIds.stream()
- .collect(Collectors.toMap(id -> id, id -> 0L));
-
- try {
- List uris = eventIds.stream()
- .map(id -> "/events/" + id)
- .toList();
-
- LocalDateTime start = eventRepository.findFirstByOrderByCreatedOnAsc().getCreatedOn();
- LocalDateTime end = LocalDateTime.now();
-
- List stats = statsClient.getStats(start, end, uris, true);
-
- if (stats != null && !stats.isEmpty()) {
- stats.forEach(stat -> {
- Long eventId = getEventIdFromUri(stat.uri());
- if (eventId > -1L) {
- views.put(eventId, stat.hits());
- }
- });
- }
- } catch (Exception e) {
- log.warn("Сервис статистики недоступен, используем значение по умолчанию 0. eventIds={}", eventIds);
- }
-
- return views;
- }
-
- private Long getEventIdFromUri(String uri) {
- try {
- return Long.parseLong(uri.substring("/events".length() + 1));
- } catch (Exception e) {
- return -1L;
- }
- }
-
- private EventStatistics getEventStatistics(List eventIds) {
- if (eventIds.isEmpty()) {
- return new EventStatistics(Map.of(), Map.of());
- }
-
- Map confirmedRequests = getConfirmedRequests(eventIds);
- Map views = getViewsForEvents(eventIds);
-
- return new EventStatistics(confirmedRequests, views);
- }
-
private void checkUserExists(Long userId) {
try {
userClient.getUser(userId);
diff --git a/core/event-service/src/main/resources/schema.sql b/core/event-service/src/main/resources/schema.sql
index 2963e87..e7f0b52 100644
--- a/core/event-service/src/main/resources/schema.sql
+++ b/core/event-service/src/main/resources/schema.sql
@@ -27,7 +27,7 @@ create TABLE IF NOT EXISTS events (
participant_limit INTEGER NOT NULL,
request_moderation BOOLEAN NOT NULL,
confirmed_requests INT NOT NULL,
- views BIGINT NOT NULL
+ rating DOUBLE PRECISION NOT NULL
);
-- Создание таблицы подборок
diff --git a/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClient.java b/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClient.java
index 48c759b..f07e6df 100644
--- a/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClient.java
+++ b/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClient.java
@@ -21,4 +21,7 @@ public interface RequestClient {
@PostMapping("/events/count/confirmed")
Map getConfirmedRequestsCount(@RequestBody List eventIds);
+
+ @GetMapping("/internal/requests/user/{userId}/event/{eventId}/confirmed")
+ Boolean hasUserConfirmedRequest(@PathVariable Long userId, @PathVariable Long eventId);
}
diff --git a/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClientFallback.java b/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClientFallback.java
index 6b23c77..d51109c 100644
--- a/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClientFallback.java
+++ b/core/interaction-api/src/main/java/ru/yandex/practicum/client/RequestClientFallback.java
@@ -23,4 +23,10 @@ public Map getConfirmedRequestsCount(List eventIds) {
log.warn("Сервис запросов недоступен для batch, eventIds={}", eventIds);
return eventIds.stream().collect(Collectors.toMap(id -> id, id -> 0L));
}
+
+ @Override
+ public Boolean hasUserConfirmedRequest(Long userId, Long eventId) { // ✅ ДОБАВИТЬ
+ log.warn("Сервис запросов недоступен, userId={}, eventId={}", userId, eventId);
+ return false;
+ }
}
diff --git a/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventFullDto.java b/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventFullDto.java
index a785993..2bfdb67 100644
--- a/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventFullDto.java
+++ b/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventFullDto.java
@@ -51,5 +51,5 @@ public class EventFullDto {
String title;
- Long views;
+ Double rating;
}
diff --git a/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventShortDto.java b/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventShortDto.java
index 935db89..fc5778a 100644
--- a/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventShortDto.java
+++ b/core/interaction-api/src/main/java/ru/yandex/practicum/dto/event/EventShortDto.java
@@ -34,5 +34,5 @@ public class EventShortDto {
String title;
- Long views;
+ Double rating;
}
diff --git a/core/request-service/pom.xml b/core/request-service/pom.xml
index 5e27657..47a9a5f 100644
--- a/core/request-service/pom.xml
+++ b/core/request-service/pom.xml
@@ -55,12 +55,6 @@
${project.version}
-
- ru.yandex.practicum
- stats-dto
- ${project.version}
-
-
org.projectlombok
lombok
@@ -90,7 +84,6 @@
org.springframework.retry
spring-retry
- 2.0.5
diff --git a/core/request-service/src/main/java/ru/yandex/practicum/controller/InternalRequestController.java b/core/request-service/src/main/java/ru/yandex/practicum/controller/InternalRequestController.java
index 49c7d68..f0e2613 100644
--- a/core/request-service/src/main/java/ru/yandex/practicum/controller/InternalRequestController.java
+++ b/core/request-service/src/main/java/ru/yandex/practicum/controller/InternalRequestController.java
@@ -16,4 +16,10 @@ public class InternalRequestController {
public Long countByStatus(@PathVariable Long eventId, @PathVariable RequestStatus status) {
return requestRepository.countByEventIdAndStatus(eventId, status);
}
+
+ @GetMapping("/user/{userId}/event/{eventId}/confirmed")
+ public Boolean hasUserConfirmedRequest(@PathVariable Long userId, @PathVariable Long eventId) {
+ return requestRepository.existsByRequesterIdAndEventIdAndStatus(
+ userId, eventId, RequestStatus.CONFIRMED);
+ }
}
diff --git a/core/request-service/src/main/java/ru/yandex/practicum/repository/RequestRepository.java b/core/request-service/src/main/java/ru/yandex/practicum/repository/RequestRepository.java
index fe99db6..b99e98d 100644
--- a/core/request-service/src/main/java/ru/yandex/practicum/repository/RequestRepository.java
+++ b/core/request-service/src/main/java/ru/yandex/practicum/repository/RequestRepository.java
@@ -30,4 +30,6 @@ public interface RequestRepository extends JpaRepository {
"FROM Request r " +
"WHERE r.eventId IN :eventIds AND r.status = 'CONFIRMED' GROUP BY r.eventId")
List
-
- ru.yandex.practicum
- stats-dto
- ${project.version}
-
-
org.projectlombok
lombok
@@ -90,7 +84,6 @@
org.springframework.retry
spring-retry
- 2.0.5
diff --git a/docker-compose.yml b/docker-compose.yml
index 17c6317..a42991c 100644
--- a/docker-compose.yml
+++ b/docker-compose.yml
@@ -10,7 +10,7 @@ services:
POSTGRES_PASSWORD: stat_password
POSTGRES_DB: ewm_stats_db
volumes:
- - ./stats/stats-server/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
+ - ./stats/analyzer/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
healthcheck:
test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB} -p 5432" ]
@@ -32,8 +32,40 @@ services:
volumes:
- ./core/event-service/src/main/resources/schema.sql:/docker-entrypoint-initdb.d/01-schema.sql
healthcheck:
- test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB} -p 5432" ]
- interval: 10s
- timeout: 5s
- retries: 5
- start_period: 10s
\ No newline at end of file
+ test: [ "CMD-SHELL", "pg_isready -U $${POSTGRES_USER} -d $${POSTGRES_DB} -p 5432" ]
+ interval: 10s
+ timeout: 5s
+ retries: 5
+ start_period: 10s
+
+ kafka:
+ image: confluentinc/confluent-local:7.4.3
+ hostname: kafka
+ container_name: kafka
+ ports:
+ - "9092:9092" # for client connections
+ - "9101:9101" # JMX
+ restart: unless-stopped
+ environment:
+ KAFKA_NODE_ID: 1
+ KAFKA_ADVERTISED_LISTENERS: 'PLAINTEXT://kafka:29092,PLAINTEXT_HOST://localhost:9092'
+ KAFKA_JMX_PORT: 9101
+ KAFKA_JMX_HOSTNAME: localhost
+ KAFKA_PROCESS_ROLES: 'broker,controller'
+ KAFKA_CONTROLLER_QUORUM_VOTERS: '1@kafka:29093'
+ KAFKA_LISTENERS: 'PLAINTEXT://kafka:29092,CONTROLLER://kafka:29093,PLAINTEXT_HOST://0.0.0.0:9092'
+ CLUSTER_ID: 'K0EA9p0yEe6MkAAAAkKsEg'
+
+ kafka-init-topics:
+ image: confluentinc/confluent-local:7.4.3
+ container_name: kafka-init-topics
+ depends_on:
+ - kafka
+ command: "bash -c \
+ 'kafka-topics --create --topic stats.user-actions.v1 \
+ --partitions 1 --replication-factor 1 --if-not-exists \
+ --bootstrap-server kafka:29092 && \
+ kafka-topics --create --topic stats.events-similarity.v1 \
+ --partitions 1 --replication-factor 1 --if-not-exists \
+ --bootstrap-server kafka:29092'"
+ init: true
\ No newline at end of file
diff --git a/execution-report.txt b/execution-report.txt
new file mode 100644
index 0000000..c27a128
--- /dev/null
+++ b/execution-report.txt
@@ -0,0 +1,4230 @@
+--------------------------------
+Лог выполнения от 12/02/2026 - 15:36:03.736 MSK
+--------------------------------
+12/02/2026 - 15:36:03.746 MSK -- [Trace]: Сгенерирован следующий набор событий о действиях пользователей:
+{ user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T12:36:03.745101700Z }
+{ user: 7, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T12:39:18.012101700Z }
+{ user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T12:45:38.858101700Z }
+{ user: 6, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T12:48:22.451101700Z }
+{ user: 1, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T12:57:45.823101700Z }
+{ user: 13, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T13:04:19.055101700Z }
+{ user: 8, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T13:07:28.314101700Z }
+{ user: 3, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T13:10:36.390101700Z }
+{ user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T13:18:39.057101700Z }
+{ user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T13:22:17.975101700Z }
+{ user: 3, event: 14, type: ACTION_REGISTER, timestamp: 2026-02-09T13:27:55.313101700Z }
+{ user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T13:33:18.046101700Z }
+{ user: 10, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T13:36:54.532101700Z }
+{ user: 1, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T13:45:29.375101700Z }
+{ user: 10, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T13:48:25.304101700Z }
+{ user: 4, event: 12, type: ACTION_REGISTER, timestamp: 2026-02-09T13:56:31.696101700Z }
+{ user: 3, event: 11, type: ACTION_REGISTER, timestamp: 2026-02-09T14:05:21.197101700Z }
+{ user: 5, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T14:09:53.924101700Z }
+{ user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T14:16:57.666101700Z }
+{ user: 10, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T14:19:41.333101700Z }
+{ user: 1, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T14:25:47.479101700Z }
+{ user: 12, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T14:33:09.183101700Z }
+{ user: 8, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T14:39:42.401101700Z }
+{ user: 7, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T14:42:38.938101700Z }
+{ user: 9, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T14:49:15.054101700Z }
+{ user: 13, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T14:58:32.465101700Z }
+{ user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T15:04:13.477101700Z }
+{ user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T15:09:29.696101700Z }
+{ user: 7, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T15:14:06.959101700Z }
+{ user: 6, event: 13, type: ACTION_REGISTER, timestamp: 2026-02-09T15:22:27.353101700Z }
+{ user: 2, event: 13, type: ACTION_REGISTER, timestamp: 2026-02-09T15:26:10.833101700Z }
+{ user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:34:47.078101700Z }
+{ user: 13, event: 11, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:59.971101700Z }
+{ user: 6, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T15:42:02.612101700Z }
+{ user: 7, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T15:48:33.821101700Z }
+{ user: 3, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:27.903101700Z }
+{ user: 6, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:59:45.809101700Z }
+{ user: 10, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:59.341101700Z }
+{ user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T16:11:32.690101700Z }
+{ user: 11, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T16:20:35.821101700Z }
+{ user: 12, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T16:26:44.023101700Z }
+{ user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:34:24.192101700Z }
+{ user: 10, event: 4, type: ACTION_LIKE, timestamp: 2026-02-09T16:35:48.130101700Z }
+{ user: 3, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T16:38:43.786101700Z }
+{ user: 9, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T16:45:09.253101700Z }
+{ user: 1, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:17.755101700Z }
+{ user: 5, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T16:54:23.642101700Z }
+{ user: 13, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T16:56:58.958101700Z }
+{ user: 12, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T17:03:17.852101700Z }
+{ user: 3, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T17:12:44.196101700Z }
+{ user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T17:16:13.204101700Z }
+{ user: 9, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T17:21:57.190101700Z }
+{ user: 12, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:09.151101700Z }
+{ user: 7, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T17:33:24.620101700Z }
+{ user: 12, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T17:38:34.743101700Z }
+{ user: 7, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T17:41:16.647101700Z }
+{ user: 10, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:30.693101700Z }
+{ user: 5, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T17:47:10.257101700Z }
+{ user: 12, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:56:37.585101700Z }
+{ user: 7, event: 11, type: ACTION_REGISTER, timestamp: 2026-02-09T18:02:34.454101700Z }
+{ user: 13, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T18:10:14.670101700Z }
+{ user: 4, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T18:19:33.717101700Z }
+{ user: 4, event: 11, type: ACTION_VIEW, timestamp: 2026-02-09T18:25:57.901101700Z }
+{ user: 10, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:34:34.154101700Z }
+{ user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T18:39:23.703101700Z }
+{ user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T18:44:01.845101700Z }
+{ user: 8, event: 12, type: ACTION_REGISTER, timestamp: 2026-02-09T18:51:57.721101700Z }
+{ user: 6, event: 14, type: ACTION_REGISTER, timestamp: 2026-02-09T18:59:49.806101700Z }
+{ user: 10, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:03:07.288101700Z }
+{ user: 11, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T19:10:05.393101700Z }
+{ user: 1, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:17:46.180101700Z }
+{ user: 1, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T19:26:15.202101700Z }
+12/02/2026 - 15:36:03.746 MSK -- Начинаю тестирование. Сгенерировано 72 событий
+12/02/2026 - 15:36:03.746 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:03.746 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T12:36:03.745101700Z }
+12/02/2026 - 15:36:04.359 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.364 MSK -- Верификация для события закончена: { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T12:36:03.745101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.364 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.364 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T12:39:18.012101700Z }
+12/02/2026 - 15:36:04.364 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.365 MSK -- Верификация для события закончена: { user: 7, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T12:39:18.012101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.365 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.365 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T12:45:38.858101700Z }
+12/02/2026 - 15:36:04.365 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.366 MSK -- Верификация для события закончена: { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T12:45:38.858101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.366 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.366 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T12:48:22.451101700Z }
+12/02/2026 - 15:36:04.366 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.367 MSK -- Верификация для события закончена: { user: 6, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T12:48:22.451101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.367 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.367 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T12:57:45.823101700Z }
+12/02/2026 - 15:36:04.367 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.368 MSK -- Верификация для события закончена: { user: 1, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T12:57:45.823101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.368 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.368 MSK -- Отправляю событие о действии пользователя: { user: 13, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T13:04:19.055101700Z }
+12/02/2026 - 15:36:04.368 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.368 MSK -- Верификация для события закончена: { user: 13, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T13:04:19.055101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.368 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.369 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T13:07:28.314101700Z }
+12/02/2026 - 15:36:04.369 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.371 MSK -- Верификация для события закончена: { user: 8, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T13:07:28.314101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.371 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.371 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T13:10:36.390101700Z }
+12/02/2026 - 15:36:04.371 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.372 MSK -- Верификация для события закончена: { user: 3, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T13:10:36.390101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.372 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.372 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T13:18:39.057101700Z }
+12/02/2026 - 15:36:04.372 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.373 MSK -- Верификация для события закончена: { user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T13:18:39.057101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.373 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.373 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T13:22:17.975101700Z }
+12/02/2026 - 15:36:04.373 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.374 MSK -- Верификация для события закончена: { user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T13:22:17.975101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.374 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.374 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 14, type: ACTION_REGISTER, timestamp: 2026-02-09T13:27:55.313101700Z }
+12/02/2026 - 15:36:04.374 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.375 MSK -- Верификация для события закончена: { user: 3, event: 14, type: ACTION_REGISTER, timestamp: 2026-02-09T13:27:55.313101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.375 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.375 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T13:33:18.046101700Z }
+12/02/2026 - 15:36:04.375 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.375 MSK -- Верификация для события закончена: { user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T13:33:18.046101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.375 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.375 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T13:36:54.532101700Z }
+12/02/2026 - 15:36:04.375 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.375 MSK -- Верификация для события закончена: { user: 10, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T13:36:54.532101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.375 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.375 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T13:45:29.375101700Z }
+12/02/2026 - 15:36:04.375 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.375 MSK -- Верификация для события закончена: { user: 1, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T13:45:29.375101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.375 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.375 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T13:48:25.304101700Z }
+12/02/2026 - 15:36:04.379 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.379 MSK -- Верификация для события закончена: { user: 10, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T13:48:25.304101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.379 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.379 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 12, type: ACTION_REGISTER, timestamp: 2026-02-09T13:56:31.696101700Z }
+12/02/2026 - 15:36:04.379 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.380 MSK -- Верификация для события закончена: { user: 4, event: 12, type: ACTION_REGISTER, timestamp: 2026-02-09T13:56:31.696101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.380 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.380 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 11, type: ACTION_REGISTER, timestamp: 2026-02-09T14:05:21.197101700Z }
+12/02/2026 - 15:36:04.380 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.381 MSK -- Верификация для события закончена: { user: 3, event: 11, type: ACTION_REGISTER, timestamp: 2026-02-09T14:05:21.197101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.381 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.381 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T14:09:53.924101700Z }
+12/02/2026 - 15:36:04.381 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.381 MSK -- Верификация для события закончена: { user: 5, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T14:09:53.924101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.381 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.382 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T14:16:57.666101700Z }
+12/02/2026 - 15:36:04.382 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.382 MSK -- Верификация для события закончена: { user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T14:16:57.666101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.382 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.382 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T14:19:41.333101700Z }
+12/02/2026 - 15:36:04.382 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.383 MSK -- Верификация для события закончена: { user: 10, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T14:19:41.333101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.383 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.383 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T14:25:47.479101700Z }
+12/02/2026 - 15:36:04.383 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.384 MSK -- Верификация для события закончена: { user: 1, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T14:25:47.479101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.384 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.384 MSK -- Отправляю событие о действии пользователя: { user: 12, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T14:33:09.183101700Z }
+12/02/2026 - 15:36:04.384 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.385 MSK -- Верификация для события закончена: { user: 12, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T14:33:09.183101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.385 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.385 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T14:39:42.401101700Z }
+12/02/2026 - 15:36:04.385 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.385 MSK -- Верификация для события закончена: { user: 8, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T14:39:42.401101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.385 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.385 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T14:42:38.938101700Z }
+12/02/2026 - 15:36:04.385 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.386 MSK -- Верификация для события закончена: { user: 7, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T14:42:38.938101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.386 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.386 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T14:49:15.054101700Z }
+12/02/2026 - 15:36:04.386 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.387 MSK -- Верификация для события закончена: { user: 9, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T14:49:15.054101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.387 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.387 MSK -- Отправляю событие о действии пользователя: { user: 13, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T14:58:32.465101700Z }
+12/02/2026 - 15:36:04.387 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.388 MSK -- Верификация для события закончена: { user: 13, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T14:58:32.465101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.388 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.388 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T15:04:13.477101700Z }
+12/02/2026 - 15:36:04.388 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.391 MSK -- Верификация для события закончена: { user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T15:04:13.477101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.391 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.391 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T15:09:29.696101700Z }
+12/02/2026 - 15:36:04.392 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.393 MSK -- Верификация для события закончена: { user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T15:09:29.696101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.393 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.393 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T15:14:06.959101700Z }
+12/02/2026 - 15:36:04.393 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.394 MSK -- Верификация для события закончена: { user: 7, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T15:14:06.959101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.394 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.394 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 13, type: ACTION_REGISTER, timestamp: 2026-02-09T15:22:27.353101700Z }
+12/02/2026 - 15:36:04.394 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.395 MSK -- Верификация для события закончена: { user: 6, event: 13, type: ACTION_REGISTER, timestamp: 2026-02-09T15:22:27.353101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.395 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.395 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 13, type: ACTION_REGISTER, timestamp: 2026-02-09T15:26:10.833101700Z }
+12/02/2026 - 15:36:04.395 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.396 MSK -- Верификация для события закончена: { user: 2, event: 13, type: ACTION_REGISTER, timestamp: 2026-02-09T15:26:10.833101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.396 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.396 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:34:47.078101700Z }
+12/02/2026 - 15:36:04.396 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.396 MSK -- Верификация для события закончена: { user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:34:47.078101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.396 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.396 MSK -- Отправляю событие о действии пользователя: { user: 13, event: 11, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:59.971101700Z }
+12/02/2026 - 15:36:04.397 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.397 MSK -- Верификация для события закончена: { user: 13, event: 11, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:59.971101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.397 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.397 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T15:42:02.612101700Z }
+12/02/2026 - 15:36:04.397 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.397 MSK -- Верификация для события закончена: { user: 6, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T15:42:02.612101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.397 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.397 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T15:48:33.821101700Z }
+12/02/2026 - 15:36:04.397 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.397 MSK -- Верификация для события закончена: { user: 7, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T15:48:33.821101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.397 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.397 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:27.903101700Z }
+12/02/2026 - 15:36:04.397 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.397 MSK -- Верификация для события закончена: { user: 3, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:27.903101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.397 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.397 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:59:45.809101700Z }
+12/02/2026 - 15:36:04.401 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.401 MSK -- Верификация для события закончена: { user: 6, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:59:45.809101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.401 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.401 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:59.341101700Z }
+12/02/2026 - 15:36:04.402 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.402 MSK -- Верификация для события закончена: { user: 10, event: 14, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:59.341101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.402 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.402 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T16:11:32.690101700Z }
+12/02/2026 - 15:36:04.402 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.402 MSK -- Верификация для события закончена: { user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T16:11:32.690101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.402 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.402 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T16:20:35.821101700Z }
+12/02/2026 - 15:36:04.402 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.403 MSK -- Верификация для события закончена: { user: 11, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T16:20:35.821101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.403 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.403 MSK -- Отправляю событие о действии пользователя: { user: 12, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T16:26:44.023101700Z }
+12/02/2026 - 15:36:04.403 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.403 MSK -- Верификация для события закончена: { user: 12, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T16:26:44.023101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.403 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.403 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:34:24.192101700Z }
+12/02/2026 - 15:36:04.404 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.404 MSK -- Верификация для события закончена: { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:34:24.192101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.404 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.404 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 4, type: ACTION_LIKE, timestamp: 2026-02-09T16:35:48.130101700Z }
+12/02/2026 - 15:36:04.404 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.405 MSK -- Верификация для события закончена: { user: 10, event: 4, type: ACTION_LIKE, timestamp: 2026-02-09T16:35:48.130101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.405 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.405 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T16:38:43.786101700Z }
+12/02/2026 - 15:36:04.405 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.405 MSK -- Верификация для события закончена: { user: 3, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T16:38:43.786101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.405 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.405 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T16:45:09.253101700Z }
+12/02/2026 - 15:36:04.405 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.406 MSK -- Верификация для события закончена: { user: 9, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T16:45:09.253101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.406 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.406 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:17.755101700Z }
+12/02/2026 - 15:36:04.406 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.406 MSK -- Верификация для события закончена: { user: 1, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:17.755101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.406 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.406 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T16:54:23.642101700Z }
+12/02/2026 - 15:36:04.407 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.407 MSK -- Верификация для события закончена: { user: 5, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T16:54:23.642101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.407 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.407 MSK -- Отправляю событие о действии пользователя: { user: 13, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T16:56:58.958101700Z }
+12/02/2026 - 15:36:04.407 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.407 MSK -- Верификация для события закончена: { user: 13, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T16:56:58.958101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.407 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.407 MSK -- Отправляю событие о действии пользователя: { user: 12, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T17:03:17.852101700Z }
+12/02/2026 - 15:36:04.409 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.409 MSK -- Верификация для события закончена: { user: 12, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T17:03:17.852101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.409 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.409 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T17:12:44.196101700Z }
+12/02/2026 - 15:36:04.409 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.410 MSK -- Верификация для события закончена: { user: 3, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T17:12:44.196101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.410 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.410 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T17:16:13.204101700Z }
+12/02/2026 - 15:36:04.410 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.410 MSK -- Верификация для события закончена: { user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T17:16:13.204101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.410 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.410 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T17:21:57.190101700Z }
+12/02/2026 - 15:36:04.410 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.412 MSK -- Верификация для события закончена: { user: 9, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T17:21:57.190101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.412 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.412 MSK -- Отправляю событие о действии пользователя: { user: 12, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:09.151101700Z }
+12/02/2026 - 15:36:04.412 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.413 MSK -- Верификация для события закончена: { user: 12, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:09.151101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.413 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.413 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T17:33:24.620101700Z }
+12/02/2026 - 15:36:04.413 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.413 MSK -- Верификация для события закончена: { user: 7, event: 13, type: ACTION_VIEW, timestamp: 2026-02-09T17:33:24.620101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.413 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.413 MSK -- Отправляю событие о действии пользователя: { user: 12, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T17:38:34.743101700Z }
+12/02/2026 - 15:36:04.414 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.414 MSK -- Верификация для события закончена: { user: 12, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T17:38:34.743101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.414 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.414 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T17:41:16.647101700Z }
+12/02/2026 - 15:36:04.414 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.414 MSK -- Верификация для события закончена: { user: 7, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T17:41:16.647101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.414 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.414 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:30.693101700Z }
+12/02/2026 - 15:36:04.415 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.415 MSK -- Верификация для события закончена: { user: 10, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:30.693101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.415 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.415 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T17:47:10.257101700Z }
+12/02/2026 - 15:36:04.415 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.415 MSK -- Верификация для события закончена: { user: 5, event: 12, type: ACTION_VIEW, timestamp: 2026-02-09T17:47:10.257101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.415 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.415 MSK -- Отправляю событие о действии пользователя: { user: 12, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:56:37.585101700Z }
+12/02/2026 - 15:36:04.415 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.416 MSK -- Верификация для события закончена: { user: 12, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:56:37.585101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.416 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.416 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 11, type: ACTION_REGISTER, timestamp: 2026-02-09T18:02:34.454101700Z }
+12/02/2026 - 15:36:04.416 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.416 MSK -- Верификация для события закончена: { user: 7, event: 11, type: ACTION_REGISTER, timestamp: 2026-02-09T18:02:34.454101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.417 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.417 MSK -- Отправляю событие о действии пользователя: { user: 13, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T18:10:14.670101700Z }
+12/02/2026 - 15:36:04.417 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.417 MSK -- Верификация для события закончена: { user: 13, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T18:10:14.670101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.417 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.417 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T18:19:33.717101700Z }
+12/02/2026 - 15:36:04.417 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.418 MSK -- Верификация для события закончена: { user: 4, event: 1, type: ACTION_REGISTER, timestamp: 2026-02-09T18:19:33.717101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.418 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.418 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 11, type: ACTION_VIEW, timestamp: 2026-02-09T18:25:57.901101700Z }
+12/02/2026 - 15:36:04.418 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.418 MSK -- Верификация для события закончена: { user: 4, event: 11, type: ACTION_VIEW, timestamp: 2026-02-09T18:25:57.901101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.418 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.418 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:34:34.154101700Z }
+12/02/2026 - 15:36:04.418 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.418 MSK -- Верификация для события закончена: { user: 10, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:34:34.154101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.418 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.418 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T18:39:23.703101700Z }
+12/02/2026 - 15:36:04.421 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.421 MSK -- Верификация для события закончена: { user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T18:39:23.703101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.421 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.421 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T18:44:01.845101700Z }
+12/02/2026 - 15:36:04.421 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.421 MSK -- Верификация для события закончена: { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T18:44:01.845101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.421 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.421 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 12, type: ACTION_REGISTER, timestamp: 2026-02-09T18:51:57.721101700Z }
+12/02/2026 - 15:36:04.421 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.421 MSK -- Верификация для события закончена: { user: 8, event: 12, type: ACTION_REGISTER, timestamp: 2026-02-09T18:51:57.721101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.421 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.421 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 14, type: ACTION_REGISTER, timestamp: 2026-02-09T18:59:49.806101700Z }
+12/02/2026 - 15:36:04.421 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.423 MSK -- Верификация для события закончена: { user: 6, event: 14, type: ACTION_REGISTER, timestamp: 2026-02-09T18:59:49.806101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.423 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.423 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:03:07.288101700Z }
+12/02/2026 - 15:36:04.423 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.423 MSK -- Верификация для события закончена: { user: 10, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:03:07.288101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.423 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.423 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T19:10:05.393101700Z }
+12/02/2026 - 15:36:04.423 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.424 MSK -- Верификация для события закончена: { user: 11, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T19:10:05.393101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.424 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.424 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:17:46.180101700Z }
+12/02/2026 - 15:36:04.424 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.424 MSK -- Верификация для события закончена: { user: 1, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:17:46.180101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.424 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 15:36:04.424 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T19:26:15.202101700Z }
+12/02/2026 - 15:36:04.424 MSK -- [Ошибка]: Ошибка при отправке события: UNAVAILABLE: No servers found for collector
+Совет:
+Проверьте сервис Collector - удостоверьтесь, что он реализует gRPC сервис, а также корректно принимает сообщения о действиях пользователей и сохраняет их в топик Kafka - stats.user-actions.v1
+Убедитесь, что сервис Collector доступен как collector
+Убедитесь, что jar-файл содержит корректные метаданные в файле MANIFEST.MF (подключите spring-boot-maven-plugin)
+12/02/2026 - 15:36:04.424 MSK -- Верификация для события закончена: { user: 1, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T19:26:15.202101700Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 15:36:04.424 MSK -- Завершаю работу приложения
+--------------------------------
+Обнаружено 72 ошибок.
+--------------------------------
+Лог выполнения от 12/02/2026 - 17:30:03.223 MSK
+--------------------------------
+12/02/2026 - 17:30:03.244 MSK -- [Trace]: Сгенерирован следующий набор событий о действиях пользователей:
+{ user: 9, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T14:30:03.238680200Z }
+{ user: 1, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T14:35:02.716680200Z }
+{ user: 3, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:43:43.102680200Z }
+{ user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T14:51:12.393680200Z }
+{ user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:52:16.424680200Z }
+{ user: 2, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T14:58:28.413680200Z }
+{ user: 6, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T15:06:06.333680200Z }
+{ user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:10:30.925680200Z }
+{ user: 8, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T15:18:07.935680200Z }
+{ user: 3, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:25:36.228680200Z }
+{ user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:28:41.523680200Z }
+{ user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:25.789680200Z }
+{ user: 4, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T15:36:42.713680200Z }
+{ user: 3, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T15:41:23.814680200Z }
+{ user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T15:49:08.123680200Z }
+{ user: 11, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:50.232680200Z }
+{ user: 5, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:11.995680200Z }
+{ user: 9, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T16:12:09.298680200Z }
+{ user: 4, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T16:21:41.084680200Z }
+{ user: 8, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T16:30:55.223680200Z }
+{ user: 4, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T16:36:44.542680200Z }
+{ user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:42:23.074680200Z }
+{ user: 2, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T16:47:23.285680200Z }
+{ user: 4, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T16:49:36.229680200Z }
+{ user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:52.256680200Z }
+{ user: 4, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:01:12.667680200Z }
+{ user: 4, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:11:04.900680200Z }
+{ user: 9, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:20:05.196680200Z }
+{ user: 11, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:24:17.062680200Z }
+{ user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:23.549680200Z }
+{ user: 9, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T17:32:33.920680200Z }
+{ user: 1, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:37:37.444680200Z }
+{ user: 9, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:15.055680200Z }
+{ user: 9, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:44:04.273680200Z }
+{ user: 1, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T17:45:11.796680200Z }
+{ user: 5, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:49:08.622680200Z }
+{ user: 5, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T17:59:06.304680200Z }
+{ user: 4, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T18:03:46.480680200Z }
+{ user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:06:38.997680200Z }
+{ user: 11, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T18:09:19.315680200Z }
+{ user: 3, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T18:11:30.829680200Z }
+{ user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T18:21:29.889680200Z }
+{ user: 4, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T18:29:28.868680200Z }
+{ user: 4, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:32:36.340680200Z }
+{ user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T18:37:19.058680200Z }
+{ user: 1, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T18:43:18.738680200Z }
+{ user: 9, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:50:45.320680200Z }
+{ user: 4, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T18:55:12.382680200Z }
+{ user: 11, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T19:03:38.399680200Z }
+{ user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T19:11:21.501680200Z }
+{ user: 7, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T19:16:22.963680200Z }
+{ user: 2, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T19:20:43.645680200Z }
+{ user: 1, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T19:29:27.872680200Z }
+{ user: 2, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T19:34:50.417680200Z }
+{ user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T19:42:10.615680200Z }
+{ user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T19:46:00.074680200Z }
+{ user: 8, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:48:05.813680200Z }
+{ user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:52:42.229680200Z }
+{ user: 4, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T19:57:52.491680200Z }
+{ user: 6, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T20:04:20.847680200Z }
+{ user: 2, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T20:06:33.503680200Z }
+{ user: 6, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T20:08:27.681680200Z }
+{ user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T20:12:33.305680200Z }
+{ user: 7, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:16:27.692680200Z }
+{ user: 3, event: 8, type: ACTION_LIKE, timestamp: 2026-02-09T20:24:33.573680200Z }
+{ user: 9, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T20:30:45.219680200Z }
+{ user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T20:37:30.578680200Z }
+{ user: 2, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T20:46:48.533680200Z }
+{ user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T20:52:43.779680200Z }
+{ user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:59:25.513680200Z }
+{ user: 1, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T21:09:08.538680200Z }
+{ user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:12:56.646680200Z }
+{ user: 7, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T21:20:04.152680200Z }
+{ user: 11, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:29:08.128680200Z }
+{ user: 7, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T21:34:13.552680200Z }
+{ user: 4, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T21:38:14.641680200Z }
+{ user: 2, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T21:43:10.859680200Z }
+{ user: 9, event: 6, type: ACTION_LIKE, timestamp: 2026-02-09T21:44:13.482680200Z }
+{ user: 11, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T21:48:01.621680200Z }
+{ user: 5, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T21:54:16.066680200Z }
+{ user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T21:56:09.107680200Z }
+{ user: 6, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T22:05:01.835680200Z }
+12/02/2026 - 17:30:03.249 MSK -- Начинаю тестирование. Сгенерировано 82 событий
+12/02/2026 - 17:30:03.249 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:03.249 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T14:30:03.238680200Z }
+12/02/2026 - 17:30:04.731 MSK -- [Trace]: Событие отправлено: { user: 9, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T14:30:03.238680200Z }
+12/02/2026 - 17:30:04.731 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T14:30:03.238680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:05.087 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 9, type: REGISTER, timestamp: 2026-02-09T14:30:03.238Z }
+12/02/2026 - 17:30:05.088 MSK -- Событие REGISTER пользователя 9 с мероприятием 9 - проверено
+--------------------------------
+12/02/2026 - 17:30:05.090 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:05.091 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [9]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:05.092 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:06.102 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:06.113 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [9]
+12/02/2026 - 17:30:06.293 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 9, score: 0.80 }
+12/02/2026 - 17:30:06.293 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 9, score: 0.80 }
+12/02/2026 - 17:30:06.293 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:06.293 MSK -- Верификация для события закончена: { user: 9, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T14:30:03.238680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:06.293 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:06.293 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T14:35:02.716680200Z }
+12/02/2026 - 17:30:06.299 MSK -- [Trace]: Событие отправлено: { user: 1, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T14:35:02.716680200Z }
+12/02/2026 - 17:30:06.299 MSK -- Ожидаю 10 секунд получения события { user: 1, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T14:35:02.716680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:06.306 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 1, event: 10, type: REGISTER, timestamp: 2026-02-09T14:35:02.716Z }
+12/02/2026 - 17:30:06.306 MSK -- Событие REGISTER пользователя 1 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:06.306 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:06.306 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [10]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:06.306 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:07.318 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:07.318 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:07.326 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 0.80 }
+12/02/2026 - 17:30:07.326 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 0.80 }
+12/02/2026 - 17:30:07.326 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:07.326 MSK -- Верификация для события закончена: { user: 1, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T14:35:02.716680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:07.326 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:07.326 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:43:43.102680200Z }
+12/02/2026 - 17:30:07.330 MSK -- [Trace]: Событие отправлено: { user: 3, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:43:43.102680200Z }
+12/02/2026 - 17:30:07.330 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:43:43.102680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:07.335 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 4, type: REGISTER, timestamp: 2026-02-09T14:43:43.102Z }
+12/02/2026 - 17:30:07.335 MSK -- Событие REGISTER пользователя 3 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:30:07.335 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:07.335 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [4]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:07.336 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:08.351 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:08.351 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:30:08.360 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 0.80 }
+12/02/2026 - 17:30:08.360 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 0.80 }
+12/02/2026 - 17:30:08.360 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:08.360 MSK -- Верификация для события закончена: { user: 3, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:43:43.102680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:08.360 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:08.360 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T14:51:12.393680200Z }
+12/02/2026 - 17:30:08.365 MSK -- [Trace]: Событие отправлено: { user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T14:51:12.393680200Z }
+12/02/2026 - 17:30:08.365 MSK -- Ожидаю 10 секунд получения события { user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T14:51:12.393680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:08.370 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 6, event: 5, type: VIEW, timestamp: 2026-02-09T14:51:12.393Z }
+12/02/2026 - 17:30:08.370 MSK -- Событие VIEW пользователя 6 с мероприятием 5 - проверено
+--------------------------------
+12/02/2026 - 17:30:08.370 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:08.370 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [5]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:08.370 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:09.377 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:09.377 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [5]
+12/02/2026 - 17:30:09.384 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 5, score: 0.40 }
+12/02/2026 - 17:30:09.384 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 5, score: 0.40 }
+12/02/2026 - 17:30:09.384 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:09.384 MSK -- Верификация для события закончена: { user: 6, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T14:51:12.393680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:09.384 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:09.384 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:52:16.424680200Z }
+12/02/2026 - 17:30:09.387 MSK -- [Trace]: Событие отправлено: { user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:52:16.424680200Z }
+12/02/2026 - 17:30:09.387 MSK -- Ожидаю 10 секунд получения события { user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:52:16.424680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:09.394 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 10, event: 4, type: REGISTER, timestamp: 2026-02-09T14:52:16.424Z }
+12/02/2026 - 17:30:09.394 MSK -- Событие REGISTER пользователя 10 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:30:09.394 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [10] для мероприятия [4]
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [5] для пользователя [10]
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [9] для пользователя [10]
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [10] для пользователя [10]
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:09.404 MSK -- [Trace]: В результате действия [REGISTER] пользователя [10] с мероприятием [4] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:09.404 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:10.410 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:10.410 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:30:10.426 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 1.60 }
+12/02/2026 - 17:30:10.426 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 1.60 }
+12/02/2026 - 17:30:10.426 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:10.426 MSK -- Верификация для события закончена: { user: 10, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T14:52:16.424680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:10.426 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:10.426 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T14:58:28.413680200Z }
+12/02/2026 - 17:30:10.433 MSK -- [Trace]: Событие отправлено: { user: 2, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T14:58:28.413680200Z }
+12/02/2026 - 17:30:10.434 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T14:58:28.413680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:10.449 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 2, type: REGISTER, timestamp: 2026-02-09T14:58:28.413Z }
+12/02/2026 - 17:30:10.449 MSK -- Событие REGISTER пользователя 2 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:30:10.449 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:10.450 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [2]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:10.450 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:11.462 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:11.462 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:30:11.468 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 0.80 }
+12/02/2026 - 17:30:11.468 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 0.80 }
+12/02/2026 - 17:30:11.468 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:11.468 MSK -- Верификация для события закончена: { user: 2, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T14:58:28.413680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:11.468 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:11.468 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T15:06:06.333680200Z }
+12/02/2026 - 17:30:11.473 MSK -- [Trace]: Событие отправлено: { user: 6, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T15:06:06.333680200Z }
+12/02/2026 - 17:30:11.473 MSK -- Ожидаю 10 секунд получения события { user: 6, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T15:06:06.333680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:11.480 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 6, event: 1, type: VIEW, timestamp: 2026-02-09T15:06:06.333Z }
+12/02/2026 - 17:30:11.481 MSK -- Событие VIEW пользователя 6 с мероприятием 1 - проверено
+--------------------------------
+12/02/2026 - 17:30:11.481 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:11.481 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [1]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:11.481 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [5] равен [1,000000] (min=[0,400000], norm1=[0,632456], norm2=[0,632456])
+12/02/2026 - 17:30:11.484 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:11.540 MSK -- Событие { eventA: 1, eventB: 5, score: 1.00, timestamp: 2026-02-12T14:30:11.482Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:12.564 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:12.564 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [1]
+12/02/2026 - 17:30:12.573 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 1, score: 0.40 }
+12/02/2026 - 17:30:12.573 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 1, score: 0.40 }
+12/02/2026 - 17:30:12.573 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:12.573 MSK -- Верификация для события закончена: { user: 6, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T15:06:06.333680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:12.573 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:12.573 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:10:30.925680200Z }
+12/02/2026 - 17:30:12.577 MSK -- [Trace]: Событие отправлено: { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:10:30.925680200Z }
+12/02/2026 - 17:30:12.578 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:10:30.925680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:12.586 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 7, type: VIEW, timestamp: 2026-02-09T15:10:30.925Z }
+12/02/2026 - 17:30:12.586 MSK -- Событие VIEW пользователя 3 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:12.586 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:12.586 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [7]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:12.586 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [4] равен [0,500000] (min=[0,400000], norm1=[0,632456], norm2=[1,264911])
+12/02/2026 - 17:30:12.586 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:12.593 MSK -- Событие { eventA: 4, eventB: 7, score: 0.50, timestamp: 2026-02-12T14:30:12.581Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:13.599 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:13.599 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:13.606 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 0.40 }
+12/02/2026 - 17:30:13.606 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 0.40 }
+12/02/2026 - 17:30:13.606 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:13.606 MSK -- Верификация для события закончена: { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:10:30.925680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:13.606 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:13.607 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T15:18:07.935680200Z }
+12/02/2026 - 17:30:13.610 MSK -- [Trace]: Событие отправлено: { user: 8, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T15:18:07.935680200Z }
+12/02/2026 - 17:30:13.610 MSK -- Ожидаю 10 секунд получения события { user: 8, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T15:18:07.935680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:13.615 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 8, event: 3, type: REGISTER, timestamp: 2026-02-09T15:18:07.935Z }
+12/02/2026 - 17:30:13.615 MSK -- Событие REGISTER пользователя 8 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:30:13.615 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:13.615 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [3]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:13.615 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:14.631 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:14.631 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:30:14.638 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 0.80 }
+12/02/2026 - 17:30:14.638 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 0.80 }
+12/02/2026 - 17:30:14.638 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:14.638 MSK -- Верификация для события закончена: { user: 8, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T15:18:07.935680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:14.638 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:14.638 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:25:36.228680200Z }
+12/02/2026 - 17:30:14.641 MSK -- [Trace]: Событие отправлено: { user: 3, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:25:36.228680200Z }
+12/02/2026 - 17:30:14.641 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:25:36.228680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 10, type: VIEW, timestamp: 2026-02-09T15:25:36.228Z }
+12/02/2026 - 17:30:14.648 MSK -- Событие VIEW пользователя 3 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:14.648 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [3] для мероприятия [10]
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [3]
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [3]
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [3]
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:14.648 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [3]
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [4] равен [0,288675] (min=[0,400000], norm1=[1,095445], norm2=[1,264911])
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [3]
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [3]
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [7] равен [0,577350] (min=[0,400000], norm1=[1,095445], norm2=[0,632456])
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [3]
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:14.650 MSK -- [Trace]: В результате действия [VIEW] пользователя [3] с мероприятием [10] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:14.650 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:14.656 MSK -- Событие { eventA: 4, eventB: 10, score: 0.29, timestamp: 2026-02-12T14:30:14.644Z } проверено
+12/02/2026 - 17:30:14.656 MSK -- Событие { eventA: 7, eventB: 10, score: 0.58, timestamp: 2026-02-12T14:30:14.644Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:15.657 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:15.658 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:15.665 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 1.20 }
+12/02/2026 - 17:30:15.665 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 1.20 }
+12/02/2026 - 17:30:15.665 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:15.665 MSK -- Верификация для события закончена: { user: 3, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T15:25:36.228680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:15.665 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:15.665 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:28:41.523680200Z }
+12/02/2026 - 17:30:15.670 MSK -- [Trace]: Событие отправлено: { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:28:41.523680200Z }
+12/02/2026 - 17:30:15.671 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:28:41.523680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 7, type: VIEW, timestamp: 2026-02-09T15:28:41.523Z }
+12/02/2026 - 17:30:15.679 MSK -- Событие VIEW пользователя 9 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:15.679 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [9] для мероприятия [7]
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [9]
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [9]
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [9]
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [9]
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [9]
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [9]
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [9] равен [0,500000] (min=[0,400000], norm1=[0,894427], norm2=[0,894427])
+12/02/2026 - 17:30:15.679 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [9]
+12/02/2026 - 17:30:15.680 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:15.680 MSK -- [Trace]: В результате действия [VIEW] пользователя [9] с мероприятием [7] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:15.680 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:15.685 MSK -- Событие { eventA: 7, eventB: 9, score: 0.50, timestamp: 2026-02-12T14:30:15.674Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:16.686 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:16.686 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:16.693 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 0.80 }
+12/02/2026 - 17:30:16.693 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 0.80 }
+12/02/2026 - 17:30:16.693 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:16.693 MSK -- Верификация для события закончена: { user: 9, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:28:41.523680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:16.693 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:16.693 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:25.789680200Z }
+12/02/2026 - 17:30:16.696 MSK -- [Trace]: Событие отправлено: { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:25.789680200Z }
+12/02/2026 - 17:30:16.696 MSK -- Ожидаю 10 секунд получения события { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:25.789680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 10, event: 7, type: VIEW, timestamp: 2026-02-09T15:35:25.789Z }
+12/02/2026 - 17:30:16.701 MSK -- Событие VIEW пользователя 10 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:16.701 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [10] для мероприятия [7]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [10]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [10]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [10]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [10]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [4] равен [0,577350] (min=[0,800000], norm1=[1,095445], norm2=[1,264911])
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [10]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [10]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [10]
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:16.701 MSK -- [Trace]: В результате действия [VIEW] пользователя [10] с мероприятием [7] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:16.702 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:16.708 MSK -- Событие { eventA: 4, eventB: 7, score: 0.58, timestamp: 2026-02-12T14:30:16.699Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:17.719 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:17.719 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:17.725 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 1.20 }
+12/02/2026 - 17:30:17.725 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 1.20 }
+12/02/2026 - 17:30:17.725 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:17.725 MSK -- Верификация для события закончена: { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T15:35:25.789680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:17.725 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:17.725 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T15:36:42.713680200Z }
+12/02/2026 - 17:30:17.728 MSK -- [Trace]: Событие отправлено: { user: 4, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T15:36:42.713680200Z }
+12/02/2026 - 17:30:17.728 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T15:36:42.713680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:17.733 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 9, type: REGISTER, timestamp: 2026-02-09T15:36:42.713Z }
+12/02/2026 - 17:30:17.733 MSK -- Событие REGISTER пользователя 4 с мероприятием 9 - проверено
+--------------------------------
+12/02/2026 - 17:30:17.733 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [4] для мероприятия [9]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [1] для пользователя [4]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [2] для пользователя [4]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [3] для пользователя [4]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [4] для пользователя [4]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [5] для пользователя [4]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [7] для пользователя [4]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [10] для пользователя [4]
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:17.734 MSK -- [Trace]: В результате действия [REGISTER] пользователя [4] с мероприятием [9] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:17.734 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:18.740 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:18.741 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [9]
+12/02/2026 - 17:30:18.748 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 9, score: 1.60 }
+12/02/2026 - 17:30:18.748 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 9, score: 1.60 }
+12/02/2026 - 17:30:18.748 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:18.748 MSK -- Верификация для события закончена: { user: 4, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T15:36:42.713680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:18.748 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:18.748 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T15:41:23.814680200Z }
+12/02/2026 - 17:30:18.751 MSK -- [Trace]: Событие отправлено: { user: 3, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T15:41:23.814680200Z }
+12/02/2026 - 17:30:18.751 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T15:41:23.814680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:18.758 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 8, type: REGISTER, timestamp: 2026-02-09T15:41:23.814Z }
+12/02/2026 - 17:30:18.758 MSK -- Событие REGISTER пользователя 3 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:30:18.758 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:18.758 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [8]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:18.758 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [4] равен [0,707107] (min=[0,800000], norm1=[0,894427], norm2=[1,264911])
+12/02/2026 - 17:30:18.758 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [7] равен [0,408248] (min=[0,400000], norm1=[0,894427], norm2=[1,095445])
+12/02/2026 - 17:30:18.758 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [10] равен [0,408248] (min=[0,400000], norm1=[0,894427], norm2=[1,095445])
+12/02/2026 - 17:30:18.758 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:18.764 MSK -- Событие { eventA: 4, eventB: 8, score: 0.71, timestamp: 2026-02-12T14:30:18.754Z } проверено
+12/02/2026 - 17:30:18.764 MSK -- Событие { eventA: 7, eventB: 8, score: 0.41, timestamp: 2026-02-12T14:30:18.754Z } проверено
+12/02/2026 - 17:30:18.764 MSK -- Событие { eventA: 8, eventB: 10, score: 0.41, timestamp: 2026-02-12T14:30:18.754Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:19.776 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:19.776 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:30:19.784 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 0.80 }
+12/02/2026 - 17:30:19.784 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 0.80 }
+12/02/2026 - 17:30:19.784 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:19.784 MSK -- Верификация для события закончена: { user: 3, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T15:41:23.814680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:19.784 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:19.784 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T15:49:08.123680200Z }
+12/02/2026 - 17:30:19.788 MSK -- [Trace]: Событие отправлено: { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T15:49:08.123680200Z }
+12/02/2026 - 17:30:19.788 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T15:49:08.123680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:19.793 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 3, type: VIEW, timestamp: 2026-02-09T15:49:08.123Z }
+12/02/2026 - 17:30:19.794 MSK -- Событие VIEW пользователя 3 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:30:19.794 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [3] для мероприятия [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [4] равен [0,288675] (min=[0,400000], norm1=[1,095445], norm2=[1,264911])
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [7] равен [0,333333] (min=[0,400000], norm1=[1,095445], norm2=[1,095445])
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [8] равен [0,408248] (min=[0,400000], norm1=[1,095445], norm2=[0,894427])
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [3]
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [10] равен [0,333333] (min=[0,400000], norm1=[1,095445], norm2=[1,095445])
+12/02/2026 - 17:30:19.794 MSK -- [Trace]: В результате действия [VIEW] пользователя [3] с мероприятием [3] было рассчитано 4 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:19.794 MSK -- Ожидаю 15 секунд получения 4 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:19.800 MSK -- Событие { eventA: 3, eventB: 4, score: 0.29, timestamp: 2026-02-12T14:30:19.790Z } проверено
+12/02/2026 - 17:30:19.800 MSK -- Событие { eventA: 3, eventB: 7, score: 0.33, timestamp: 2026-02-12T14:30:19.790Z } проверено
+12/02/2026 - 17:30:19.800 MSK -- Событие { eventA: 3, eventB: 8, score: 0.41, timestamp: 2026-02-12T14:30:19.790Z } проверено
+12/02/2026 - 17:30:19.800 MSK -- Событие { eventA: 3, eventB: 10, score: 0.33, timestamp: 2026-02-12T14:30:19.790Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:20.804 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:20.804 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:30:20.811 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 1.20 }
+12/02/2026 - 17:30:20.811 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 1.20 }
+12/02/2026 - 17:30:20.811 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:20.811 MSK -- Верификация для события закончена: { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T15:49:08.123680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:20.811 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:20.811 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:50.232680200Z }
+12/02/2026 - 17:30:20.815 MSK -- [Trace]: Событие отправлено: { user: 11, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:50.232680200Z }
+12/02/2026 - 17:30:20.815 MSK -- Ожидаю 10 секунд получения события { user: 11, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:50.232680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 11, event: 10, type: REGISTER, timestamp: 2026-02-09T15:53:50.232Z }
+12/02/2026 - 17:30:20.820 MSK -- Событие REGISTER пользователя 11 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:20.820 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [11] для мероприятия [10]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [11]
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:20.820 MSK -- [Trace]: В результате действия [REGISTER] пользователя [11] с мероприятием [10] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:20.820 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:21.831 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:21.831 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:21.838 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 2.00 }
+12/02/2026 - 17:30:21.838 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 2.00 }
+12/02/2026 - 17:30:21.838 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:21.838 MSK -- Верификация для события закончена: { user: 11, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T15:53:50.232680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:21.838 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:21.838 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:11.995680200Z }
+12/02/2026 - 17:30:21.841 MSK -- [Trace]: Событие отправлено: { user: 5, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:11.995680200Z }
+12/02/2026 - 17:30:21.841 MSK -- Ожидаю 10 секунд получения события { user: 5, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:11.995680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:21.847 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 5, event: 7, type: VIEW, timestamp: 2026-02-09T16:03:11.995Z }
+12/02/2026 - 17:30:21.848 MSK -- Событие VIEW пользователя 5 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:21.848 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [5] для мероприятия [7]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [8] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [5]
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:21.848 MSK -- [Trace]: В результате действия [VIEW] пользователя [5] с мероприятием [7] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:21.848 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:22.849 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:22.849 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:22.856 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 1.60 }
+12/02/2026 - 17:30:22.856 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 1.60 }
+12/02/2026 - 17:30:22.856 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:22.857 MSK -- Верификация для события закончена: { user: 5, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:03:11.995680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:22.857 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:22.857 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T16:12:09.298680200Z }
+12/02/2026 - 17:30:22.860 MSK -- [Trace]: Событие отправлено: { user: 9, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T16:12:09.298680200Z }
+12/02/2026 - 17:30:22.860 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T16:12:09.298680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 2, type: VIEW, timestamp: 2026-02-09T16:12:09.298Z }
+12/02/2026 - 17:30:22.866 MSK -- Событие VIEW пользователя 9 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:30:22.866 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [9] для мероприятия [2]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [1] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [3] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [4] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [5] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [7] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [7] равен [0,288675] (min=[0,400000], norm1=[1,095445], norm2=[1,264911])
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [8] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [9] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [9] равен [0,288675] (min=[0,400000], norm1=[1,095445], norm2=[1,264911])
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [10] для пользователя [9]
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:22.866 MSK -- [Trace]: В результате действия [VIEW] пользователя [9] с мероприятием [2] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:22.866 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:22.873 MSK -- Событие { eventA: 2, eventB: 7, score: 0.29, timestamp: 2026-02-12T14:30:22.863Z } проверено
+12/02/2026 - 17:30:22.873 MSK -- Событие { eventA: 2, eventB: 9, score: 0.29, timestamp: 2026-02-12T14:30:22.863Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:23.884 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:23.884 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:30:23.891 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 1.20 }
+12/02/2026 - 17:30:23.891 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 1.20 }
+12/02/2026 - 17:30:23.891 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:23.891 MSK -- Верификация для события закончена: { user: 9, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T16:12:09.298680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:23.891 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:23.891 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T16:21:41.084680200Z }
+12/02/2026 - 17:30:23.894 MSK -- [Trace]: Событие отправлено: { user: 4, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T16:21:41.084680200Z }
+12/02/2026 - 17:30:23.894 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T16:21:41.084680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 3, type: REGISTER, timestamp: 2026-02-09T16:21:41.084Z }
+12/02/2026 - 17:30:23.899 MSK -- Событие REGISTER пользователя 4 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:30:23.899 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [4] для мероприятия [3]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [9] равен [0,447214] (min=[0,800000], norm1=[1,414214], norm2=[1,264911])
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [4]
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:23.899 MSK -- [Trace]: В результате действия [REGISTER] пользователя [4] с мероприятием [3] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:23.899 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:23.905 MSK -- Событие { eventA: 3, eventB: 9, score: 0.45, timestamp: 2026-02-12T14:30:23.897Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:24.915 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:24.915 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:30:24.922 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 2.00 }
+12/02/2026 - 17:30:24.922 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 2.00 }
+12/02/2026 - 17:30:24.922 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:24.922 MSK -- Верификация для события закончена: { user: 4, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T16:21:41.084680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:24.922 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:24.922 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T16:30:55.223680200Z }
+12/02/2026 - 17:30:24.925 MSK -- [Trace]: Событие отправлено: { user: 8, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T16:30:55.223680200Z }
+12/02/2026 - 17:30:24.925 MSK -- Ожидаю 10 секунд получения события { user: 8, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T16:30:55.223680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:24.930 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 8, event: 3, type: VIEW, timestamp: 2026-02-09T16:30:55.223Z }
+12/02/2026 - 17:30:24.930 MSK -- Событие VIEW пользователя 8 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:30:24.930 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:24.930 MSK -- [Trace]: В результате действия [VIEW] пользователя [8] с мероприятием [3] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:24.930 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:25.945 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:25.945 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:30:25.952 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 2.00 }
+12/02/2026 - 17:30:25.952 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 2.00 }
+12/02/2026 - 17:30:25.953 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:25.953 MSK -- Верификация для события закончена: { user: 8, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T16:30:55.223680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:25.953 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:25.953 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T16:36:44.542680200Z }
+12/02/2026 - 17:30:25.956 MSK -- [Trace]: Событие отправлено: { user: 4, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T16:36:44.542680200Z }
+12/02/2026 - 17:30:25.956 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T16:36:44.542680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 4, type: REGISTER, timestamp: 2026-02-09T16:36:44.542Z }
+12/02/2026 - 17:30:25.961 MSK -- Событие REGISTER пользователя 4 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:30:25.961 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [4] для мероприятия [4]
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [1] для пользователя [4]
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [2] для пользователя [4]
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [3] для пользователя [4]
+12/02/2026 - 17:30:25.961 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [3] равен [0,547723] (min=[1,200000], norm1=[1,549193], norm2=[1,414214])
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [5] для пользователя [4]
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [7] для пользователя [4]
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [8] для пользователя [4]
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [9] для пользователя [4]
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [9] равен [0,408248] (min=[0,800000], norm1=[1,549193], norm2=[1,264911])
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [10] для пользователя [4]
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:25.962 MSK -- [Trace]: В результате действия [REGISTER] пользователя [4] с мероприятием [4] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:25.962 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:25.967 MSK -- Событие { eventA: 3, eventB: 4, score: 0.55, timestamp: 2026-02-12T14:30:25.959Z } проверено
+12/02/2026 - 17:30:25.967 MSK -- Событие { eventA: 4, eventB: 9, score: 0.41, timestamp: 2026-02-12T14:30:25.959Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:26.977 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:26.978 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:30:26.986 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 2.40 }
+12/02/2026 - 17:30:26.986 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 2.40 }
+12/02/2026 - 17:30:26.986 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:26.986 MSK -- Верификация для события закончена: { user: 4, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T16:36:44.542680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:26.986 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:26.986 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:42:23.074680200Z }
+12/02/2026 - 17:30:26.990 MSK -- [Trace]: Событие отправлено: { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:42:23.074680200Z }
+12/02/2026 - 17:30:26.990 MSK -- Ожидаю 10 секунд получения события { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:42:23.074680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 8, event: 10, type: VIEW, timestamp: 2026-02-09T16:42:23.074Z }
+12/02/2026 - 17:30:26.995 MSK -- Событие VIEW пользователя 8 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:26.995 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [8] для мероприятия [10]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [3] равен [0,365148] (min=[0,800000], norm1=[1,549193], norm2=[1,414214])
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [8]
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:26.995 MSK -- [Trace]: В результате действия [VIEW] пользователя [8] с мероприятием [10] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:26.995 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:27.000 MSK -- Событие { eventA: 3, eventB: 10, score: 0.37, timestamp: 2026-02-12T14:30:26.992Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:28.006 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:28.006 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:28.013 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 2.40 }
+12/02/2026 - 17:30:28.013 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 2.40 }
+12/02/2026 - 17:30:28.013 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:28.013 MSK -- Верификация для события закончена: { user: 8, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T16:42:23.074680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:28.013 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:28.013 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T16:47:23.285680200Z }
+12/02/2026 - 17:30:28.016 MSK -- [Trace]: Событие отправлено: { user: 2, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T16:47:23.285680200Z }
+12/02/2026 - 17:30:28.016 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T16:47:23.285680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 9, type: REGISTER, timestamp: 2026-02-09T16:47:23.285Z }
+12/02/2026 - 17:30:28.022 MSK -- Событие REGISTER пользователя 2 с мероприятием 9 - проверено
+--------------------------------
+12/02/2026 - 17:30:28.022 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [2] для мероприятия [9]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [1] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [2] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [9] и [2] равен [0,707107] (min=[1,200000], norm1=[1,549193], norm2=[1,095445])
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [3] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [4] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [5] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [7] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [8] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [10] для пользователя [2]
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:28.022 MSK -- [Trace]: В результате действия [REGISTER] пользователя [2] с мероприятием [9] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:28.022 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:28.027 MSK -- Событие { eventA: 2, eventB: 9, score: 0.71, timestamp: 2026-02-12T14:30:28.019Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:29.036 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:29.036 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [9]
+12/02/2026 - 17:30:29.042 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 9, score: 2.40 }
+12/02/2026 - 17:30:29.042 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 9, score: 2.40 }
+12/02/2026 - 17:30:29.042 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:29.042 MSK -- Верификация для события закончена: { user: 2, event: 9, type: ACTION_REGISTER, timestamp: 2026-02-09T16:47:23.285680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:29.042 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:29.042 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T16:49:36.229680200Z }
+12/02/2026 - 17:30:29.045 MSK -- [Trace]: Событие отправлено: { user: 4, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T16:49:36.229680200Z }
+12/02/2026 - 17:30:29.045 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T16:49:36.229680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 10, type: REGISTER, timestamp: 2026-02-09T16:49:36.229Z }
+12/02/2026 - 17:30:29.051 MSK -- Событие REGISTER пользователя 4 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:29.051 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [4] для мероприятия [10]
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [4]
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [4]
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [4]
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [3] равен [0,632456] (min=[1,600000], norm1=[1,788854], norm2=[1,414214])
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [4]
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [4] равен [0,433013] (min=[1,200000], norm1=[1,788854], norm2=[1,549193])
+12/02/2026 - 17:30:29.051 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [4]
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [4]
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [4]
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [4]
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [9] равен [0,288675] (min=[0,800000], norm1=[1,788854], norm2=[1,549193])
+12/02/2026 - 17:30:29.052 MSK -- [Trace]: В результате действия [REGISTER] пользователя [4] с мероприятием [10] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:29.052 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:29.057 MSK -- Событие { eventA: 3, eventB: 10, score: 0.63, timestamp: 2026-02-12T14:30:29.048Z } проверено
+12/02/2026 - 17:30:29.057 MSK -- Событие { eventA: 4, eventB: 10, score: 0.43, timestamp: 2026-02-12T14:30:29.048Z } проверено
+12/02/2026 - 17:30:29.057 MSK -- Событие { eventA: 9, eventB: 10, score: 0.29, timestamp: 2026-02-12T14:30:29.048Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:30.061 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:30.061 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:30.069 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 3.20 }
+12/02/2026 - 17:30:30.069 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 3.20 }
+12/02/2026 - 17:30:30.069 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:30.069 MSK -- Верификация для события закончена: { user: 4, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T16:49:36.229680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:30.069 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:30.069 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:52.256680200Z }
+12/02/2026 - 17:30:30.072 MSK -- [Trace]: Событие отправлено: { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:52.256680200Z }
+12/02/2026 - 17:30:30.072 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:52.256680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:30.076 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 7, type: VIEW, timestamp: 2026-02-09T16:51:52.256Z }
+12/02/2026 - 17:30:30.076 MSK -- Событие VIEW пользователя 3 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:30.076 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:30.076 MSK -- [Trace]: В результате действия [VIEW] пользователя [3] с мероприятием [7] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:30.076 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:31.087 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:31.087 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:31.094 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 1.60 }
+12/02/2026 - 17:30:31.094 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 1.60 }
+12/02/2026 - 17:30:31.094 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:31.094 MSK -- Верификация для события закончена: { user: 3, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T16:51:52.256680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:31.094 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:31.094 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:01:12.667680200Z }
+12/02/2026 - 17:30:31.098 MSK -- [Trace]: Событие отправлено: { user: 4, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:01:12.667680200Z }
+12/02/2026 - 17:30:31.098 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:01:12.667680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 8, type: VIEW, timestamp: 2026-02-09T17:01:12.667Z }
+12/02/2026 - 17:30:31.103 MSK -- Событие VIEW пользователя 4 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:30:31.103 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [4] для мероприятия [8]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [1] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [2] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [3] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [3] равен [0,516398] (min=[0,800000], norm1=[1,095445], norm2=[1,414214])
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [4] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [4] равен [0,707107] (min=[1,200000], norm1=[1,095445], norm2=[1,549193])
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [5] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [7] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [9] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [9] равен [0,235702] (min=[0,400000], norm1=[1,095445], norm2=[1,549193])
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [10] для пользователя [4]
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [10] равен [0,408248] (min=[0,800000], norm1=[1,095445], norm2=[1,788854])
+12/02/2026 - 17:30:31.103 MSK -- [Trace]: В результате действия [VIEW] пользователя [4] с мероприятием [8] было рассчитано 4 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:31.104 MSK -- Ожидаю 15 секунд получения 4 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:31.109 MSK -- Событие { eventA: 3, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:30:31.100Z } проверено
+12/02/2026 - 17:30:31.109 MSK -- Событие { eventA: 4, eventB: 8, score: 0.71, timestamp: 2026-02-12T14:30:31.100Z } проверено
+12/02/2026 - 17:30:31.109 MSK -- Событие { eventA: 8, eventB: 9, score: 0.24, timestamp: 2026-02-12T14:30:31.101Z } проверено
+12/02/2026 - 17:30:31.109 MSK -- Событие { eventA: 8, eventB: 10, score: 0.41, timestamp: 2026-02-12T14:30:31.101Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:32.118 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:32.118 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:30:32.127 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 1.20 }
+12/02/2026 - 17:30:32.127 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 1.20 }
+12/02/2026 - 17:30:32.127 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:32.127 MSK -- Верификация для события закончена: { user: 4, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:01:12.667680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:32.127 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:32.127 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:11:04.900680200Z }
+12/02/2026 - 17:30:32.131 MSK -- [Trace]: Событие отправлено: { user: 4, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:11:04.900680200Z }
+12/02/2026 - 17:30:32.131 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:11:04.900680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 2, type: VIEW, timestamp: 2026-02-09T17:11:04.900Z }
+12/02/2026 - 17:30:32.137 MSK -- Событие VIEW пользователя 4 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:30:32.137 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [4] для мероприятия [2]
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [1] для пользователя [4]
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [3] для пользователя [4]
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [3] равен [0,223607] (min=[0,400000], norm1=[1,264911], norm2=[1,414214])
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [4] для пользователя [4]
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [4] равен [0,204124] (min=[0,400000], norm1=[1,264911], norm2=[1,549193])
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [5] для пользователя [4]
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [7] для пользователя [4]
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [8] для пользователя [4]
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [8] равен [0,288675] (min=[0,400000], norm1=[1,264911], norm2=[1,095445])
+12/02/2026 - 17:30:32.137 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [9] для пользователя [4]
+12/02/2026 - 17:30:32.138 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [9] равен [0,816497] (min=[1,600000], norm1=[1,264911], norm2=[1,549193])
+12/02/2026 - 17:30:32.138 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [10] для пользователя [4]
+12/02/2026 - 17:30:32.138 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [10] равен [0,176777] (min=[0,400000], norm1=[1,264911], norm2=[1,788854])
+12/02/2026 - 17:30:32.138 MSK -- [Trace]: В результате действия [VIEW] пользователя [4] с мероприятием [2] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:32.138 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:32.144 MSK -- Событие { eventA: 2, eventB: 3, score: 0.22, timestamp: 2026-02-12T14:30:32.134Z } проверено
+12/02/2026 - 17:30:32.144 MSK -- Событие { eventA: 2, eventB: 4, score: 0.20, timestamp: 2026-02-12T14:30:32.134Z } проверено
+12/02/2026 - 17:30:32.144 MSK -- Событие { eventA: 2, eventB: 8, score: 0.29, timestamp: 2026-02-12T14:30:32.134Z } проверено
+12/02/2026 - 17:30:32.144 MSK -- Событие { eventA: 2, eventB: 9, score: 0.82, timestamp: 2026-02-12T14:30:32.134Z } проверено
+12/02/2026 - 17:30:32.144 MSK -- Событие { eventA: 2, eventB: 10, score: 0.18, timestamp: 2026-02-12T14:30:32.134Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:33.145 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:33.145 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:30:33.152 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 1.60 }
+12/02/2026 - 17:30:33.152 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 1.60 }
+12/02/2026 - 17:30:33.152 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:33.152 MSK -- Верификация для события закончена: { user: 4, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:11:04.900680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:33.152 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:33.152 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:20:05.196680200Z }
+12/02/2026 - 17:30:33.156 MSK -- [Trace]: Событие отправлено: { user: 9, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:20:05.196680200Z }
+12/02/2026 - 17:30:33.156 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:20:05.196680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:33.161 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 9, type: VIEW, timestamp: 2026-02-09T17:20:05.196Z }
+12/02/2026 - 17:30:33.161 MSK -- Событие VIEW пользователя 9 с мероприятием 9 - проверено
+--------------------------------
+12/02/2026 - 17:30:33.161 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:33.161 MSK -- [Trace]: В результате действия [VIEW] пользователя [9] с мероприятием [9] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:33.161 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:34.176 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:34.176 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [9]
+12/02/2026 - 17:30:34.183 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 9, score: 2.40 }
+12/02/2026 - 17:30:34.183 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 9, score: 2.40 }
+12/02/2026 - 17:30:34.183 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:34.183 MSK -- Верификация для события закончена: { user: 9, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:20:05.196680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:34.183 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:34.183 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:24:17.062680200Z }
+12/02/2026 - 17:30:34.186 MSK -- [Trace]: Событие отправлено: { user: 11, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:24:17.062680200Z }
+12/02/2026 - 17:30:34.186 MSK -- Ожидаю 10 секунд получения события { user: 11, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:24:17.062680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 11, event: 9, type: VIEW, timestamp: 2026-02-09T17:24:17.062Z }
+12/02/2026 - 17:30:34.191 MSK -- Событие VIEW пользователя 11 с мероприятием 9 - проверено
+--------------------------------
+12/02/2026 - 17:30:34.191 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [11] для мероприятия [9]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [1] для пользователя [11]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [2] для пользователя [11]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [3] для пользователя [11]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [4] для пользователя [11]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [5] для пользователя [11]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [7] для пользователя [11]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [8] для пользователя [11]
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:34.191 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [10] для пользователя [11]
+12/02/2026 - 17:30:34.192 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [9] и [10] равен [0,400892] (min=[1,200000], norm1=[1,673320], norm2=[1,788854])
+12/02/2026 - 17:30:34.192 MSK -- [Trace]: В результате действия [VIEW] пользователя [11] с мероприятием [9] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:34.192 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:34.196 MSK -- Событие { eventA: 9, eventB: 10, score: 0.40, timestamp: 2026-02-12T14:30:34.190Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:35.201 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:35.201 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [9]
+12/02/2026 - 17:30:35.207 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 9, score: 2.80 }
+12/02/2026 - 17:30:35.207 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 9, score: 2.80 }
+12/02/2026 - 17:30:35.207 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:35.207 MSK -- Верификация для события закончена: { user: 11, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T17:24:17.062680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:35.207 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:35.207 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:23.549680200Z }
+12/02/2026 - 17:30:35.211 MSK -- [Trace]: Событие отправлено: { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:23.549680200Z }
+12/02/2026 - 17:30:35.211 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:23.549680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 2, type: VIEW, timestamp: 2026-02-09T17:30:23.549Z }
+12/02/2026 - 17:30:35.217 MSK -- Событие VIEW пользователя 3 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:30:35.217 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [3] для мероприятия [2]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [1] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [3] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [3] равен [0,400000] (min=[0,800000], norm1=[1,414214], norm2=[1,414214])
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [4] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [4] равен [0,365148] (min=[0,800000], norm1=[1,414214], norm2=[1,549193])
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [5] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [7] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [7] равен [0,447214] (min=[0,800000], norm1=[1,414214], norm2=[1,264911])
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [8] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [8] равен [0,516398] (min=[0,800000], norm1=[1,414214], norm2=[1,095445])
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [9] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [10] для пользователя [3]
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [10] равен [0,316228] (min=[0,800000], norm1=[1,414214], norm2=[1,788854])
+12/02/2026 - 17:30:35.217 MSK -- [Trace]: В результате действия [VIEW] пользователя [3] с мероприятием [2] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:35.217 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:35.223 MSK -- Событие { eventA: 2, eventB: 3, score: 0.40, timestamp: 2026-02-12T14:30:35.214Z } проверено
+12/02/2026 - 17:30:35.223 MSK -- Событие { eventA: 2, eventB: 4, score: 0.37, timestamp: 2026-02-12T14:30:35.214Z } проверено
+12/02/2026 - 17:30:35.223 MSK -- Событие { eventA: 2, eventB: 7, score: 0.45, timestamp: 2026-02-12T14:30:35.214Z } проверено
+12/02/2026 - 17:30:35.223 MSK -- Событие { eventA: 2, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:30:35.214Z } проверено
+12/02/2026 - 17:30:35.223 MSK -- Событие { eventA: 2, eventB: 10, score: 0.32, timestamp: 2026-02-12T14:30:35.214Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:36.229 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:36.229 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:30:36.237 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 2.00 }
+12/02/2026 - 17:30:36.237 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 2.00 }
+12/02/2026 - 17:30:36.237 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:36.237 MSK -- Верификация для события закончена: { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T17:30:23.549680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:36.237 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:36.237 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T17:32:33.920680200Z }
+12/02/2026 - 17:30:36.240 MSK -- [Trace]: Событие отправлено: { user: 9, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T17:32:33.920680200Z }
+12/02/2026 - 17:30:36.240 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T17:32:33.920680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:36.247 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 6, type: REGISTER, timestamp: 2026-02-09T17:32:33.920Z }
+12/02/2026 - 17:30:36.247 MSK -- Событие REGISTER пользователя 9 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:30:36.247 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:36.247 MSK -- [Trace]: Тестер: это первое взаимодействие с мероприятием [6]. Рассчитываем коэффициенты схожести с другими мероприятиями.
+12/02/2026 - 17:30:36.247 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [2] равен [0,316228] (min=[0,400000], norm1=[0,894427], norm2=[1,414214])
+12/02/2026 - 17:30:36.247 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [7] равен [0,353553] (min=[0,400000], norm1=[0,894427], norm2=[1,264911])
+12/02/2026 - 17:30:36.247 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [9] равен [0,534522] (min=[0,800000], norm1=[0,894427], norm2=[1,673320])
+12/02/2026 - 17:30:36.247 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:36.253 MSK -- Событие { eventA: 2, eventB: 6, score: 0.32, timestamp: 2026-02-12T14:30:36.243Z } проверено
+12/02/2026 - 17:30:36.253 MSK -- Событие { eventA: 6, eventB: 7, score: 0.35, timestamp: 2026-02-12T14:30:36.243Z } проверено
+12/02/2026 - 17:30:36.253 MSK -- Событие { eventA: 6, eventB: 9, score: 0.53, timestamp: 2026-02-12T14:30:36.243Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:37.262 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:37.262 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:30:37.267 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 0.80 }
+12/02/2026 - 17:30:37.267 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 0.80 }
+12/02/2026 - 17:30:37.267 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:37.267 MSK -- Верификация для события закончена: { user: 9, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T17:32:33.920680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:37.267 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:37.267 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:37:37.444680200Z }
+12/02/2026 - 17:30:37.271 MSK -- [Trace]: Событие отправлено: { user: 1, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:37:37.444680200Z }
+12/02/2026 - 17:30:37.271 MSK -- Ожидаю 10 секунд получения события { user: 1, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:37:37.444680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 1, event: 4, type: REGISTER, timestamp: 2026-02-09T17:37:37.444Z }
+12/02/2026 - 17:30:37.276 MSK -- Событие REGISTER пользователя 1 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:30:37.276 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [1] для мероприятия [4]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [1] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [2] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [3] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [5] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [6] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [7] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [8] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [9] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [10] для пользователя [1]
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [10] равен [0,625000] (min=[2,000000], norm1=[1,788854], norm2=[1,788854])
+12/02/2026 - 17:30:37.276 MSK -- [Trace]: В результате действия [REGISTER] пользователя [1] с мероприятием [4] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:37.276 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:37.283 MSK -- Событие { eventA: 4, eventB: 10, score: 0.63, timestamp: 2026-02-12T14:30:37.274Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:38.295 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:38.295 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:30:38.303 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 3.20 }
+12/02/2026 - 17:30:38.303 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 3.20 }
+12/02/2026 - 17:30:38.303 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:38.303 MSK -- Верификация для события закончена: { user: 1, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:37:37.444680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:38.303 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:38.303 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:15.055680200Z }
+12/02/2026 - 17:30:38.307 MSK -- [Trace]: Событие отправлено: { user: 9, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:15.055680200Z }
+12/02/2026 - 17:30:38.307 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:15.055680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 1, type: VIEW, timestamp: 2026-02-09T17:42:15.055Z }
+12/02/2026 - 17:30:38.312 MSK -- Событие VIEW пользователя 9 с мероприятием 1 - проверено
+--------------------------------
+12/02/2026 - 17:30:38.312 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [9] для мероприятия [1]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [2] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [2] равен [0,316228] (min=[0,400000], norm1=[0,894427], norm2=[1,414214])
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [3] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [4] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [5] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [6] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [6] равен [0,500000] (min=[0,400000], norm1=[0,894427], norm2=[0,894427])
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [7] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [7] равен [0,353553] (min=[0,400000], norm1=[0,894427], norm2=[1,264911])
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [8] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [9] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [9] равен [0,267261] (min=[0,400000], norm1=[0,894427], norm2=[1,673320])
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [10] для пользователя [9]
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:38.312 MSK -- [Trace]: В результате действия [VIEW] пользователя [9] с мероприятием [1] было рассчитано 4 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:38.312 MSK -- Ожидаю 15 секунд получения 4 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:38.316 MSK -- Событие { eventA: 1, eventB: 2, score: 0.32, timestamp: 2026-02-12T14:30:38.309Z } проверено
+12/02/2026 - 17:30:38.316 MSK -- Событие { eventA: 1, eventB: 6, score: 0.50, timestamp: 2026-02-12T14:30:38.309Z } проверено
+12/02/2026 - 17:30:38.316 MSK -- Событие { eventA: 1, eventB: 7, score: 0.35, timestamp: 2026-02-12T14:30:38.309Z } проверено
+12/02/2026 - 17:30:38.317 MSK -- Событие { eventA: 1, eventB: 9, score: 0.27, timestamp: 2026-02-12T14:30:38.309Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:39.327 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:39.327 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [1]
+12/02/2026 - 17:30:39.335 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 1, score: 0.80 }
+12/02/2026 - 17:30:39.335 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 1, score: 0.80 }
+12/02/2026 - 17:30:39.335 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:39.335 MSK -- Верификация для события закончена: { user: 9, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T17:42:15.055680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:39.335 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:39.335 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:44:04.273680200Z }
+12/02/2026 - 17:30:39.337 MSK -- [Trace]: Событие отправлено: { user: 9, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:44:04.273680200Z }
+12/02/2026 - 17:30:39.337 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:44:04.273680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 8, type: VIEW, timestamp: 2026-02-09T17:44:04.273Z }
+12/02/2026 - 17:30:39.342 MSK -- Событие VIEW пользователя 9 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:30:39.342 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [9] для мероприятия [8]
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [1] для пользователя [9]
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [1] равен [0,353553] (min=[0,400000], norm1=[1,264911], norm2=[0,894427])
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [2] для пользователя [9]
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [2] равен [0,670820] (min=[1,200000], norm1=[1,264911], norm2=[1,414214])
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [3] для пользователя [9]
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [4] для пользователя [9]
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [5] для пользователя [9]
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [6] для пользователя [9]
+12/02/2026 - 17:30:39.342 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [6] равен [0,353553] (min=[0,400000], norm1=[1,264911], norm2=[0,894427])
+12/02/2026 - 17:30:39.343 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [7] для пользователя [9]
+12/02/2026 - 17:30:39.343 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [7] равен [0,500000] (min=[0,800000], norm1=[1,264911], norm2=[1,264911])
+12/02/2026 - 17:30:39.343 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [9] для пользователя [9]
+12/02/2026 - 17:30:39.343 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [9] равен [0,377964] (min=[0,800000], norm1=[1,264911], norm2=[1,673320])
+12/02/2026 - 17:30:39.343 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [10] для пользователя [9]
+12/02/2026 - 17:30:39.343 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:39.343 MSK -- [Trace]: В результате действия [VIEW] пользователя [9] с мероприятием [8] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:39.343 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:39.348 MSK -- Событие { eventA: 1, eventB: 8, score: 0.35, timestamp: 2026-02-12T14:30:39.340Z } проверено
+12/02/2026 - 17:30:39.348 MSK -- Событие { eventA: 2, eventB: 8, score: 0.67, timestamp: 2026-02-12T14:30:39.340Z } проверено
+12/02/2026 - 17:30:39.348 MSK -- Событие { eventA: 6, eventB: 8, score: 0.35, timestamp: 2026-02-12T14:30:39.340Z } проверено
+12/02/2026 - 17:30:39.348 MSK -- Событие { eventA: 7, eventB: 8, score: 0.50, timestamp: 2026-02-12T14:30:39.340Z } проверено
+12/02/2026 - 17:30:39.348 MSK -- Событие { eventA: 8, eventB: 9, score: 0.38, timestamp: 2026-02-12T14:30:39.340Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:40.354 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:40.354 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:30:40.362 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 1.60 }
+12/02/2026 - 17:30:40.362 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 1.60 }
+12/02/2026 - 17:30:40.362 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:40.362 MSK -- Верификация для события закончена: { user: 9, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T17:44:04.273680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:40.362 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:40.362 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T17:45:11.796680200Z }
+12/02/2026 - 17:30:40.365 MSK -- [Trace]: Событие отправлено: { user: 1, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T17:45:11.796680200Z }
+12/02/2026 - 17:30:40.365 MSK -- Ожидаю 10 секунд получения события { user: 1, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T17:45:11.796680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 1, event: 7, type: REGISTER, timestamp: 2026-02-09T17:45:11.796Z }
+12/02/2026 - 17:30:40.371 MSK -- Событие REGISTER пользователя 1 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:40.371 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [1] для мероприятия [7]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [4] равен [0,577350] (min=[1,600000], norm1=[1,549193], norm2=[1,788854])
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [6] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [8] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [1]
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [10] равен [0,433013] (min=[1,200000], norm1=[1,549193], norm2=[1,788854])
+12/02/2026 - 17:30:40.371 MSK -- [Trace]: В результате действия [REGISTER] пользователя [1] с мероприятием [7] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:40.371 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:40.376 MSK -- Событие { eventA: 4, eventB: 7, score: 0.58, timestamp: 2026-02-12T14:30:40.368Z } проверено
+12/02/2026 - 17:30:40.376 MSK -- Событие { eventA: 7, eventB: 10, score: 0.43, timestamp: 2026-02-12T14:30:40.368Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:41.389 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:41.389 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:41.396 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 2.40 }
+12/02/2026 - 17:30:41.396 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 2.40 }
+12/02/2026 - 17:30:41.396 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:41.396 MSK -- Верификация для события закончена: { user: 1, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T17:45:11.796680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:41.396 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:41.396 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:49:08.622680200Z }
+12/02/2026 - 17:30:41.399 MSK -- [Trace]: Событие отправлено: { user: 5, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:49:08.622680200Z }
+12/02/2026 - 17:30:41.399 MSK -- Ожидаю 10 секунд получения события { user: 5, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:49:08.622680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 5, event: 4, type: REGISTER, timestamp: 2026-02-09T17:49:08.622Z }
+12/02/2026 - 17:30:41.404 MSK -- Событие REGISTER пользователя 5 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:30:41.404 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [5] для мероприятия [4]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [1] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [2] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [3] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [5] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [6] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [7] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [7] равен [0,645497] (min=[2,000000], norm1=[2,000000], norm2=[1,549193])
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [8] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [9] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [10] для пользователя [5]
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:41.404 MSK -- [Trace]: В результате действия [REGISTER] пользователя [5] с мероприятием [4] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:41.404 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:41.408 MSK -- Событие { eventA: 4, eventB: 7, score: 0.65, timestamp: 2026-02-12T14:30:41.401Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:42.422 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:42.422 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:30:42.430 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 4.00 }
+12/02/2026 - 17:30:42.430 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 4.00 }
+12/02/2026 - 17:30:42.430 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:42.430 MSK -- Верификация для события закончена: { user: 5, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T17:49:08.622680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:42.430 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:42.430 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T17:59:06.304680200Z }
+12/02/2026 - 17:30:42.434 MSK -- [Trace]: Событие отправлено: { user: 5, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T17:59:06.304680200Z }
+12/02/2026 - 17:30:42.434 MSK -- Ожидаю 10 секунд получения события { user: 5, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T17:59:06.304680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:42.439 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 5, event: 4, type: VIEW, timestamp: 2026-02-09T17:59:06.304Z }
+12/02/2026 - 17:30:42.439 MSK -- Событие VIEW пользователя 5 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:30:42.439 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:42.439 MSK -- [Trace]: В результате действия [VIEW] пользователя [5] с мероприятием [4] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:42.439 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:43.440 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:43.440 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:30:43.448 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 4.00 }
+12/02/2026 - 17:30:43.448 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 4.00 }
+12/02/2026 - 17:30:43.448 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:43.448 MSK -- Верификация для события закончена: { user: 5, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T17:59:06.304680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:43.448 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:43.448 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T18:03:46.480680200Z }
+12/02/2026 - 17:30:43.451 MSK -- [Trace]: Событие отправлено: { user: 4, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T18:03:46.480680200Z }
+12/02/2026 - 17:30:43.451 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T18:03:46.480680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:43.455 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 1, type: VIEW, timestamp: 2026-02-09T18:03:46.480Z }
+12/02/2026 - 17:30:43.455 MSK -- Событие VIEW пользователя 4 с мероприятием 1 - проверено
+--------------------------------
+12/02/2026 - 17:30:43.455 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [4] для мероприятия [1]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [2] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [2] равен [0,516398] (min=[0,800000], norm1=[1,095445], norm2=[1,414214])
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [3] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [3] равен [0,258199] (min=[0,400000], norm1=[1,095445], norm2=[1,414214])
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [4] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [4] равен [0,182574] (min=[0,400000], norm1=[1,095445], norm2=[2,000000])
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [5] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [6] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [7] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [8] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [8] равен [0,577350] (min=[0,800000], norm1=[1,095445], norm2=[1,264911])
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [9] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [9] равен [0,436436] (min=[0,800000], norm1=[1,095445], norm2=[1,673320])
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [10] для пользователя [4]
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [10] равен [0,204124] (min=[0,400000], norm1=[1,095445], norm2=[1,788854])
+12/02/2026 - 17:30:43.456 MSK -- [Trace]: В результате действия [VIEW] пользователя [4] с мероприятием [1] было рассчитано 6 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:43.456 MSK -- Ожидаю 15 секунд получения 6 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:43.461 MSK -- Событие { eventA: 1, eventB: 2, score: 0.52, timestamp: 2026-02-12T14:30:43.454Z } проверено
+12/02/2026 - 17:30:43.461 MSK -- Событие { eventA: 1, eventB: 3, score: 0.26, timestamp: 2026-02-12T14:30:43.454Z } проверено
+12/02/2026 - 17:30:43.461 MSK -- Событие { eventA: 1, eventB: 4, score: 0.18, timestamp: 2026-02-12T14:30:43.454Z } проверено
+12/02/2026 - 17:30:43.461 MSK -- Событие { eventA: 1, eventB: 8, score: 0.58, timestamp: 2026-02-12T14:30:43.454Z } проверено
+12/02/2026 - 17:30:43.461 MSK -- Событие { eventA: 1, eventB: 9, score: 0.44, timestamp: 2026-02-12T14:30:43.454Z } проверено
+12/02/2026 - 17:30:43.461 MSK -- Событие { eventA: 1, eventB: 10, score: 0.20, timestamp: 2026-02-12T14:30:43.454Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:44.467 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:44.467 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [1]
+12/02/2026 - 17:30:44.473 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 1, score: 1.20 }
+12/02/2026 - 17:30:44.473 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 1, score: 1.20 }
+12/02/2026 - 17:30:44.473 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:44.473 MSK -- Верификация для события закончена: { user: 4, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T18:03:46.480680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:44.473 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:44.473 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:06:38.997680200Z }
+12/02/2026 - 17:30:44.476 MSK -- [Trace]: Событие отправлено: { user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:06:38.997680200Z }
+12/02/2026 - 17:30:44.476 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:06:38.997680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 7, type: REGISTER, timestamp: 2026-02-09T18:06:38.997Z }
+12/02/2026 - 17:30:44.482 MSK -- Событие REGISTER пользователя 4 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:44.482 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [4] для мероприятия [7]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [1] равен [0,408248] (min=[0,800000], norm1=[1,788854], norm2=[1,095445])
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [2] равен [0,474342] (min=[1,200000], norm1=[1,788854], norm2=[1,414214])
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [3] равен [0,474342] (min=[1,200000], norm1=[1,788854], norm2=[1,414214])
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [4] равен [0,782624] (min=[2,800000], norm1=[1,788854], norm2=[2,000000])
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [6] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [8] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [8] равен [0,530330] (min=[1,200000], norm1=[1,788854], norm2=[1,264911])
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [9] равен [0,400892] (min=[1,200000], norm1=[1,788854], norm2=[1,673320])
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [4]
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [10] равен [0,625000] (min=[2,000000], norm1=[1,788854], norm2=[1,788854])
+12/02/2026 - 17:30:44.482 MSK -- [Trace]: В результате действия [REGISTER] пользователя [4] с мероприятием [7] было рассчитано 7 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:44.482 MSK -- Ожидаю 15 секунд получения 7 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:44.488 MSK -- Событие { eventA: 1, eventB: 7, score: 0.41, timestamp: 2026-02-12T14:30:44.479Z } проверено
+12/02/2026 - 17:30:44.488 MSK -- Событие { eventA: 2, eventB: 7, score: 0.47, timestamp: 2026-02-12T14:30:44.479Z } проверено
+12/02/2026 - 17:30:44.488 MSK -- Событие { eventA: 3, eventB: 7, score: 0.47, timestamp: 2026-02-12T14:30:44.479Z } проверено
+12/02/2026 - 17:30:44.488 MSK -- Событие { eventA: 4, eventB: 7, score: 0.78, timestamp: 2026-02-12T14:30:44.479Z } проверено
+12/02/2026 - 17:30:44.488 MSK -- Событие { eventA: 7, eventB: 8, score: 0.53, timestamp: 2026-02-12T14:30:44.479Z } проверено
+12/02/2026 - 17:30:44.488 MSK -- Событие { eventA: 7, eventB: 9, score: 0.40, timestamp: 2026-02-12T14:30:44.479Z } проверено
+12/02/2026 - 17:30:44.488 MSK -- Событие { eventA: 7, eventB: 10, score: 0.63, timestamp: 2026-02-12T14:30:44.479Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:45.493 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:45.493 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:45.499 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 3.20 }
+12/02/2026 - 17:30:45.499 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 3.20 }
+12/02/2026 - 17:30:45.499 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:45.499 MSK -- Верификация для события закончена: { user: 4, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:06:38.997680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:45.499 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:45.499 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T18:09:19.315680200Z }
+12/02/2026 - 17:30:45.502 MSK -- [Trace]: Событие отправлено: { user: 11, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T18:09:19.315680200Z }
+12/02/2026 - 17:30:45.502 MSK -- Ожидаю 10 секунд получения события { user: 11, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T18:09:19.315680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 11, event: 5, type: VIEW, timestamp: 2026-02-09T18:09:19.315Z }
+12/02/2026 - 17:30:45.508 MSK -- Событие VIEW пользователя 11 с мероприятием 5 - проверено
+--------------------------------
+12/02/2026 - 17:30:45.508 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [11] для мероприятия [5]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [1] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [2] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [3] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [4] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [6] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [7] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [8] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [9] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [9] равен [0,267261] (min=[0,400000], norm1=[0,894427], norm2=[1,673320])
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [10] для пользователя [11]
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [10] равен [0,250000] (min=[0,400000], norm1=[0,894427], norm2=[1,788854])
+12/02/2026 - 17:30:45.508 MSK -- [Trace]: В результате действия [VIEW] пользователя [11] с мероприятием [5] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:45.508 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:45.513 MSK -- Событие { eventA: 5, eventB: 9, score: 0.27, timestamp: 2026-02-12T14:30:45.505Z } проверено
+12/02/2026 - 17:30:45.513 MSK -- Событие { eventA: 5, eventB: 10, score: 0.25, timestamp: 2026-02-12T14:30:45.505Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:46.522 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:46.523 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [5]
+12/02/2026 - 17:30:46.528 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 5, score: 0.80 }
+12/02/2026 - 17:30:46.528 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 5, score: 0.80 }
+12/02/2026 - 17:30:46.528 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:46.529 MSK -- Верификация для события закончена: { user: 11, event: 5, type: ACTION_VIEW, timestamp: 2026-02-09T18:09:19.315680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:46.529 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:46.529 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T18:11:30.829680200Z }
+12/02/2026 - 17:30:46.531 MSK -- [Trace]: Событие отправлено: { user: 3, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T18:11:30.829680200Z }
+12/02/2026 - 17:30:46.531 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T18:11:30.829680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 10, type: REGISTER, timestamp: 2026-02-09T18:11:30.829Z }
+12/02/2026 - 17:30:46.536 MSK -- Событие REGISTER пользователя 3 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:46.536 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [3] для мероприятия [10]
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [3]
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [3]
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [2] равен [0,298142] (min=[0,800000], norm1=[1,897367], norm2=[1,414214])
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [3]
+12/02/2026 - 17:30:46.536 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [3] равен [0,596285] (min=[1,600000], norm1=[1,897367], norm2=[1,414214])
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [3]
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [4] равен [0,632456] (min=[2,400000], norm1=[1,897367], norm2=[2,000000])
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [3]
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [6] для пользователя [3]
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [3]
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [7] равен [0,589256] (min=[2,000000], norm1=[1,897367], norm2=[1,788854])
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [3]
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [8] равен [0,500000] (min=[1,200000], norm1=[1,897367], norm2=[1,264911])
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [3]
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:46.537 MSK -- [Trace]: В результате действия [REGISTER] пользователя [3] с мероприятием [10] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:46.537 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:46.541 MSK -- Событие { eventA: 2, eventB: 10, score: 0.30, timestamp: 2026-02-12T14:30:46.534Z } проверено
+12/02/2026 - 17:30:46.541 MSK -- Событие { eventA: 3, eventB: 10, score: 0.60, timestamp: 2026-02-12T14:30:46.534Z } проверено
+12/02/2026 - 17:30:46.541 MSK -- Событие { eventA: 4, eventB: 10, score: 0.63, timestamp: 2026-02-12T14:30:46.534Z } проверено
+12/02/2026 - 17:30:46.541 MSK -- Событие { eventA: 7, eventB: 10, score: 0.59, timestamp: 2026-02-12T14:30:46.534Z } проверено
+12/02/2026 - 17:30:46.541 MSK -- Событие { eventA: 8, eventB: 10, score: 0.50, timestamp: 2026-02-12T14:30:46.534Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:47.555 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:47.555 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:47.563 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 3.60 }
+12/02/2026 - 17:30:47.563 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 3.60 }
+12/02/2026 - 17:30:47.563 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:47.563 MSK -- Верификация для события закончена: { user: 3, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T18:11:30.829680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:47.563 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:47.563 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T18:21:29.889680200Z }
+12/02/2026 - 17:30:47.567 MSK -- [Trace]: Событие отправлено: { user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T18:21:29.889680200Z }
+12/02/2026 - 17:30:47.567 MSK -- Ожидаю 10 секунд получения события { user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T18:21:29.889680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 7, event: 4, type: REGISTER, timestamp: 2026-02-09T18:21:29.889Z }
+12/02/2026 - 17:30:47.572 MSK -- Событие REGISTER пользователя 7 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:30:47.572 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [7] для мероприятия [4]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [1] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [2] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [3] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [5] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [6] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [7] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [8] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [9] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [10] для пользователя [7]
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:47.572 MSK -- [Trace]: В результате действия [REGISTER] пользователя [7] с мероприятием [4] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:47.572 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:48.575 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:48.576 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:30:48.582 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 4.80 }
+12/02/2026 - 17:30:48.582 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 4.80 }
+12/02/2026 - 17:30:48.582 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:48.582 MSK -- Верификация для события закончена: { user: 7, event: 4, type: ACTION_REGISTER, timestamp: 2026-02-09T18:21:29.889680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:48.582 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:48.583 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T18:29:28.868680200Z }
+12/02/2026 - 17:30:48.587 MSK -- [Trace]: Событие отправлено: { user: 4, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T18:29:28.868680200Z }
+12/02/2026 - 17:30:48.587 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T18:29:28.868680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:48.592 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 3, type: LIKE, timestamp: 2026-02-09T18:29:28.868Z }
+12/02/2026 - 17:30:48.592 MSK -- Событие LIKE пользователя 4 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:30:48.592 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:48.592 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [4] для мероприятия [3]
+12/02/2026 - 17:30:48.592 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [4]
+12/02/2026 - 17:30:48.592 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [1] равен [0,246183] (min=[0,400000], norm1=[1,483240], norm2=[1,095445])
+12/02/2026 - 17:30:48.592 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [2] равен [0,381385] (min=[0,800000], norm1=[1,483240], norm2=[1,414214])
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [4] равен [0,369274] (min=[1,200000], norm1=[1,483240], norm2=[2,190890])
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [6] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [7] равен [0,452267] (min=[1,200000], norm1=[1,483240], norm2=[1,788854])
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [8] равен [0,426401] (min=[0,800000], norm1=[1,483240], norm2=[1,264911])
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [9] равен [0,322329] (min=[0,800000], norm1=[1,483240], norm2=[1,673320])
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [4]
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [10] равен [0,568535] (min=[1,600000], norm1=[1,483240], norm2=[1,897367])
+12/02/2026 - 17:30:48.593 MSK -- [Trace]: В результате действия [LIKE] пользователя [4] с мероприятием [3] было рассчитано 7 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:48.593 MSK -- Ожидаю 15 секунд получения 7 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:48.598 MSK -- Событие { eventA: 1, eventB: 3, score: 0.25, timestamp: 2026-02-12T14:30:48.590Z } проверено
+12/02/2026 - 17:30:48.598 MSK -- Событие { eventA: 2, eventB: 3, score: 0.38, timestamp: 2026-02-12T14:30:48.590Z } проверено
+12/02/2026 - 17:30:48.598 MSK -- Событие { eventA: 3, eventB: 4, score: 0.37, timestamp: 2026-02-12T14:30:48.590Z } проверено
+12/02/2026 - 17:30:48.598 MSK -- Событие { eventA: 3, eventB: 7, score: 0.45, timestamp: 2026-02-12T14:30:48.590Z } проверено
+12/02/2026 - 17:30:48.598 MSK -- Событие { eventA: 3, eventB: 8, score: 0.43, timestamp: 2026-02-12T14:30:48.590Z } проверено
+12/02/2026 - 17:30:48.598 MSK -- Событие { eventA: 3, eventB: 9, score: 0.32, timestamp: 2026-02-12T14:30:48.590Z } проверено
+12/02/2026 - 17:30:48.598 MSK -- Событие { eventA: 3, eventB: 10, score: 0.57, timestamp: 2026-02-12T14:30:48.590Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:49.608 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:49.608 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:30:49.616 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 2.20 }
+12/02/2026 - 17:30:49.616 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 2.20 }
+12/02/2026 - 17:30:49.616 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:49.616 MSK -- Верификация для события закончена: { user: 4, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T18:29:28.868680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:49.616 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:49.616 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:32:36.340680200Z }
+12/02/2026 - 17:30:49.619 MSK -- [Trace]: Событие отправлено: { user: 4, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:32:36.340680200Z }
+12/02/2026 - 17:30:49.619 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:32:36.340680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 8, type: REGISTER, timestamp: 2026-02-09T18:32:36.340Z }
+12/02/2026 - 17:30:49.624 MSK -- Событие REGISTER пользователя 4 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:30:49.624 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [4] для мероприятия [8]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [1] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [1] равен [0,516398] (min=[0,800000], norm1=[1,414214], norm2=[1,095445])
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [2] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [2] равен [0,600000] (min=[1,200000], norm1=[1,414214], norm2=[1,414214])
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [3] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [3] равен [0,572078] (min=[1,200000], norm1=[1,414214], norm2=[1,483240])
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [4] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [4] равен [0,516398] (min=[1,600000], norm1=[1,414214], norm2=[2,190890])
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [5] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [6] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [7] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [7] равен [0,632456] (min=[1,600000], norm1=[1,414214], norm2=[1,788854])
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [9] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [9] равен [0,507093] (min=[1,200000], norm1=[1,414214], norm2=[1,673320])
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [10] для пользователя [4]
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [10] равен [0,596285] (min=[1,600000], norm1=[1,414214], norm2=[1,897367])
+12/02/2026 - 17:30:49.624 MSK -- [Trace]: В результате действия [REGISTER] пользователя [4] с мероприятием [8] было рассчитано 7 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:49.624 MSK -- Ожидаю 15 секунд получения 7 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:49.630 MSK -- Событие { eventA: 1, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:30:49.622Z } проверено
+12/02/2026 - 17:30:49.630 MSK -- Событие { eventA: 2, eventB: 8, score: 0.60, timestamp: 2026-02-12T14:30:49.622Z } проверено
+12/02/2026 - 17:30:49.630 MSK -- Событие { eventA: 3, eventB: 8, score: 0.57, timestamp: 2026-02-12T14:30:49.622Z } проверено
+12/02/2026 - 17:30:49.630 MSK -- Событие { eventA: 4, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:30:49.622Z } проверено
+12/02/2026 - 17:30:49.630 MSK -- Событие { eventA: 7, eventB: 8, score: 0.63, timestamp: 2026-02-12T14:30:49.622Z } проверено
+12/02/2026 - 17:30:49.630 MSK -- Событие { eventA: 8, eventB: 9, score: 0.51, timestamp: 2026-02-12T14:30:49.622Z } проверено
+12/02/2026 - 17:30:49.630 MSK -- Событие { eventA: 8, eventB: 10, score: 0.60, timestamp: 2026-02-12T14:30:49.622Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:50.637 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:50.637 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:30:50.643 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 2.00 }
+12/02/2026 - 17:30:50.643 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 2.00 }
+12/02/2026 - 17:30:50.643 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:50.644 MSK -- Верификация для события закончена: { user: 4, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T18:32:36.340680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:50.644 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:50.644 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T18:37:19.058680200Z }
+12/02/2026 - 17:30:50.646 MSK -- [Trace]: Событие отправлено: { user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T18:37:19.058680200Z }
+12/02/2026 - 17:30:50.646 MSK -- Ожидаю 10 секунд получения события { user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T18:37:19.058680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 10, event: 3, type: REGISTER, timestamp: 2026-02-09T18:37:19.058Z }
+12/02/2026 - 17:30:50.652 MSK -- Событие REGISTER пользователя 10 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:30:50.652 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [10] для мероприятия [3]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [10]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [10]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [10]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [4] равен [0,527046] (min=[2,000000], norm1=[1,732051], norm2=[2,190890])
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [10]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [6] для пользователя [10]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [10]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [7] равен [0,516398] (min=[1,600000], norm1=[1,732051], norm2=[1,788854])
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [10]
+12/02/2026 - 17:30:50.652 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:50.653 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [10]
+12/02/2026 - 17:30:50.653 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:50.653 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [10]
+12/02/2026 - 17:30:50.653 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:50.653 MSK -- [Trace]: В результате действия [REGISTER] пользователя [10] с мероприятием [3] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:50.653 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:50.657 MSK -- Событие { eventA: 3, eventB: 4, score: 0.53, timestamp: 2026-02-12T14:30:50.649Z } проверено
+12/02/2026 - 17:30:50.657 MSK -- Событие { eventA: 3, eventB: 7, score: 0.52, timestamp: 2026-02-12T14:30:50.649Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:51.664 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:51.665 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:30:51.672 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 3.00 }
+12/02/2026 - 17:30:51.672 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 3.00 }
+12/02/2026 - 17:30:51.672 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:51.672 MSK -- Верификация для события закончена: { user: 10, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T18:37:19.058680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:51.672 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:51.672 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T18:43:18.738680200Z }
+12/02/2026 - 17:30:51.674 MSK -- [Trace]: Событие отправлено: { user: 1, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T18:43:18.738680200Z }
+12/02/2026 - 17:30:51.674 MSK -- Ожидаю 10 секунд получения события { user: 1, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T18:43:18.738680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:51.679 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 1, event: 10, type: LIKE, timestamp: 2026-02-09T18:43:18.738Z }
+12/02/2026 - 17:30:51.680 MSK -- Событие LIKE пользователя 1 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:51.680 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [1] для мероприятия [10]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [4] равен [0,561951] (min=[2,400000], norm1=[1,949359], norm2=[2,190890])
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [6] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [7] равен [0,573539] (min=[2,000000], norm1=[1,949359], norm2=[1,788854])
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [1]
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:51.680 MSK -- [Trace]: В результате действия [LIKE] пользователя [1] с мероприятием [10] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:51.680 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:51.685 MSK -- Событие { eventA: 4, eventB: 10, score: 0.56, timestamp: 2026-02-12T14:30:51.677Z } проверено
+12/02/2026 - 17:30:51.685 MSK -- Событие { eventA: 7, eventB: 10, score: 0.57, timestamp: 2026-02-12T14:30:51.677Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:52.695 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:52.695 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:52.702 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 3.80 }
+12/02/2026 - 17:30:52.702 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 3.80 }
+12/02/2026 - 17:30:52.702 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:52.702 MSK -- Верификация для события закончена: { user: 1, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T18:43:18.738680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:52.702 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:52.702 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:50:45.320680200Z }
+12/02/2026 - 17:30:52.705 MSK -- [Trace]: Событие отправлено: { user: 9, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:50:45.320680200Z }
+12/02/2026 - 17:30:52.705 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:50:45.320680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 7, type: REGISTER, timestamp: 2026-02-09T18:50:45.320Z }
+12/02/2026 - 17:30:52.710 MSK -- Событие REGISTER пользователя 9 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:52.710 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [9] для мероприятия [7]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [1] равен [0,384900] (min=[0,800000], norm1=[1,897367], norm2=[1,095445])
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [2] равен [0,447214] (min=[1,200000], norm1=[1,897367], norm2=[1,414214])
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [6] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [6] равен [0,471405] (min=[0,800000], norm1=[1,897367], norm2=[0,894427])
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [8] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [8] равен [0,596285] (min=[1,600000], norm1=[1,897367], norm2=[1,414214])
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [9] равен [0,503953] (min=[1,600000], norm1=[1,897367], norm2=[1,673320])
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [9]
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:52.710 MSK -- [Trace]: В результате действия [REGISTER] пользователя [9] с мероприятием [7] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:52.710 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:52.714 MSK -- Событие { eventA: 1, eventB: 7, score: 0.38, timestamp: 2026-02-12T14:30:52.707Z } проверено
+12/02/2026 - 17:30:52.714 MSK -- Событие { eventA: 2, eventB: 7, score: 0.45, timestamp: 2026-02-12T14:30:52.707Z } проверено
+12/02/2026 - 17:30:52.714 MSK -- Событие { eventA: 6, eventB: 7, score: 0.47, timestamp: 2026-02-12T14:30:52.707Z } проверено
+12/02/2026 - 17:30:52.714 MSK -- Событие { eventA: 7, eventB: 8, score: 0.60, timestamp: 2026-02-12T14:30:52.707Z } проверено
+12/02/2026 - 17:30:52.714 MSK -- Событие { eventA: 7, eventB: 9, score: 0.50, timestamp: 2026-02-12T14:30:52.707Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:53.724 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:53.724 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:53.732 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 3.60 }
+12/02/2026 - 17:30:53.732 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 3.60 }
+12/02/2026 - 17:30:53.732 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:53.732 MSK -- Верификация для события закончена: { user: 9, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T18:50:45.320680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:53.732 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:53.732 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T18:55:12.382680200Z }
+12/02/2026 - 17:30:53.735 MSK -- [Trace]: Событие отправлено: { user: 4, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T18:55:12.382680200Z }
+12/02/2026 - 17:30:53.735 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T18:55:12.382680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 6, type: VIEW, timestamp: 2026-02-09T18:55:12.382Z }
+12/02/2026 - 17:30:53.739 MSK -- Событие VIEW пользователя 4 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:30:53.739 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [4] для мероприятия [6]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [1] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [1] равен [0,666667] (min=[0,800000], norm1=[1,095445], norm2=[1,095445])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [2] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [2] равен [0,516398] (min=[0,800000], norm1=[1,095445], norm2=[1,414214])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [3] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [3] равен [0,210819] (min=[0,400000], norm1=[1,095445], norm2=[1,732051])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [4] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [4] равен [0,166667] (min=[0,400000], norm1=[1,095445], norm2=[2,190890])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [5] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [7] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [7] равен [0,577350] (min=[1,200000], norm1=[1,095445], norm2=[1,897367])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [8] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [8] равен [0,516398] (min=[0,800000], norm1=[1,095445], norm2=[1,414214])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [9] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [9] равен [0,654654] (min=[1,200000], norm1=[1,095445], norm2=[1,673320])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [10] для пользователя [4]
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [10] равен [0,187317] (min=[0,400000], norm1=[1,095445], norm2=[1,949359])
+12/02/2026 - 17:30:53.739 MSK -- [Trace]: В результате действия [VIEW] пользователя [4] с мероприятием [6] было рассчитано 8 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:53.739 MSK -- Ожидаю 15 секунд получения 8 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:53.745 MSK -- [Trace]: Ожидалось событий 8, но получено событий 7. Пробую еще раз.
+12/02/2026 - 17:30:53.747 MSK -- Событие { eventA: 1, eventB: 6, score: 0.67, timestamp: 2026-02-12T14:30:53.737Z } проверено
+12/02/2026 - 17:30:53.747 MSK -- Событие { eventA: 2, eventB: 6, score: 0.52, timestamp: 2026-02-12T14:30:53.737Z } проверено
+12/02/2026 - 17:30:53.747 MSK -- Событие { eventA: 3, eventB: 6, score: 0.21, timestamp: 2026-02-12T14:30:53.737Z } проверено
+12/02/2026 - 17:30:53.747 MSK -- Событие { eventA: 4, eventB: 6, score: 0.17, timestamp: 2026-02-12T14:30:53.737Z } проверено
+12/02/2026 - 17:30:53.748 MSK -- Событие { eventA: 6, eventB: 7, score: 0.58, timestamp: 2026-02-12T14:30:53.737Z } проверено
+12/02/2026 - 17:30:53.748 MSK -- Событие { eventA: 6, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:30:53.737Z } проверено
+12/02/2026 - 17:30:53.748 MSK -- Событие { eventA: 6, eventB: 9, score: 0.65, timestamp: 2026-02-12T14:30:53.737Z } проверено
+12/02/2026 - 17:30:53.748 MSK -- Событие { eventA: 6, eventB: 10, score: 0.19, timestamp: 2026-02-12T14:30:53.737Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:54.757 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:54.757 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:30:54.764 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 1.20 }
+12/02/2026 - 17:30:54.764 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 1.20 }
+12/02/2026 - 17:30:54.764 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:54.764 MSK -- Верификация для события закончена: { user: 4, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T18:55:12.382680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:54.764 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:54.764 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T19:03:38.399680200Z }
+12/02/2026 - 17:30:54.766 MSK -- [Trace]: Событие отправлено: { user: 11, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T19:03:38.399680200Z }
+12/02/2026 - 17:30:54.766 MSK -- Ожидаю 10 секунд получения события { user: 11, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T19:03:38.399680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 11, event: 10, type: LIKE, timestamp: 2026-02-09T19:03:38.399Z }
+12/02/2026 - 17:30:54.771 MSK -- Событие LIKE пользователя 11 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:30:54.771 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [11] для мероприятия [10]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [5] равен [0,223607] (min=[0,400000], norm1=[2,000000], norm2=[0,894427])
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [6] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [11]
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:54.771 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [11]
+12/02/2026 - 17:30:54.772 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [9] равен [0,358569] (min=[1,200000], norm1=[2,000000], norm2=[1,673320])
+12/02/2026 - 17:30:54.772 MSK -- [Trace]: В результате действия [LIKE] пользователя [11] с мероприятием [10] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:54.772 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:54.776 MSK -- Событие { eventA: 5, eventB: 10, score: 0.22, timestamp: 2026-02-12T14:30:54.769Z } проверено
+12/02/2026 - 17:30:54.776 MSK -- Событие { eventA: 9, eventB: 10, score: 0.36, timestamp: 2026-02-12T14:30:54.769Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:55.777 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:55.777 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:30:55.787 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 4.00 }
+12/02/2026 - 17:30:55.787 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 4.00 }
+12/02/2026 - 17:30:55.787 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:55.787 MSK -- Верификация для события закончена: { user: 11, event: 10, type: ACTION_LIKE, timestamp: 2026-02-09T19:03:38.399680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:55.787 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:55.787 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T19:11:21.501680200Z }
+12/02/2026 - 17:30:55.789 MSK -- [Trace]: Событие отправлено: { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T19:11:21.501680200Z }
+12/02/2026 - 17:30:55.789 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T19:11:21.501680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:55.795 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 2, type: VIEW, timestamp: 2026-02-09T19:11:21.501Z }
+12/02/2026 - 17:30:55.795 MSK -- Событие VIEW пользователя 3 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:30:55.795 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:55.795 MSK -- [Trace]: В результате действия [VIEW] пользователя [3] с мероприятием [2] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:55.795 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:30:56.795 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:56.796 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:30:56.802 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 2.00 }
+12/02/2026 - 17:30:56.802 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 2.00 }
+12/02/2026 - 17:30:56.802 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:56.802 MSK -- Верификация для события закончена: { user: 3, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T19:11:21.501680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:56.802 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:56.802 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T19:16:22.963680200Z }
+12/02/2026 - 17:30:56.805 MSK -- [Trace]: Событие отправлено: { user: 7, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T19:16:22.963680200Z }
+12/02/2026 - 17:30:56.805 MSK -- Ожидаю 10 секунд получения события { user: 7, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T19:16:22.963680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 7, event: 1, type: VIEW, timestamp: 2026-02-09T19:16:22.963Z }
+12/02/2026 - 17:30:56.810 MSK -- Событие VIEW пользователя 7 с мероприятием 1 - проверено
+--------------------------------
+12/02/2026 - 17:30:56.810 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [7] для мероприятия [1]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [2] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [3] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [4] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [1] и [4] равен [0,288675] (min=[0,800000], norm1=[1,264911], norm2=[2,190890])
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [5] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [6] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [7] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [8] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [9] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [1] и [10] для пользователя [7]
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:56.810 MSK -- [Trace]: В результате действия [VIEW] пользователя [7] с мероприятием [1] было рассчитано 1 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:56.810 MSK -- Ожидаю 15 секунд получения 1 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:56.815 MSK -- Событие { eventA: 1, eventB: 4, score: 0.29, timestamp: 2026-02-12T14:30:56.807Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:57.830 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:57.830 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [1]
+12/02/2026 - 17:30:57.838 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 1, score: 1.60 }
+12/02/2026 - 17:30:57.838 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 1, score: 1.60 }
+12/02/2026 - 17:30:57.838 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:57.838 MSK -- Верификация для события закончена: { user: 7, event: 1, type: ACTION_VIEW, timestamp: 2026-02-09T19:16:22.963680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:57.838 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:57.838 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T19:20:43.645680200Z }
+12/02/2026 - 17:30:57.841 MSK -- [Trace]: Событие отправлено: { user: 2, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T19:20:43.645680200Z }
+12/02/2026 - 17:30:57.841 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T19:20:43.645680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 5, type: REGISTER, timestamp: 2026-02-09T19:20:43.645Z }
+12/02/2026 - 17:30:57.846 MSK -- Событие REGISTER пользователя 2 с мероприятием 5 - проверено
+--------------------------------
+12/02/2026 - 17:30:57.846 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [2] для мероприятия [5]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [1] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [2] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [2] равен [0,447214] (min=[0,800000], norm1=[1,264911], norm2=[1,414214])
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [3] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [4] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [6] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [7] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [8] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [9] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [9] равен [0,566947] (min=[1,200000], norm1=[1,264911], norm2=[1,673320])
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [10] для пользователя [2]
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:57.846 MSK -- [Trace]: В результате действия [REGISTER] пользователя [2] с мероприятием [5] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:57.846 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:57.850 MSK -- Событие { eventA: 2, eventB: 5, score: 0.45, timestamp: 2026-02-12T14:30:57.843Z } проверено
+12/02/2026 - 17:30:57.850 MSK -- Событие { eventA: 5, eventB: 9, score: 0.57, timestamp: 2026-02-12T14:30:57.843Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:58.854 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:58.854 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [5]
+12/02/2026 - 17:30:58.860 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 5, score: 1.60 }
+12/02/2026 - 17:30:58.860 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 5, score: 1.60 }
+12/02/2026 - 17:30:58.860 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:58.861 MSK -- Верификация для события закончена: { user: 2, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T19:20:43.645680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:58.861 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:58.861 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T19:29:27.872680200Z }
+12/02/2026 - 17:30:58.863 MSK -- [Trace]: Событие отправлено: { user: 1, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T19:29:27.872680200Z }
+12/02/2026 - 17:30:58.863 MSK -- Ожидаю 10 секунд получения события { user: 1, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T19:29:27.872680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 1, event: 7, type: LIKE, timestamp: 2026-02-09T19:29:27.872Z }
+12/02/2026 - 17:30:58.868 MSK -- Событие LIKE пользователя 1 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:58.868 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [1] для мероприятия [7]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [4] равен [0,655610] (min=[2,800000], norm1=[1,949359], norm2=[2,190890])
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [6] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [8] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [1]
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [10] равен [0,564288] (min=[2,200000], norm1=[1,949359], norm2=[2,000000])
+12/02/2026 - 17:30:58.868 MSK -- [Trace]: В результате действия [LIKE] пользователя [1] с мероприятием [7] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:58.868 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:58.872 MSK -- Событие { eventA: 4, eventB: 7, score: 0.66, timestamp: 2026-02-12T14:30:58.866Z } проверено
+12/02/2026 - 17:30:58.872 MSK -- Событие { eventA: 7, eventB: 10, score: 0.56, timestamp: 2026-02-12T14:30:58.866Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:59.874 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:59.874 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:30:59.879 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 3.80 }
+12/02/2026 - 17:30:59.879 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 3.80 }
+12/02/2026 - 17:30:59.879 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:30:59.879 MSK -- Верификация для события закончена: { user: 1, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T19:29:27.872680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:30:59.879 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:30:59.879 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T19:34:50.417680200Z }
+12/02/2026 - 17:30:59.881 MSK -- [Trace]: Событие отправлено: { user: 2, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T19:34:50.417680200Z }
+12/02/2026 - 17:30:59.881 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T19:34:50.417680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 7, type: REGISTER, timestamp: 2026-02-09T19:34:50.417Z }
+12/02/2026 - 17:30:59.887 MSK -- Событие REGISTER пользователя 2 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:30:59.887 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [2] для мероприятия [7]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [2] равен [0,659380] (min=[2,000000], norm1=[2,144761], norm2=[1,414214])
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [5] равен [0,294884] (min=[0,800000], norm1=[2,144761], norm2=[1,264911])
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [6] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [8] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [9] равен [0,668734] (min=[2,400000], norm1=[2,144761], norm2=[1,673320])
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [2]
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:30:59.887 MSK -- [Trace]: В результате действия [REGISTER] пользователя [2] с мероприятием [7] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:30:59.887 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:30:59.892 MSK -- Событие { eventA: 2, eventB: 7, score: 0.66, timestamp: 2026-02-12T14:30:59.884Z } проверено
+12/02/2026 - 17:30:59.892 MSK -- Событие { eventA: 5, eventB: 7, score: 0.29, timestamp: 2026-02-12T14:30:59.884Z } проверено
+12/02/2026 - 17:30:59.892 MSK -- Событие { eventA: 7, eventB: 9, score: 0.67, timestamp: 2026-02-12T14:30:59.884Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:00.893 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:00.893 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:31:00.899 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 4.60 }
+12/02/2026 - 17:31:00.899 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 4.60 }
+12/02/2026 - 17:31:00.899 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:00.899 MSK -- Верификация для события закончена: { user: 2, event: 7, type: ACTION_REGISTER, timestamp: 2026-02-09T19:34:50.417680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:00.899 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:00.899 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T19:42:10.615680200Z }
+12/02/2026 - 17:31:00.902 MSK -- [Trace]: Событие отправлено: { user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T19:42:10.615680200Z }
+12/02/2026 - 17:31:00.902 MSK -- Ожидаю 10 секунд получения события { user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T19:42:10.615680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 10, event: 2, type: REGISTER, timestamp: 2026-02-09T19:42:10.615Z }
+12/02/2026 - 17:31:00.907 MSK -- Событие REGISTER пользователя 10 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:31:00.907 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [10] для мероприятия [2]
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [1] для пользователя [10]
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [3] для пользователя [10]
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [3] равен [0,552052] (min=[1,600000], norm1=[1,673320], norm2=[1,732051])
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [4] для пользователя [10]
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [4] равен [0,436436] (min=[1,600000], norm1=[1,673320], norm2=[2,190890])
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [5] для пользователя [10]
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [6] для пользователя [10]
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [7] для пользователя [10]
+12/02/2026 - 17:31:00.907 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [7] равен [0,668734] (min=[2,400000], norm1=[1,673320], norm2=[2,144761])
+12/02/2026 - 17:31:00.908 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [8] для пользователя [10]
+12/02/2026 - 17:31:00.908 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:00.908 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [9] для пользователя [10]
+12/02/2026 - 17:31:00.908 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:00.908 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [10] для пользователя [10]
+12/02/2026 - 17:31:00.908 MSK -- [Trace]: Тестер: пользователь [10] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:00.908 MSK -- [Trace]: В результате действия [REGISTER] пользователя [10] с мероприятием [2] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:00.908 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:00.912 MSK -- Событие { eventA: 2, eventB: 3, score: 0.55, timestamp: 2026-02-12T14:31:00.904Z } проверено
+12/02/2026 - 17:31:00.912 MSK -- Событие { eventA: 2, eventB: 4, score: 0.44, timestamp: 2026-02-12T14:31:00.904Z } проверено
+12/02/2026 - 17:31:00.912 MSK -- Событие { eventA: 2, eventB: 7, score: 0.67, timestamp: 2026-02-12T14:31:00.904Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:01.926 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:01.926 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:31:01.932 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 2.80 }
+12/02/2026 - 17:31:01.932 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 2.80 }
+12/02/2026 - 17:31:01.932 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:01.932 MSK -- Верификация для события закончена: { user: 10, event: 2, type: ACTION_REGISTER, timestamp: 2026-02-09T19:42:10.615680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:01.932 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:01.932 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T19:46:00.074680200Z }
+12/02/2026 - 17:31:01.935 MSK -- [Trace]: Событие отправлено: { user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T19:46:00.074680200Z }
+12/02/2026 - 17:31:01.935 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T19:46:00.074680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:01.939 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 10, type: VIEW, timestamp: 2026-02-09T19:46:00.074Z }
+12/02/2026 - 17:31:01.940 MSK -- Событие VIEW пользователя 2 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:31:01.940 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [2] для мероприятия [10]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [2] равен [0,341882] (min=[1,200000], norm1=[2,097618], norm2=[1,673320])
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [5] равен [0,301511] (min=[0,800000], norm1=[2,097618], norm2=[1,264911])
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [6] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [7] равен [0,577920] (min=[2,600000], norm1=[2,097618], norm2=[2,144761])
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [2]
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [9] равен [0,455842] (min=[1,600000], norm1=[2,097618], norm2=[1,673320])
+12/02/2026 - 17:31:01.940 MSK -- [Trace]: В результате действия [VIEW] пользователя [2] с мероприятием [10] было рассчитано 4 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:01.940 MSK -- Ожидаю 15 секунд получения 4 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:01.944 MSK -- Событие { eventA: 2, eventB: 10, score: 0.34, timestamp: 2026-02-12T14:31:01.937Z } проверено
+12/02/2026 - 17:31:01.944 MSK -- Событие { eventA: 5, eventB: 10, score: 0.30, timestamp: 2026-02-12T14:31:01.937Z } проверено
+12/02/2026 - 17:31:01.944 MSK -- Событие { eventA: 7, eventB: 10, score: 0.58, timestamp: 2026-02-12T14:31:01.937Z } проверено
+12/02/2026 - 17:31:01.944 MSK -- Событие { eventA: 9, eventB: 10, score: 0.46, timestamp: 2026-02-12T14:31:01.937Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:02.958 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:02.958 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:31:02.965 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 4.40 }
+12/02/2026 - 17:31:02.965 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 4.40 }
+12/02/2026 - 17:31:02.965 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:02.965 MSK -- Верификация для события закончена: { user: 2, event: 10, type: ACTION_VIEW, timestamp: 2026-02-09T19:46:00.074680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:02.965 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:02.965 MSK -- Отправляю событие о действии пользователя: { user: 8, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:48:05.813680200Z }
+12/02/2026 - 17:31:02.968 MSK -- [Trace]: Событие отправлено: { user: 8, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:48:05.813680200Z }
+12/02/2026 - 17:31:02.968 MSK -- Ожидаю 10 секунд получения события { user: 8, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:48:05.813680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 8, event: 4, type: VIEW, timestamp: 2026-02-09T19:48:05.813Z }
+12/02/2026 - 17:31:02.973 MSK -- Событие VIEW пользователя 8 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:31:02.973 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [8] для мероприятия [4]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [1] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [2] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [3] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [3] равен [0,607644] (min=[2,400000], norm1=[2,280351], norm2=[1,732051])
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [5] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [6] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [7] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [8] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [9] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пользователь [8] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [10] для пользователя [8]
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [10] равен [0,585369] (min=[2,800000], norm1=[2,280351], norm2=[2,097618])
+12/02/2026 - 17:31:02.973 MSK -- [Trace]: В результате действия [VIEW] пользователя [8] с мероприятием [4] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:02.973 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:02.977 MSK -- Событие { eventA: 3, eventB: 4, score: 0.61, timestamp: 2026-02-12T14:31:02.970Z } проверено
+12/02/2026 - 17:31:02.977 MSK -- Событие { eventA: 4, eventB: 10, score: 0.59, timestamp: 2026-02-12T14:31:02.970Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:03.983 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:03.983 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:31:03.990 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 5.20 }
+12/02/2026 - 17:31:03.990 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 5.20 }
+12/02/2026 - 17:31:03.990 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:03.990 MSK -- Верификация для события закончена: { user: 8, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T19:48:05.813680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:03.990 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:03.990 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:52:42.229680200Z }
+12/02/2026 - 17:31:03.992 MSK -- [Trace]: Событие отправлено: { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:52:42.229680200Z }
+12/02/2026 - 17:31:03.992 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:52:42.229680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:03.997 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 3, type: VIEW, timestamp: 2026-02-09T19:52:42.229Z }
+12/02/2026 - 17:31:03.997 MSK -- Событие VIEW пользователя 3 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:31:03.997 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:03.997 MSK -- [Trace]: В результате действия [VIEW] пользователя [3] с мероприятием [3] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:03.997 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:31:05.002 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:05.002 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:31:05.007 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 3.00 }
+12/02/2026 - 17:31:05.007 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 3.00 }
+12/02/2026 - 17:31:05.007 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:05.007 MSK -- Верификация для события закончена: { user: 3, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T19:52:42.229680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:05.007 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:05.007 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T19:57:52.491680200Z }
+12/02/2026 - 17:31:05.010 MSK -- [Trace]: Событие отправлено: { user: 4, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T19:57:52.491680200Z }
+12/02/2026 - 17:31:05.010 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T19:57:52.491680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 6, type: REGISTER, timestamp: 2026-02-09T19:57:52.491Z }
+12/02/2026 - 17:31:05.014 MSK -- Событие REGISTER пользователя 4 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:31:05.014 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [4] для мероприятия [6]
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [1] для пользователя [4]
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [1] равен [0,500000] (min=[0,800000], norm1=[1,264911], norm2=[1,264911])
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [2] для пользователя [4]
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [2] равен [0,377964] (min=[0,800000], norm1=[1,264911], norm2=[1,673320])
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [3] для пользователя [4]
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [3] равен [0,365148] (min=[0,800000], norm1=[1,264911], norm2=[1,732051])
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [4] для пользователя [4]
+12/02/2026 - 17:31:05.014 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [4] равен [0,277350] (min=[0,800000], norm1=[1,264911], norm2=[2,280351])
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [5] для пользователя [4]
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [7] для пользователя [4]
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [7] равен [0,589768] (min=[1,600000], norm1=[1,264911], norm2=[2,144761])
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [8] для пользователя [4]
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [8] равен [0,670820] (min=[1,200000], norm1=[1,264911], norm2=[1,414214])
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [9] для пользователя [4]
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [9] равен [0,755929] (min=[1,600000], norm1=[1,264911], norm2=[1,673320])
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [10] для пользователя [4]
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [10] равен [0,301511] (min=[0,800000], norm1=[1,264911], norm2=[2,097618])
+12/02/2026 - 17:31:05.015 MSK -- [Trace]: В результате действия [REGISTER] пользователя [4] с мероприятием [6] было рассчитано 8 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:05.015 MSK -- Ожидаю 15 секунд получения 8 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 1, eventB: 6, score: 0.50, timestamp: 2026-02-12T14:31:05.012Z } проверено
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 2, eventB: 6, score: 0.38, timestamp: 2026-02-12T14:31:05.012Z } проверено
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 3, eventB: 6, score: 0.37, timestamp: 2026-02-12T14:31:05.012Z } проверено
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 4, eventB: 6, score: 0.28, timestamp: 2026-02-12T14:31:05.013Z } проверено
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 6, eventB: 7, score: 0.59, timestamp: 2026-02-12T14:31:05.013Z } проверено
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 6, eventB: 8, score: 0.67, timestamp: 2026-02-12T14:31:05.013Z } проверено
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 6, eventB: 9, score: 0.76, timestamp: 2026-02-12T14:31:05.013Z } проверено
+12/02/2026 - 17:31:05.020 MSK -- Событие { eventA: 6, eventB: 10, score: 0.30, timestamp: 2026-02-12T14:31:05.013Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:06.032 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:06.032 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:31:06.038 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 1.60 }
+12/02/2026 - 17:31:06.038 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 1.60 }
+12/02/2026 - 17:31:06.038 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:06.038 MSK -- Верификация для события закончена: { user: 4, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T19:57:52.491680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:06.038 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:06.038 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T20:04:20.847680200Z }
+12/02/2026 - 17:31:06.041 MSK -- [Trace]: Событие отправлено: { user: 6, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T20:04:20.847680200Z }
+12/02/2026 - 17:31:06.041 MSK -- Ожидаю 10 секунд получения события { user: 6, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T20:04:20.847680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:06.046 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 6, event: 3, type: VIEW, timestamp: 2026-02-09T20:04:20.847Z }
+12/02/2026 - 17:31:06.046 MSK -- Событие VIEW пользователя 6 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:31:06.046 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:06.046 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [6] для мероприятия [3]
+12/02/2026 - 17:31:06.046 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [6]
+12/02/2026 - 17:31:06.046 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [1] равен [0,342997] (min=[0,800000], norm1=[1,843909], norm2=[1,264911])
+12/02/2026 - 17:31:06.046 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [6]
+12/02/2026 - 17:31:06.046 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:06.046 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [6]
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [6]
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [5] равен [0,171499] (min=[0,400000], norm1=[1,843909], norm2=[1,264911])
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [6] для пользователя [6]
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [6]
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [6]
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [6]
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [6]
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:06.047 MSK -- [Trace]: В результате действия [VIEW] пользователя [6] с мероприятием [3] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:06.047 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:06.052 MSK -- Событие { eventA: 1, eventB: 3, score: 0.34, timestamp: 2026-02-12T14:31:06.044Z } проверено
+12/02/2026 - 17:31:06.052 MSK -- Событие { eventA: 3, eventB: 5, score: 0.17, timestamp: 2026-02-12T14:31:06.044Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:07.062 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:07.062 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:31:07.069 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 3.40 }
+12/02/2026 - 17:31:07.069 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 3.40 }
+12/02/2026 - 17:31:07.069 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:07.069 MSK -- Верификация для события закончена: { user: 6, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T20:04:20.847680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:07.069 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:07.069 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T20:06:33.503680200Z }
+12/02/2026 - 17:31:07.072 MSK -- [Trace]: Событие отправлено: { user: 2, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T20:06:33.503680200Z }
+12/02/2026 - 17:31:07.072 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T20:06:33.503680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 4, type: VIEW, timestamp: 2026-02-09T20:06:33.503Z }
+12/02/2026 - 17:31:07.079 MSK -- Событие VIEW пользователя 2 с мероприятием 4 - проверено
+--------------------------------
+12/02/2026 - 17:31:07.079 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [2] для мероприятия [4]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [1] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [2] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [2] равен [0,505076] (min=[2,000000], norm1=[2,366432], norm2=[1,673320])
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [3] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [5] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [5] равен [0,133631] (min=[0,400000], norm1=[2,366432], norm2=[1,264911])
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [6] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [7] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [7] равен [0,630488] (min=[3,200000], norm1=[2,366432], norm2=[2,144761])
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [8] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [9] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [9] равен [0,303046] (min=[1,200000], norm1=[2,366432], norm2=[1,673320])
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [4] и [10] для пользователя [2]
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [4] и [10] равен [0,644658] (min=[3,200000], norm1=[2,366432], norm2=[2,097618])
+12/02/2026 - 17:31:07.079 MSK -- [Trace]: В результате действия [VIEW] пользователя [2] с мероприятием [4] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:07.079 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:07.085 MSK -- Событие { eventA: 2, eventB: 4, score: 0.51, timestamp: 2026-02-12T14:31:07.076Z } проверено
+12/02/2026 - 17:31:07.085 MSK -- Событие { eventA: 4, eventB: 5, score: 0.13, timestamp: 2026-02-12T14:31:07.076Z } проверено
+12/02/2026 - 17:31:07.085 MSK -- Событие { eventA: 4, eventB: 7, score: 0.63, timestamp: 2026-02-12T14:31:07.076Z } проверено
+12/02/2026 - 17:31:07.085 MSK -- Событие { eventA: 4, eventB: 9, score: 0.30, timestamp: 2026-02-12T14:31:07.076Z } проверено
+12/02/2026 - 17:31:07.085 MSK -- Событие { eventA: 4, eventB: 10, score: 0.64, timestamp: 2026-02-12T14:31:07.076Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:08.097 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:08.097 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [4]
+12/02/2026 - 17:31:08.104 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 4, score: 5.60 }
+12/02/2026 - 17:31:08.104 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 4, score: 5.60 }
+12/02/2026 - 17:31:08.104 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:08.104 MSK -- Верификация для события закончена: { user: 2, event: 4, type: ACTION_VIEW, timestamp: 2026-02-09T20:06:33.503680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:08.104 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:08.104 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T20:08:27.681680200Z }
+12/02/2026 - 17:31:08.107 MSK -- [Trace]: Событие отправлено: { user: 6, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T20:08:27.681680200Z }
+12/02/2026 - 17:31:08.107 MSK -- Ожидаю 10 секунд получения события { user: 6, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T20:08:27.681680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 6, event: 8, type: REGISTER, timestamp: 2026-02-09T20:08:27.681Z }
+12/02/2026 - 17:31:08.111 MSK -- Событие REGISTER пользователя 6 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:31:08.111 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [6] для мероприятия [8]
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [1] для пользователя [6]
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [1] равен [0,566947] (min=[1,200000], norm1=[1,673320], norm2=[1,264911])
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [2] для пользователя [6]
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [3] для пользователя [6]
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [3] равен [0,518563] (min=[1,600000], norm1=[1,673320], norm2=[1,843909])
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [4] для пользователя [6]
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [5] для пользователя [6]
+12/02/2026 - 17:31:08.111 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [5] равен [0,188982] (min=[0,400000], norm1=[1,673320], norm2=[1,264911])
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [6] для пользователя [6]
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [7] для пользователя [6]
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [9] для пользователя [6]
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [10] для пользователя [6]
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:08.112 MSK -- [Trace]: В результате действия [REGISTER] пользователя [6] с мероприятием [8] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:08.112 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:08.117 MSK -- Событие { eventA: 1, eventB: 8, score: 0.57, timestamp: 2026-02-12T14:31:08.110Z } проверено
+12/02/2026 - 17:31:08.117 MSK -- Событие { eventA: 3, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:31:08.110Z } проверено
+12/02/2026 - 17:31:08.117 MSK -- Событие { eventA: 5, eventB: 8, score: 0.19, timestamp: 2026-02-12T14:31:08.110Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:09.128 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:09.128 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:31:09.136 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 2.80 }
+12/02/2026 - 17:31:09.136 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 2.80 }
+12/02/2026 - 17:31:09.136 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:09.136 MSK -- Верификация для события закончена: { user: 6, event: 8, type: ACTION_REGISTER, timestamp: 2026-02-09T20:08:27.681680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:09.136 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:09.136 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T20:12:33.305680200Z }
+12/02/2026 - 17:31:09.139 MSK -- [Trace]: Событие отправлено: { user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T20:12:33.305680200Z }
+12/02/2026 - 17:31:09.139 MSK -- Ожидаю 10 секунд получения события { user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T20:12:33.305680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 1, event: 8, type: VIEW, timestamp: 2026-02-09T20:12:33.305Z }
+12/02/2026 - 17:31:09.143 MSK -- Событие VIEW пользователя 1 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:31:09.143 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [1] для мероприятия [8]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [1] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [2] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [3] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [4] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [4] равен [0,472456] (min=[2,000000], norm1=[1,788854], norm2=[2,366432])
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [5] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [6] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [7] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [7] равен [0,521286] (min=[2,000000], norm1=[1,788854], norm2=[2,144761])
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [9] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [10] для пользователя [1]
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [10] равен [0,533002] (min=[2,000000], norm1=[1,788854], norm2=[2,097618])
+12/02/2026 - 17:31:09.143 MSK -- [Trace]: В результате действия [VIEW] пользователя [1] с мероприятием [8] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:09.143 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:09.149 MSK -- Событие { eventA: 4, eventB: 8, score: 0.47, timestamp: 2026-02-12T14:31:09.141Z } проверено
+12/02/2026 - 17:31:09.149 MSK -- Событие { eventA: 7, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:31:09.141Z } проверено
+12/02/2026 - 17:31:09.149 MSK -- Событие { eventA: 8, eventB: 10, score: 0.53, timestamp: 2026-02-12T14:31:09.141Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:10.157 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:10.157 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:31:10.163 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 3.20 }
+12/02/2026 - 17:31:10.163 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 3.20 }
+12/02/2026 - 17:31:10.163 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:10.163 MSK -- Верификация для события закончена: { user: 1, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T20:12:33.305680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:10.163 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:10.163 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:16:27.692680200Z }
+12/02/2026 - 17:31:10.165 MSK -- [Trace]: Событие отправлено: { user: 7, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:16:27.692680200Z }
+12/02/2026 - 17:31:10.165 MSK -- Ожидаю 10 секунд получения события { user: 7, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:16:27.692680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 7, event: 6, type: REGISTER, timestamp: 2026-02-09T20:16:27.692Z }
+12/02/2026 - 17:31:10.170 MSK -- Событие REGISTER пользователя 7 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:31:10.170 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [7] для мероприятия [6]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [1] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [1] равен [0,612372] (min=[1,200000], norm1=[1,549193], norm2=[1,264911])
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [2] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [3] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [4] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [4] равен [0,436436] (min=[1,600000], norm1=[1,549193], norm2=[2,366432])
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [5] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [7] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [8] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [9] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [10] для пользователя [7]
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:10.170 MSK -- [Trace]: В результате действия [REGISTER] пользователя [7] с мероприятием [6] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:10.171 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:10.175 MSK -- Событие { eventA: 1, eventB: 6, score: 0.61, timestamp: 2026-02-12T14:31:10.168Z } проверено
+12/02/2026 - 17:31:10.175 MSK -- Событие { eventA: 4, eventB: 6, score: 0.44, timestamp: 2026-02-12T14:31:10.168Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:11.185 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:11.185 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:31:11.202 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 2.40 }
+12/02/2026 - 17:31:11.202 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 2.40 }
+12/02/2026 - 17:31:11.202 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:11.202 MSK -- Верификация для события закончена: { user: 7, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:16:27.692680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:11.202 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:11.202 MSK -- Отправляю событие о действии пользователя: { user: 3, event: 8, type: ACTION_LIKE, timestamp: 2026-02-09T20:24:33.573680200Z }
+12/02/2026 - 17:31:11.206 MSK -- [Trace]: Событие отправлено: { user: 3, event: 8, type: ACTION_LIKE, timestamp: 2026-02-09T20:24:33.573680200Z }
+12/02/2026 - 17:31:11.206 MSK -- Ожидаю 10 секунд получения события { user: 3, event: 8, type: ACTION_LIKE, timestamp: 2026-02-09T20:24:33.573680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 3, event: 8, type: LIKE, timestamp: 2026-02-09T20:24:33.573Z }
+12/02/2026 - 17:31:11.212 MSK -- Событие LIKE пользователя 3 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:31:11.212 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [3] для мероприятия [8]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [1] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [2] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [2] равен [0,388922] (min=[1,200000], norm1=[1,843909], norm2=[1,673320])
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [3] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [3] равен [0,470588] (min=[1,600000], norm1=[1,843909], norm2=[1,843909])
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [4] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [4] равен [0,458349] (min=[2,000000], norm1=[1,843909], norm2=[2,366432])
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [5] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [6] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [7] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [7] равен [0,505722] (min=[2,000000], norm1=[1,843909], norm2=[2,144761])
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [9] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пользователь [3] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [10] для пользователя [3]
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [10] равен [0,517088] (min=[2,000000], norm1=[1,843909], norm2=[2,097618])
+12/02/2026 - 17:31:11.212 MSK -- [Trace]: В результате действия [LIKE] пользователя [3] с мероприятием [8] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:11.212 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:11.217 MSK -- Событие { eventA: 2, eventB: 8, score: 0.39, timestamp: 2026-02-12T14:31:11.209Z } проверено
+12/02/2026 - 17:31:11.217 MSK -- Событие { eventA: 3, eventB: 8, score: 0.47, timestamp: 2026-02-12T14:31:11.209Z } проверено
+12/02/2026 - 17:31:11.217 MSK -- Событие { eventA: 4, eventB: 8, score: 0.46, timestamp: 2026-02-12T14:31:11.209Z } проверено
+12/02/2026 - 17:31:11.217 MSK -- Событие { eventA: 7, eventB: 8, score: 0.51, timestamp: 2026-02-12T14:31:11.209Z } проверено
+12/02/2026 - 17:31:11.217 MSK -- Событие { eventA: 8, eventB: 10, score: 0.52, timestamp: 2026-02-12T14:31:11.209Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:12.229 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:12.229 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:31:12.236 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 3.40 }
+12/02/2026 - 17:31:12.236 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 3.40 }
+12/02/2026 - 17:31:12.236 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:12.236 MSK -- Верификация для события закончена: { user: 3, event: 8, type: ACTION_LIKE, timestamp: 2026-02-09T20:24:33.573680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:12.236 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:12.236 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T20:30:45.219680200Z }
+12/02/2026 - 17:31:12.240 MSK -- [Trace]: Событие отправлено: { user: 9, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T20:30:45.219680200Z }
+12/02/2026 - 17:31:12.240 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T20:30:45.219680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 5, type: REGISTER, timestamp: 2026-02-09T20:30:45.219Z }
+12/02/2026 - 17:31:12.244 MSK -- Событие REGISTER пользователя 9 с мероприятием 5 - проверено
+--------------------------------
+12/02/2026 - 17:31:12.244 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [9] для мероприятия [5]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [1] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [1] равен [0,408248] (min=[0,800000], norm1=[1,549193], norm2=[1,264911])
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [2] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [2] равен [0,462910] (min=[1,200000], norm1=[1,549193], norm2=[1,673320])
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [3] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [4] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [6] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [6] равен [0,333333] (min=[0,800000], norm1=[1,549193], norm2=[1,549193])
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [7] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [7] равен [0,481543] (min=[1,600000], norm1=[1,549193], norm2=[2,144761])
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [8] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [8] равен [0,280056] (min=[0,800000], norm1=[1,549193], norm2=[1,843909])
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [9] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [9] равен [0,771517] (min=[2,000000], norm1=[1,549193], norm2=[1,673320])
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [10] для пользователя [9]
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:12.244 MSK -- [Trace]: В результате действия [REGISTER] пользователя [9] с мероприятием [5] было рассчитано 6 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:12.244 MSK -- Ожидаю 15 секунд получения 6 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:12.250 MSK -- Событие { eventA: 1, eventB: 5, score: 0.41, timestamp: 2026-02-12T14:31:12.242Z } проверено
+12/02/2026 - 17:31:12.250 MSK -- Событие { eventA: 2, eventB: 5, score: 0.46, timestamp: 2026-02-12T14:31:12.242Z } проверено
+12/02/2026 - 17:31:12.250 MSK -- Событие { eventA: 5, eventB: 6, score: 0.33, timestamp: 2026-02-12T14:31:12.242Z } проверено
+12/02/2026 - 17:31:12.250 MSK -- Событие { eventA: 5, eventB: 7, score: 0.48, timestamp: 2026-02-12T14:31:12.242Z } проверено
+12/02/2026 - 17:31:12.250 MSK -- Событие { eventA: 5, eventB: 8, score: 0.28, timestamp: 2026-02-12T14:31:12.242Z } проверено
+12/02/2026 - 17:31:12.250 MSK -- Событие { eventA: 5, eventB: 9, score: 0.77, timestamp: 2026-02-12T14:31:12.242Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:13.256 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:13.256 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [5]
+12/02/2026 - 17:31:13.263 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 5, score: 2.40 }
+12/02/2026 - 17:31:13.263 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 5, score: 2.40 }
+12/02/2026 - 17:31:13.263 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:13.263 MSK -- Верификация для события закончена: { user: 9, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T20:30:45.219680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:13.263 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:13.263 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T20:37:30.578680200Z }
+12/02/2026 - 17:31:13.267 MSK -- [Trace]: Событие отправлено: { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T20:37:30.578680200Z }
+12/02/2026 - 17:31:13.267 MSK -- Ожидаю 10 секунд получения события { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T20:37:30.578680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 6, event: 9, type: VIEW, timestamp: 2026-02-09T20:37:30.578Z }
+12/02/2026 - 17:31:13.272 MSK -- Событие VIEW пользователя 6 с мероприятием 9 - проверено
+--------------------------------
+12/02/2026 - 17:31:13.272 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [6] для мероприятия [9]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [1] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [9] и [1] равен [0,530330] (min=[1,200000], norm1=[1,788854], norm2=[1,264911])
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [2] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [3] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [9] и [3] равен [0,363803] (min=[1,200000], norm1=[1,788854], norm2=[1,843909])
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [4] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [5] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [9] и [5] равен [0,866025] (min=[2,400000], norm1=[1,788854], norm2=[1,549193])
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [6] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [7] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [8] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [9] и [8] равен [0,485071] (min=[1,600000], norm1=[1,788854], norm2=[1,843909])
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [9] и [10] для пользователя [6]
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:13.272 MSK -- [Trace]: В результате действия [VIEW] пользователя [6] с мероприятием [9] было рассчитано 4 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:13.272 MSK -- Ожидаю 15 секунд получения 4 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:13.278 MSK -- Событие { eventA: 1, eventB: 9, score: 0.53, timestamp: 2026-02-12T14:31:13.270Z } проверено
+12/02/2026 - 17:31:13.278 MSK -- Событие { eventA: 3, eventB: 9, score: 0.36, timestamp: 2026-02-12T14:31:13.270Z } проверено
+12/02/2026 - 17:31:13.278 MSK -- Событие { eventA: 5, eventB: 9, score: 0.87, timestamp: 2026-02-12T14:31:13.270Z } проверено
+12/02/2026 - 17:31:13.278 MSK -- Событие { eventA: 8, eventB: 9, score: 0.49, timestamp: 2026-02-12T14:31:13.270Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:14.284 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:14.284 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [9]
+12/02/2026 - 17:31:14.292 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 9, score: 3.20 }
+12/02/2026 - 17:31:14.292 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 9, score: 3.20 }
+12/02/2026 - 17:31:14.292 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:14.292 MSK -- Верификация для события закончена: { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T20:37:30.578680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:14.292 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:14.292 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T20:46:48.533680200Z }
+12/02/2026 - 17:31:14.295 MSK -- [Trace]: Событие отправлено: { user: 2, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T20:46:48.533680200Z }
+12/02/2026 - 17:31:14.295 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T20:46:48.533680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 10, type: REGISTER, timestamp: 2026-02-09T20:46:48.533Z }
+12/02/2026 - 17:31:14.300 MSK -- Событие REGISTER пользователя 2 с мероприятием 10 - проверено
+--------------------------------
+12/02/2026 - 17:31:14.300 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [2] для мероприятия [10]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [1] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [2] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [2] равен [0,436436] (min=[1,600000], norm1=[2,190890], norm2=[1,673320])
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [3] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [4] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [4] равен [0,617213] (min=[3,200000], norm1=[2,190890], norm2=[2,366432])
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [5] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [5] равен [0,353553] (min=[1,200000], norm1=[2,190890], norm2=[1,549193])
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [6] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [7] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [7] равен [0,638442] (min=[3,000000], norm1=[2,190890], norm2=[2,144761])
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [8] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [10] и [9] для пользователя [2]
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [10] и [9] равен [0,510310] (min=[2,000000], norm1=[2,190890], norm2=[1,788854])
+12/02/2026 - 17:31:14.300 MSK -- [Trace]: В результате действия [REGISTER] пользователя [2] с мероприятием [10] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:14.300 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:14.306 MSK -- Событие { eventA: 2, eventB: 10, score: 0.44, timestamp: 2026-02-12T14:31:14.298Z } проверено
+12/02/2026 - 17:31:14.306 MSK -- Событие { eventA: 4, eventB: 10, score: 0.62, timestamp: 2026-02-12T14:31:14.298Z } проверено
+12/02/2026 - 17:31:14.306 MSK -- Событие { eventA: 5, eventB: 10, score: 0.35, timestamp: 2026-02-12T14:31:14.298Z } проверено
+12/02/2026 - 17:31:14.306 MSK -- Событие { eventA: 7, eventB: 10, score: 0.64, timestamp: 2026-02-12T14:31:14.298Z } проверено
+12/02/2026 - 17:31:14.306 MSK -- Событие { eventA: 9, eventB: 10, score: 0.51, timestamp: 2026-02-12T14:31:14.298Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:15.311 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:15.312 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [10]
+12/02/2026 - 17:31:15.317 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 10, score: 4.80 }
+12/02/2026 - 17:31:15.317 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 10, score: 4.80 }
+12/02/2026 - 17:31:15.317 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:15.317 MSK -- Верификация для события закончена: { user: 2, event: 10, type: ACTION_REGISTER, timestamp: 2026-02-09T20:46:48.533680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:15.317 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:15.317 MSK -- Отправляю событие о действии пользователя: { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T20:52:43.779680200Z }
+12/02/2026 - 17:31:15.321 MSK -- [Trace]: Событие отправлено: { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T20:52:43.779680200Z }
+12/02/2026 - 17:31:15.321 MSK -- Ожидаю 10 секунд получения события { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T20:52:43.779680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:15.325 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 10, event: 7, type: VIEW, timestamp: 2026-02-09T20:52:43.779Z }
+12/02/2026 - 17:31:15.325 MSK -- Событие VIEW пользователя 10 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:31:15.325 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:15.325 MSK -- [Trace]: В результате действия [VIEW] пользователя [10] с мероприятием [7] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:15.325 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:31:16.336 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:16.336 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:31:16.342 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 4.60 }
+12/02/2026 - 17:31:16.342 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 4.60 }
+12/02/2026 - 17:31:16.342 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:16.342 MSK -- Верификация для события закончена: { user: 10, event: 7, type: ACTION_VIEW, timestamp: 2026-02-09T20:52:43.779680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:16.342 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:16.342 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:59:25.513680200Z }
+12/02/2026 - 17:31:16.344 MSK -- [Trace]: Событие отправлено: { user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:59:25.513680200Z }
+12/02/2026 - 17:31:16.344 MSK -- Ожидаю 10 секунд получения события { user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:59:25.513680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 5, event: 6, type: REGISTER, timestamp: 2026-02-09T20:59:25.513Z }
+12/02/2026 - 17:31:16.349 MSK -- Событие REGISTER пользователя 5 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:31:16.349 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [5] для мероприятия [6]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [1] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [2] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [3] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [4] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [4] равен [0,566947] (min=[2,400000], norm1=[1,788854], norm2=[2,366432])
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [5] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [7] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [7] равен [0,521286] (min=[2,000000], norm1=[1,788854], norm2=[2,144761])
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [8] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [9] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [10] для пользователя [5]
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:16.349 MSK -- [Trace]: В результате действия [REGISTER] пользователя [5] с мероприятием [6] было рассчитано 2 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:16.349 MSK -- Ожидаю 15 секунд получения 2 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:16.353 MSK -- Событие { eventA: 4, eventB: 6, score: 0.57, timestamp: 2026-02-12T14:31:16.347Z } проверено
+12/02/2026 - 17:31:16.353 MSK -- Событие { eventA: 6, eventB: 7, score: 0.52, timestamp: 2026-02-12T14:31:16.347Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:17.365 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:17.365 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:31:17.372 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 3.20 }
+12/02/2026 - 17:31:17.372 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 3.20 }
+12/02/2026 - 17:31:17.372 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:17.372 MSK -- Верификация для события закончена: { user: 5, event: 6, type: ACTION_REGISTER, timestamp: 2026-02-09T20:59:25.513680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:17.372 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:17.372 MSK -- Отправляю событие о действии пользователя: { user: 1, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T21:09:08.538680200Z }
+12/02/2026 - 17:31:17.374 MSK -- [Trace]: Событие отправлено: { user: 1, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T21:09:08.538680200Z }
+12/02/2026 - 17:31:17.374 MSK -- Ожидаю 10 секунд получения события { user: 1, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T21:09:08.538680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 1, event: 2, type: VIEW, timestamp: 2026-02-09T21:09:08.538Z }
+12/02/2026 - 17:31:17.377 MSK -- Событие VIEW пользователя 1 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:31:17.377 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [1] для мероприятия [2]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [1] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [3] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [4] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [4] равен [0,566947] (min=[2,400000], norm1=[1,788854], norm2=[2,366432])
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [5] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [6] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [7] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [7] равен [0,729800] (min=[2,800000], norm1=[1,788854], norm2=[2,144761])
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [8] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [8] равен [0,485071] (min=[1,600000], norm1=[1,788854], norm2=[1,843909])
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [9] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пользователь [1] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [10] для пользователя [1]
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [10] равен [0,510310] (min=[2,000000], norm1=[1,788854], norm2=[2,190890])
+12/02/2026 - 17:31:17.377 MSK -- [Trace]: В результате действия [VIEW] пользователя [1] с мероприятием [2] было рассчитано 4 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:17.377 MSK -- Ожидаю 15 секунд получения 4 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:17.382 MSK -- Событие { eventA: 2, eventB: 4, score: 0.57, timestamp: 2026-02-12T14:31:17.376Z } проверено
+12/02/2026 - 17:31:17.382 MSK -- Событие { eventA: 2, eventB: 7, score: 0.73, timestamp: 2026-02-12T14:31:17.376Z } проверено
+12/02/2026 - 17:31:17.382 MSK -- Событие { eventA: 2, eventB: 8, score: 0.49, timestamp: 2026-02-12T14:31:17.376Z } проверено
+12/02/2026 - 17:31:17.382 MSK -- Событие { eventA: 2, eventB: 10, score: 0.51, timestamp: 2026-02-12T14:31:17.376Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:18.389 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:18.389 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:31:18.396 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 3.20 }
+12/02/2026 - 17:31:18.396 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 3.20 }
+12/02/2026 - 17:31:18.396 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:18.396 MSK -- Верификация для события закончена: { user: 1, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T21:09:08.538680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:18.396 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:18.396 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:12:56.646680200Z }
+12/02/2026 - 17:31:18.399 MSK -- [Trace]: Событие отправлено: { user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:12:56.646680200Z }
+12/02/2026 - 17:31:18.399 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:12:56.646680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:18.404 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 6, type: VIEW, timestamp: 2026-02-09T21:12:56.646Z }
+12/02/2026 - 17:31:18.405 MSK -- Событие VIEW пользователя 2 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:31:18.405 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [2] для мероприятия [6]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [1] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [2] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [2] равен [0,353553] (min=[1,200000], norm1=[1,897367], norm2=[1,788854])
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [3] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [4] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [4] равен [0,623610] (min=[2,800000], norm1=[1,897367], norm2=[2,366432])
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [5] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [5] равен [0,408248] (min=[1,200000], norm1=[1,897367], norm2=[1,549193])
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [7] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [7] равен [0,589768] (min=[2,400000], norm1=[1,897367], norm2=[2,144761])
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [8] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [9] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [9] равен [0,589256] (min=[2,000000], norm1=[1,897367], norm2=[1,788854])
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [10] для пользователя [2]
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [10] равен [0,288675] (min=[1,200000], norm1=[1,897367], norm2=[2,190890])
+12/02/2026 - 17:31:18.405 MSK -- [Trace]: В результате действия [VIEW] пользователя [2] с мероприятием [6] было рассчитано 6 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:18.405 MSK -- Ожидаю 15 секунд получения 6 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:18.410 MSK -- Событие { eventA: 2, eventB: 6, score: 0.35, timestamp: 2026-02-12T14:31:18.402Z } проверено
+12/02/2026 - 17:31:18.410 MSK -- Событие { eventA: 4, eventB: 6, score: 0.62, timestamp: 2026-02-12T14:31:18.402Z } проверено
+12/02/2026 - 17:31:18.410 MSK -- Событие { eventA: 5, eventB: 6, score: 0.41, timestamp: 2026-02-12T14:31:18.402Z } проверено
+12/02/2026 - 17:31:18.410 MSK -- Событие { eventA: 6, eventB: 7, score: 0.59, timestamp: 2026-02-12T14:31:18.402Z } проверено
+12/02/2026 - 17:31:18.410 MSK -- Событие { eventA: 6, eventB: 9, score: 0.59, timestamp: 2026-02-12T14:31:18.402Z } проверено
+12/02/2026 - 17:31:18.410 MSK -- Событие { eventA: 6, eventB: 10, score: 0.29, timestamp: 2026-02-12T14:31:18.402Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:19.418 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:19.418 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:31:19.425 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 3.60 }
+12/02/2026 - 17:31:19.425 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 3.60 }
+12/02/2026 - 17:31:19.425 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:19.425 MSK -- Верификация для события закончена: { user: 2, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:12:56.646680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:19.425 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:19.425 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T21:20:04.152680200Z }
+12/02/2026 - 17:31:19.428 MSK -- [Trace]: Событие отправлено: { user: 7, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T21:20:04.152680200Z }
+12/02/2026 - 17:31:19.428 MSK -- Ожидаю 10 секунд получения события { user: 7, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T21:20:04.152680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:19.432 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 7, event: 3, type: REGISTER, timestamp: 2026-02-09T21:20:04.152Z }
+12/02/2026 - 17:31:19.432 MSK -- Событие REGISTER пользователя 7 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:31:19.432 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:19.432 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [7] для мероприятия [3]
+12/02/2026 - 17:31:19.432 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [1] равен [0,462910] (min=[1,200000], norm1=[2,049390], norm2=[1,264911])
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [4] равен [0,659829] (min=[3,200000], norm1=[2,049390], norm2=[2,366432])
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [6] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [6] равен [0,411476] (min=[1,600000], norm1=[2,049390], norm2=[1,897367])
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [7]
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:19.433 MSK -- [Trace]: В результате действия [REGISTER] пользователя [7] с мероприятием [3] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:19.433 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:19.437 MSK -- Событие { eventA: 1, eventB: 3, score: 0.46, timestamp: 2026-02-12T14:31:19.430Z } проверено
+12/02/2026 - 17:31:19.437 MSK -- Событие { eventA: 3, eventB: 4, score: 0.66, timestamp: 2026-02-12T14:31:19.430Z } проверено
+12/02/2026 - 17:31:19.437 MSK -- Событие { eventA: 3, eventB: 6, score: 0.41, timestamp: 2026-02-12T14:31:19.430Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:20.443 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:20.443 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:31:20.448 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 4.20 }
+12/02/2026 - 17:31:20.448 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 4.20 }
+12/02/2026 - 17:31:20.448 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:20.448 MSK -- Верификация для события закончена: { user: 7, event: 3, type: ACTION_REGISTER, timestamp: 2026-02-09T21:20:04.152680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:20.448 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:20.448 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:29:08.128680200Z }
+12/02/2026 - 17:31:20.452 MSK -- [Trace]: Событие отправлено: { user: 11, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:29:08.128680200Z }
+12/02/2026 - 17:31:20.452 MSK -- Ожидаю 10 секунд получения события { user: 11, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:29:08.128680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 11, event: 6, type: VIEW, timestamp: 2026-02-09T21:29:08.128Z }
+12/02/2026 - 17:31:20.457 MSK -- Событие VIEW пользователя 11 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:31:20.457 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [11] для мероприятия [6]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [1] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [2] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [3] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [4] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [5] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [5] равен [0,516398] (min=[1,600000], norm1=[2,000000], norm2=[1,549193])
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [7] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [8] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [9] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [9] равен [0,670820] (min=[2,400000], norm1=[2,000000], norm2=[1,788854])
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [10] для пользователя [11]
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [10] равен [0,365148] (min=[1,600000], norm1=[2,000000], norm2=[2,190890])
+12/02/2026 - 17:31:20.457 MSK -- [Trace]: В результате действия [VIEW] пользователя [11] с мероприятием [6] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:20.457 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:20.461 MSK -- Событие { eventA: 5, eventB: 6, score: 0.52, timestamp: 2026-02-12T14:31:20.455Z } проверено
+12/02/2026 - 17:31:20.461 MSK -- Событие { eventA: 6, eventB: 9, score: 0.67, timestamp: 2026-02-12T14:31:20.455Z } проверено
+12/02/2026 - 17:31:20.461 MSK -- Событие { eventA: 6, eventB: 10, score: 0.37, timestamp: 2026-02-12T14:31:20.455Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:21.462 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:21.462 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:31:21.469 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 4.00 }
+12/02/2026 - 17:31:21.469 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 4.00 }
+12/02/2026 - 17:31:21.469 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:21.469 MSK -- Верификация для события закончена: { user: 11, event: 6, type: ACTION_VIEW, timestamp: 2026-02-09T21:29:08.128680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:21.469 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:21.469 MSK -- Отправляю событие о действии пользователя: { user: 7, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T21:34:13.552680200Z }
+12/02/2026 - 17:31:21.472 MSK -- [Trace]: Событие отправлено: { user: 7, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T21:34:13.552680200Z }
+12/02/2026 - 17:31:21.472 MSK -- Ожидаю 10 секунд получения события { user: 7, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T21:34:13.552680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 7, event: 3, type: LIKE, timestamp: 2026-02-09T21:34:13.552Z }
+12/02/2026 - 17:31:21.478 MSK -- Событие LIKE пользователя 7 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:31:21.478 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [7] для мероприятия [3]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [1] равен [0,452267] (min=[1,200000], norm1=[2,097618], norm2=[1,264911])
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [4] равен [0,644658] (min=[3,200000], norm1=[2,097618], norm2=[2,366432])
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [6] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [6] равен [0,381385] (min=[1,600000], norm1=[2,097618], norm2=[2,000000])
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [7]
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: Тестер: пользователь [7] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:21.478 MSK -- [Trace]: В результате действия [LIKE] пользователя [7] с мероприятием [3] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:21.478 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:21.482 MSK -- Событие { eventA: 1, eventB: 3, score: 0.45, timestamp: 2026-02-12T14:31:21.474Z } проверено
+12/02/2026 - 17:31:21.482 MSK -- Событие { eventA: 3, eventB: 4, score: 0.64, timestamp: 2026-02-12T14:31:21.474Z } проверено
+12/02/2026 - 17:31:21.482 MSK -- Событие { eventA: 3, eventB: 6, score: 0.38, timestamp: 2026-02-12T14:31:21.474Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:22.497 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:22.497 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:31:22.505 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 4.40 }
+12/02/2026 - 17:31:22.505 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 4.40 }
+12/02/2026 - 17:31:22.505 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:22.506 MSK -- Верификация для события закончена: { user: 7, event: 3, type: ACTION_LIKE, timestamp: 2026-02-09T21:34:13.552680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:22.506 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:22.506 MSK -- Отправляю событие о действии пользователя: { user: 4, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T21:38:14.641680200Z }
+12/02/2026 - 17:31:22.509 MSK -- [Trace]: Событие отправлено: { user: 4, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T21:38:14.641680200Z }
+12/02/2026 - 17:31:22.509 MSK -- Ожидаю 10 секунд получения события { user: 4, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T21:38:14.641680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:22.514 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 4, event: 7, type: LIKE, timestamp: 2026-02-09T21:38:14.641Z }
+12/02/2026 - 17:31:22.514 MSK -- Событие LIKE пользователя 4 с мероприятием 7 - проверено
+--------------------------------
+12/02/2026 - 17:31:22.515 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [4] для мероприятия [7]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [1] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [1] равен [0,288675] (min=[0,800000], norm1=[2,190890], norm2=[1,264911])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [2] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [2] равен [0,714435] (min=[2,800000], norm1=[2,190890], norm2=[1,788854])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [3] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [3] равен [0,391675] (min=[1,800000], norm1=[2,190890], norm2=[2,097618])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [4] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [4] равен [0,617213] (min=[3,200000], norm1=[2,190890], norm2=[2,366432])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [5] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пользователь [4] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [6] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [6] равен [0,547723] (min=[2,400000], norm1=[2,190890], norm2=[2,000000])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [8] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [8] равен [0,495074] (min=[2,000000], norm1=[2,190890], norm2=[1,843909])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [9] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [9] равен [0,612372] (min=[2,400000], norm1=[2,190890], norm2=[1,788854])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [7] и [10] для пользователя [4]
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [7] и [10] равен [0,625000] (min=[3,000000], norm1=[2,190890], norm2=[2,190890])
+12/02/2026 - 17:31:22.515 MSK -- [Trace]: В результате действия [LIKE] пользователя [4] с мероприятием [7] было рассчитано 8 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:22.516 MSK -- Ожидаю 15 секунд получения 8 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 1, eventB: 7, score: 0.29, timestamp: 2026-02-12T14:31:22.513Z } проверено
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 2, eventB: 7, score: 0.71, timestamp: 2026-02-12T14:31:22.513Z } проверено
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 3, eventB: 7, score: 0.39, timestamp: 2026-02-12T14:31:22.513Z } проверено
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 4, eventB: 7, score: 0.62, timestamp: 2026-02-12T14:31:22.513Z } проверено
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 6, eventB: 7, score: 0.55, timestamp: 2026-02-12T14:31:22.513Z } проверено
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 7, eventB: 8, score: 0.50, timestamp: 2026-02-12T14:31:22.513Z } проверено
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 7, eventB: 9, score: 0.61, timestamp: 2026-02-12T14:31:22.513Z } проверено
+12/02/2026 - 17:31:22.520 MSK -- Событие { eventA: 7, eventB: 10, score: 0.62, timestamp: 2026-02-12T14:31:22.513Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:23.527 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:23.527 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [7]
+12/02/2026 - 17:31:23.534 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 7, score: 4.80 }
+12/02/2026 - 17:31:23.534 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 7, score: 4.80 }
+12/02/2026 - 17:31:23.534 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:23.534 MSK -- Верификация для события закончена: { user: 4, event: 7, type: ACTION_LIKE, timestamp: 2026-02-09T21:38:14.641680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:23.534 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:23.534 MSK -- Отправляю событие о действии пользователя: { user: 2, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T21:43:10.859680200Z }
+12/02/2026 - 17:31:23.538 MSK -- [Trace]: Событие отправлено: { user: 2, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T21:43:10.859680200Z }
+12/02/2026 - 17:31:23.538 MSK -- Ожидаю 10 секунд получения события { user: 2, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T21:43:10.859680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 2, event: 8, type: VIEW, timestamp: 2026-02-09T21:43:10.859Z }
+12/02/2026 - 17:31:23.542 MSK -- Событие VIEW пользователя 2 с мероприятием 8 - проверено
+--------------------------------
+12/02/2026 - 17:31:23.542 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [2] для мероприятия [8]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [1] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [2] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [2] равен [0,573539] (min=[2,000000], norm1=[1,949359], norm2=[1,788854])
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [3] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пользователь [2] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [4] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [4] равен [0,520266] (min=[2,400000], norm1=[1,949359], norm2=[2,366432])
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [5] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [5] равен [0,397360] (min=[1,200000], norm1=[1,949359], norm2=[1,549193])
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [6] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [6] равен [0,410391] (min=[1,600000], norm1=[1,949359], norm2=[2,000000])
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [7] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [7] равен [0,561951] (min=[2,400000], norm1=[1,949359], norm2=[2,190890])
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [9] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [9] равен [0,573539] (min=[2,000000], norm1=[1,949359], norm2=[1,788854])
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [8] и [10] для пользователя [2]
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [8] и [10] равен [0,561951] (min=[2,400000], norm1=[1,949359], norm2=[2,190890])
+12/02/2026 - 17:31:23.542 MSK -- [Trace]: В результате действия [VIEW] пользователя [2] с мероприятием [8] было рассчитано 7 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:23.542 MSK -- Ожидаю 15 секунд получения 7 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:23.547 MSK -- Событие { eventA: 2, eventB: 8, score: 0.57, timestamp: 2026-02-12T14:31:23.540Z } проверено
+12/02/2026 - 17:31:23.547 MSK -- Событие { eventA: 4, eventB: 8, score: 0.52, timestamp: 2026-02-12T14:31:23.540Z } проверено
+12/02/2026 - 17:31:23.547 MSK -- Событие { eventA: 5, eventB: 8, score: 0.40, timestamp: 2026-02-12T14:31:23.540Z } проверено
+12/02/2026 - 17:31:23.547 MSK -- Событие { eventA: 6, eventB: 8, score: 0.41, timestamp: 2026-02-12T14:31:23.540Z } проверено
+12/02/2026 - 17:31:23.547 MSK -- Событие { eventA: 7, eventB: 8, score: 0.56, timestamp: 2026-02-12T14:31:23.540Z } проверено
+12/02/2026 - 17:31:23.547 MSK -- Событие { eventA: 8, eventB: 9, score: 0.57, timestamp: 2026-02-12T14:31:23.540Z } проверено
+12/02/2026 - 17:31:23.547 MSK -- Событие { eventA: 8, eventB: 10, score: 0.56, timestamp: 2026-02-12T14:31:23.540Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:24.551 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:24.551 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [8]
+12/02/2026 - 17:31:24.556 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 8, score: 3.80 }
+12/02/2026 - 17:31:24.556 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 8, score: 3.80 }
+12/02/2026 - 17:31:24.556 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:24.556 MSK -- Верификация для события закончена: { user: 2, event: 8, type: ACTION_VIEW, timestamp: 2026-02-09T21:43:10.859680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:24.556 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:24.556 MSK -- Отправляю событие о действии пользователя: { user: 9, event: 6, type: ACTION_LIKE, timestamp: 2026-02-09T21:44:13.482680200Z }
+12/02/2026 - 17:31:24.560 MSK -- [Trace]: Событие отправлено: { user: 9, event: 6, type: ACTION_LIKE, timestamp: 2026-02-09T21:44:13.482680200Z }
+12/02/2026 - 17:31:24.560 MSK -- Ожидаю 10 секунд получения события { user: 9, event: 6, type: ACTION_LIKE, timestamp: 2026-02-09T21:44:13.482680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 9, event: 6, type: LIKE, timestamp: 2026-02-09T21:44:13.482Z }
+12/02/2026 - 17:31:24.566 MSK -- Событие LIKE пользователя 9 с мероприятием 6 - проверено
+--------------------------------
+12/02/2026 - 17:31:24.566 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Получена новая оценка (вес) [1,000000] пользователя [9] для мероприятия [6]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [1] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [1] равен [0,462910] (min=[1,200000], norm1=[2,049390], norm2=[1,264911])
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [2] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [2] равен [0,327327] (min=[1,200000], norm1=[2,049390], norm2=[1,788854])
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [3] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [4] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [5] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [5] равен [0,503953] (min=[1,600000], norm1=[2,049390], norm2=[1,549193])
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [7] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [7] равен [0,534522] (min=[2,400000], norm1=[2,049390], norm2=[2,190890])
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [8] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [8] равен [0,400501] (min=[1,600000], norm1=[2,049390], norm2=[1,949359])
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [9] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [6] и [9] равен [0,654654] (min=[2,400000], norm1=[2,049390], norm2=[1,788854])
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [6] и [10] для пользователя [9]
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: Тестер: пользователь [9] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:24.566 MSK -- [Trace]: В результате действия [LIKE] пользователя [9] с мероприятием [6] было рассчитано 6 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:24.566 MSK -- Ожидаю 15 секунд получения 6 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:24.570 MSK -- Событие { eventA: 1, eventB: 6, score: 0.46, timestamp: 2026-02-12T14:31:24.563Z } проверено
+12/02/2026 - 17:31:24.570 MSK -- Событие { eventA: 2, eventB: 6, score: 0.33, timestamp: 2026-02-12T14:31:24.563Z } проверено
+12/02/2026 - 17:31:24.570 MSK -- Событие { eventA: 5, eventB: 6, score: 0.50, timestamp: 2026-02-12T14:31:24.563Z } проверено
+12/02/2026 - 17:31:24.570 MSK -- Событие { eventA: 6, eventB: 7, score: 0.53, timestamp: 2026-02-12T14:31:24.563Z } проверено
+12/02/2026 - 17:31:24.570 MSK -- Событие { eventA: 6, eventB: 8, score: 0.40, timestamp: 2026-02-12T14:31:24.563Z } проверено
+12/02/2026 - 17:31:24.570 MSK -- Событие { eventA: 6, eventB: 9, score: 0.65, timestamp: 2026-02-12T14:31:24.563Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:25.581 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:25.581 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [6]
+12/02/2026 - 17:31:25.588 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 6, score: 4.20 }
+12/02/2026 - 17:31:25.588 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 6, score: 4.20 }
+12/02/2026 - 17:31:25.588 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:25.588 MSK -- Верификация для события закончена: { user: 9, event: 6, type: ACTION_LIKE, timestamp: 2026-02-09T21:44:13.482680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:25.588 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:25.588 MSK -- Отправляю событие о действии пользователя: { user: 11, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T21:48:01.621680200Z }
+12/02/2026 - 17:31:25.591 MSK -- [Trace]: Событие отправлено: { user: 11, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T21:48:01.621680200Z }
+12/02/2026 - 17:31:25.591 MSK -- Ожидаю 10 секунд получения события { user: 11, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T21:48:01.621680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 11, event: 5, type: REGISTER, timestamp: 2026-02-09T21:48:01.621Z }
+12/02/2026 - 17:31:25.596 MSK -- Событие REGISTER пользователя 11 с мероприятием 5 - проверено
+--------------------------------
+12/02/2026 - 17:31:25.596 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Получена новая оценка (вес) [0,800000] пользователя [11] для мероприятия [5]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [1] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [2] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [3] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [3]. Пересчёт не требуется.
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [4] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [6] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [6] равен [0,466569] (min=[1,600000], norm1=[1,673320], norm2=[2,049390])
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [7] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [8] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пользователь [11] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [9] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [9] равен [0,801784] (min=[2,400000], norm1=[1,673320], norm2=[1,788854])
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [5] и [10] для пользователя [11]
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [5] и [10] равен [0,436436] (min=[1,600000], norm1=[1,673320], norm2=[2,190890])
+12/02/2026 - 17:31:25.596 MSK -- [Trace]: В результате действия [REGISTER] пользователя [11] с мероприятием [5] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:25.596 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:25.599 MSK -- Событие { eventA: 5, eventB: 6, score: 0.47, timestamp: 2026-02-12T14:31:25.593Z } проверено
+12/02/2026 - 17:31:25.599 MSK -- Событие { eventA: 5, eventB: 9, score: 0.80, timestamp: 2026-02-12T14:31:25.593Z } проверено
+12/02/2026 - 17:31:25.599 MSK -- Событие { eventA: 5, eventB: 10, score: 0.44, timestamp: 2026-02-12T14:31:25.593Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:26.609 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:26.609 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [5]
+12/02/2026 - 17:31:26.614 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 5, score: 2.80 }
+12/02/2026 - 17:31:26.614 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 5, score: 2.80 }
+12/02/2026 - 17:31:26.614 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:26.614 MSK -- Верификация для события закончена: { user: 11, event: 5, type: ACTION_REGISTER, timestamp: 2026-02-09T21:48:01.621680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:26.614 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:26.614 MSK -- Отправляю событие о действии пользователя: { user: 5, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T21:54:16.066680200Z }
+12/02/2026 - 17:31:26.617 MSK -- [Trace]: Событие отправлено: { user: 5, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T21:54:16.066680200Z }
+12/02/2026 - 17:31:26.617 MSK -- Ожидаю 10 секунд получения события { user: 5, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T21:54:16.066680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 5, event: 3, type: VIEW, timestamp: 2026-02-09T21:54:16.066Z }
+12/02/2026 - 17:31:26.621 MSK -- Событие VIEW пользователя 5 с мероприятием 3 - проверено
+--------------------------------
+12/02/2026 - 17:31:26.621 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [5] для мероприятия [3]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [1] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [1]. Пересчёт не требуется.
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [2] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [2]. Пересчёт не требуется.
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [4] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [4] равен [0,694365] (min=[3,600000], norm1=[2,190890], norm2=[2,366432])
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [5] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [5]. Пересчёт не требуется.
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [6] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [6] равен [0,445435] (min=[2,000000], norm1=[2,190890], norm2=[2,049390])
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [7] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [3] и [7] равен [0,458333] (min=[2,200000], norm1=[2,190890], norm2=[2,190890])
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [8] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [8]. Пересчёт не требуется.
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [9] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [9]. Пересчёт не требуется.
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [3] и [10] для пользователя [5]
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: Тестер: пользователь [5] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:26.621 MSK -- [Trace]: В результате действия [VIEW] пользователя [5] с мероприятием [3] было рассчитано 3 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:26.621 MSK -- Ожидаю 15 секунд получения 3 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:26.626 MSK -- Событие { eventA: 3, eventB: 4, score: 0.69, timestamp: 2026-02-12T14:31:26.619Z } проверено
+12/02/2026 - 17:31:26.626 MSK -- Событие { eventA: 3, eventB: 6, score: 0.45, timestamp: 2026-02-12T14:31:26.619Z } проверено
+12/02/2026 - 17:31:26.626 MSK -- Событие { eventA: 3, eventB: 7, score: 0.46, timestamp: 2026-02-12T14:31:26.619Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:27.640 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:27.640 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [3]
+12/02/2026 - 17:31:27.645 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 3, score: 4.80 }
+12/02/2026 - 17:31:27.645 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 3, score: 4.80 }
+12/02/2026 - 17:31:27.645 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:27.645 MSK -- Верификация для события закончена: { user: 5, event: 3, type: ACTION_VIEW, timestamp: 2026-02-09T21:54:16.066680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:27.645 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:27.645 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T21:56:09.107680200Z }
+12/02/2026 - 17:31:27.648 MSK -- [Trace]: Событие отправлено: { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T21:56:09.107680200Z }
+12/02/2026 - 17:31:27.649 MSK -- Ожидаю 10 секунд получения события { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T21:56:09.107680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:27.653 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 6, event: 9, type: VIEW, timestamp: 2026-02-09T21:56:09.107Z }
+12/02/2026 - 17:31:27.653 MSK -- Событие VIEW пользователя 6 с мероприятием 9 - проверено
+--------------------------------
+12/02/2026 - 17:31:27.653 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:27.653 MSK -- [Trace]: В результате действия [VIEW] пользователя [6] с мероприятием [9] было рассчитано 0 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:27.653 MSK -- Для данного действия обновления коэффициента схожести не требуется
+--------------------------------
+12/02/2026 - 17:31:28.654 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:28.654 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [9]
+12/02/2026 - 17:31:28.660 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 9, score: 3.20 }
+12/02/2026 - 17:31:28.660 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 9, score: 3.20 }
+12/02/2026 - 17:31:28.660 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:28.660 MSK -- Верификация для события закончена: { user: 6, event: 9, type: ACTION_VIEW, timestamp: 2026-02-09T21:56:09.107680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:28.660 MSK -- Начинаю верификацию сервиса Collector
+12/02/2026 - 17:31:28.660 MSK -- Отправляю событие о действии пользователя: { user: 6, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T22:05:01.835680200Z }
+12/02/2026 - 17:31:28.662 MSK -- [Trace]: Событие отправлено: { user: 6, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T22:05:01.835680200Z }
+12/02/2026 - 17:31:28.662 MSK -- Ожидаю 10 секунд получения события { user: 6, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T22:05:01.835680200Z } из топика stats.user-actions.v1
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Начинаю верификацию полученного события: { user: 6, event: 2, type: VIEW, timestamp: 2026-02-09T22:05:01.835Z }
+12/02/2026 - 17:31:28.667 MSK -- Событие VIEW пользователя 6 с мероприятием 2 - проверено
+--------------------------------
+12/02/2026 - 17:31:28.667 MSK -- Начинаю верификацию сервиса Aggregator. Рассчитываю обновления коэффициента схожести с другими мероприятиями
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Получена новая оценка (вес) [0,400000] пользователя [6] для мероприятия [2]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [1] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [1] равен [0,500000] (min=[1,200000], norm1=[1,897367], norm2=[1,264911])
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [3] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [3] равен [0,481125] (min=[2,000000], norm1=[1,897367], norm2=[2,190890])
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [4] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [4]. Пересчёт не требуется.
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [5] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [5] равен [0,503953] (min=[1,600000], norm1=[1,897367], norm2=[1,673320])
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [6] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [6]. Пересчёт не требуется.
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [7] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [7]. Пересчёт не требуется.
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [8] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [8] равен [0,648886] (min=[2,400000], norm1=[1,897367], norm2=[1,949359])
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [9] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: коэффициент подобия мероприятий [2] и [9] равен [0,589256] (min=[2,000000], norm1=[1,897367], norm2=[1,788854])
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пересчитываем коэффициент подобия мероприятий [2] и [10] для пользователя [6]
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: Тестер: пользователь [6] не взаимодействовал с мероприятием [10]. Пересчёт не требуется.
+12/02/2026 - 17:31:28.667 MSK -- [Trace]: В результате действия [VIEW] пользователя [6] с мероприятием [2] было рассчитано 5 коэффициентов схожести с другими мероприятиями
+12/02/2026 - 17:31:28.667 MSK -- Ожидаю 15 секунд получения 5 сообщений из топика stats.events-similarity.v1
+12/02/2026 - 17:31:28.672 MSK -- Событие { eventA: 1, eventB: 2, score: 0.50, timestamp: 2026-02-12T14:31:28.665Z } проверено
+12/02/2026 - 17:31:28.672 MSK -- Событие { eventA: 2, eventB: 3, score: 0.48, timestamp: 2026-02-12T14:31:28.665Z } проверено
+12/02/2026 - 17:31:28.672 MSK -- Событие { eventA: 2, eventB: 5, score: 0.50, timestamp: 2026-02-12T14:31:28.665Z } проверено
+12/02/2026 - 17:31:28.672 MSK -- Событие { eventA: 2, eventB: 8, score: 0.65, timestamp: 2026-02-12T14:31:28.665Z } проверено
+12/02/2026 - 17:31:28.672 MSK -- Событие { eventA: 2, eventB: 9, score: 0.59, timestamp: 2026-02-12T14:31:28.665Z } проверено
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:29.684 MSK -- Начинаю верификацию сервиса Analyzer
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:29.684 MSK -- Отправляю gRPC-запрос на получение количества взаимодействий с мероприятием [2]
+12/02/2026 - 17:31:29.690 MSK -- Получено 1 событий от сервиса Analyzer:
+{ event: 2, score: 3.60 }
+12/02/2026 - 17:31:29.690 MSK -- [Trace]: Проверяю данные полученные от Analyzer: { event: 2, score: 3.60 }
+12/02/2026 - 17:31:29.690 MSK -- [Trace]: Проверка завершена
+--------------------------------
+12/02/2026 - 17:31:29.690 MSK -- Верификация для события закончена: { user: 6, event: 2, type: ACTION_VIEW, timestamp: 2026-02-09T22:05:01.835680200Z }
+--------------------------------
+--------------------------------
+12/02/2026 - 17:31:29.690 MSK -- Завершаю работу приложения
+--------------------------------
+Обнаружено 0 ошибок.
diff --git a/infra/config-server/src/main/resources/application.yaml b/infra/config-server/src/main/resources/application.yaml
index ab100f5..88d5b7c 100644
--- a/infra/config-server/src/main/resources/application.yaml
+++ b/infra/config-server/src/main/resources/application.yaml
@@ -14,6 +14,9 @@ spring:
- classpath:config/user-service/
- classpath:config/request-service/
- classpath:config/comment-service/
+ - classpath:config/collector/
+ - classpath:config/aggregator/
+ - classpath:config/analyzer/
server:
port: 0
diff --git a/infra/config-server/src/main/resources/config/aggregator/aggregator.yaml b/infra/config-server/src/main/resources/config/aggregator/aggregator.yaml
new file mode 100644
index 0000000..69b8729
--- /dev/null
+++ b/infra/config-server/src/main/resources/config/aggregator/aggregator.yaml
@@ -0,0 +1,10 @@
+kafka:
+ bootstrap:
+ servers: localhost:9092
+ consumer:
+ group: stats.aggregator.action
+ poll:
+ timeout: 100
+ topics:
+ stats-user-action-v1: stats.user-actions.v1
+ stats-events-similarity-v1: stats.events-similarity.v1
\ No newline at end of file
diff --git a/infra/config-server/src/main/resources/config/analyzer/analyzer.yaml b/infra/config-server/src/main/resources/config/analyzer/analyzer.yaml
new file mode 100644
index 0000000..9b4904b
--- /dev/null
+++ b/infra/config-server/src/main/resources/config/analyzer/analyzer.yaml
@@ -0,0 +1,35 @@
+spring:
+ datasource:
+ driverClassName: org.postgresql.Driver
+ url: jdbc:postgresql://localhost:6542/ewm_stats_db
+ username: stat_user
+ password: stat_password
+
+ jpa:
+ hibernate:
+ ddl-auto: none
+ properties:
+ hibernate:
+ format_sql: true
+ dialect: org.hibernate.dialect.PostgreSQLDialect
+ default_schema: stats_analyzer
+ sql:
+ init:
+ mode: always
+
+kafka:
+ bootstrap:
+ servers: localhost:9092
+ consumer:
+ group:
+ action: stats.analyzer.action
+ similarity: stats.analyzer.similarity
+ poll:
+ timeout: 100
+ topics:
+ stats-user-action-v1: stats.user-actions.v1
+ stats-events-similarity-v1: stats.events-similarity.v1
+
+grpc:
+ server:
+ port: 0
\ No newline at end of file
diff --git a/infra/config-server/src/main/resources/config/collector/collector.yaml b/infra/config-server/src/main/resources/config/collector/collector.yaml
new file mode 100644
index 0000000..48443f7
--- /dev/null
+++ b/infra/config-server/src/main/resources/config/collector/collector.yaml
@@ -0,0 +1,9 @@
+kafka:
+ bootstrap:
+ servers: localhost:9092
+ topics:
+ stats-user-action-v1: stats.user-actions.v1
+
+grpc:
+ server:
+ port: 0
\ No newline at end of file
diff --git a/infra/config-server/src/main/resources/config/comment-service/comment-service.yaml b/infra/config-server/src/main/resources/config/comment-service/comment-service.yaml
index ba86393..bdf6f3e 100644
--- a/infra/config-server/src/main/resources/config/comment-service/comment-service.yaml
+++ b/infra/config-server/src/main/resources/config/comment-service/comment-service.yaml
@@ -23,4 +23,8 @@ stats-server:
logging:
level:
root: INFO
- ru.yandex.practicum.explorewithme.main: DEBUG
\ No newline at end of file
+ ru.yandex.practicum.explorewithme.main: DEBUG
+
+grpc:
+ server:
+ port: -1
\ No newline at end of file
diff --git a/infra/config-server/src/main/resources/config/event-service/event-service.yaml b/infra/config-server/src/main/resources/config/event-service/event-service.yaml
index ba86393..9f22279 100644
--- a/infra/config-server/src/main/resources/config/event-service/event-service.yaml
+++ b/infra/config-server/src/main/resources/config/event-service/event-service.yaml
@@ -23,4 +23,20 @@ stats-server:
logging:
level:
root: INFO
- ru.yandex.practicum.explorewithme.main: DEBUG
\ No newline at end of file
+ ru.yandex.practicum.explorewithme.main: DEBUG
+
+grpc:
+ server:
+ port: -1
+ client:
+ collector:
+ address: discovery:///collector
+ enableKeepAlive: true
+ keepAliveWithoutCalls: true
+ negotiationType: plaintext
+
+ analyzer:
+ address: discovery:///analyzer
+ enableKeepAlive: true
+ keepAliveWithoutCalls: true
+ negotiationType: plaintext
\ No newline at end of file
diff --git a/infra/config-server/src/main/resources/config/request-service/request-service.yaml b/infra/config-server/src/main/resources/config/request-service/request-service.yaml
index ba86393..9f22279 100644
--- a/infra/config-server/src/main/resources/config/request-service/request-service.yaml
+++ b/infra/config-server/src/main/resources/config/request-service/request-service.yaml
@@ -23,4 +23,20 @@ stats-server:
logging:
level:
root: INFO
- ru.yandex.practicum.explorewithme.main: DEBUG
\ No newline at end of file
+ ru.yandex.practicum.explorewithme.main: DEBUG
+
+grpc:
+ server:
+ port: -1
+ client:
+ collector:
+ address: discovery:///collector
+ enableKeepAlive: true
+ keepAliveWithoutCalls: true
+ negotiationType: plaintext
+
+ analyzer:
+ address: discovery:///analyzer
+ enableKeepAlive: true
+ keepAliveWithoutCalls: true
+ negotiationType: plaintext
\ No newline at end of file
diff --git a/infra/config-server/src/main/resources/config/stats-server/stats-server.yaml b/infra/config-server/src/main/resources/config/stats-server/stats-server.yaml
deleted file mode 100644
index fdc6de4..0000000
--- a/infra/config-server/src/main/resources/config/stats-server/stats-server.yaml
+++ /dev/null
@@ -1,19 +0,0 @@
-server:
- port: 9090
-
-spring:
- datasource:
- url: jdbc:postgresql://localhost:6542/ewm_stats_db
- username: stat_user
- password: stat_password
- jpa:
- hibernate:
- ddl-auto: update
- show-sql: true
- properties:
- hibernate.format_sql: true
- dialect: org.hibernate.dialect.PostgreSQLDialect
-logging:
- level:
- org.hibernate.SQL: DEBUG
- org.hibernate.type.descriptor.sql.BasicBinder: TRACE
\ No newline at end of file
diff --git a/infra/config-server/src/main/resources/config/user-service/user-service.yaml b/infra/config-server/src/main/resources/config/user-service/user-service.yaml
index 64f11b1..520defe 100644
--- a/infra/config-server/src/main/resources/config/user-service/user-service.yaml
+++ b/infra/config-server/src/main/resources/config/user-service/user-service.yaml
@@ -23,4 +23,8 @@ stats-server:
logging:
level:
root: INFO
- ru.practicum.explorewithme.main: DEBUG
\ No newline at end of file
+ ru.practicum.explorewithme.main: DEBUG
+
+grpc:
+ server:
+ port: -1
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index d9ce4a2..a7afedf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -35,6 +35,8 @@
1.63.0
2023.0.3
1.18.30
+ 0.2.0
+ 2.0.7
3.11.0
@@ -97,6 +99,7 @@
org.springframework.retry
spring-retry
+ ${spring-retry.version}
@@ -111,6 +114,19 @@
${lombok.version}
provided
+
+
+
+ org.projectlombok
+ lombok-mapstruct-binding
+ ${lombok-mapstruct-binding.version}
+
+
+
+ org.mapstruct
+ mapstruct-processor
+ ${mapstruct.version}
+
@@ -327,4 +343,4 @@
-
+
\ No newline at end of file
diff --git a/stats/stats-server/pom.xml b/stats/aggregator/pom.xml
similarity index 77%
rename from stats/stats-server/pom.xml
rename to stats/aggregator/pom.xml
index c6fa37c..f909823 100644
--- a/stats/stats-server/pom.xml
+++ b/stats/aggregator/pom.xml
@@ -3,14 +3,13 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
4.0.0
-
ru.yandex.practicum
stats
0.0.1-SNAPSHOT
- stats-server
+ aggregator
21
@@ -21,71 +20,65 @@
ru.yandex.practicum
- stats-dto
+ avro-schemas
0.0.1-SNAPSHOT
- compile
- org.springframework.boot
- spring-boot-starter-web
-
-
-
- org.springframework.boot
- spring-boot-starter-actuator
+ ru.yandex.practicum
+ collector
+ 0.0.1-SNAPSHOT
+ compile
- org.projectlombok
- lombok
+ ru.yandex.practicum
+ common
+ 0.0.1-SNAPSHOT
org.springframework.boot
- spring-boot-starter-data-jpa
+ spring-boot-starter-web
- org.postgresql
- postgresql
- runtime
+ org.springframework.boot
+ spring-boot-starter-actuator
- org.mapstruct
- mapstruct
- ${mapstruct.version}
+ org.projectlombok
+ lombok
+ provided
- com.h2database
- h2
- runtime
+ org.springframework.cloud
+ spring-cloud-starter-config
- org.springframework.cloud
- spring-cloud-starter-config
+ org.springframework.retry
+ spring-retry
org.springframework.cloud
spring-cloud-starter-netflix-eureka-client
-
-
- org.springframework.boot
- spring-boot-maven-plugin
-
org.apache.maven.plugins
maven-compiler-plugin
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/StatServerApp.java b/stats/aggregator/src/main/java/ru/yandex/practicum/AggregatorApp.java
similarity index 53%
rename from stats/stats-server/src/main/java/ru/yandex/practicum/StatServerApp.java
rename to stats/aggregator/src/main/java/ru/yandex/practicum/AggregatorApp.java
index 789c299..9e51296 100644
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/StatServerApp.java
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/AggregatorApp.java
@@ -2,12 +2,12 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
-import org.springframework.boot.context.properties.ConfigurationPropertiesScan;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
@SpringBootApplication
-@ConfigurationPropertiesScan
-public class StatServerApp {
+@EnableDiscoveryClient
+public class AggregatorApp {
public static void main(String[] args) {
- SpringApplication.run(StatServerApp.class, args);
+ SpringApplication.run(AggregatorApp.class, args);
}
}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaClient.java b/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaClient.java
new file mode 100644
index 0000000..1b7ee52
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaClient.java
@@ -0,0 +1,18 @@
+package ru.yandex.practicum.config;
+
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.producer.Producer;
+
+import java.time.Duration;
+
+public interface KafkaClient {
+
+ Consumer getConsumer();
+
+ Producer getProducer();
+
+ Duration getPollTimeout();
+
+ KafkaTopicsProperties getTopicsProperties();
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaConfig.java b/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaConfig.java
new file mode 100644
index 0000000..1809b50
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaConfig.java
@@ -0,0 +1,94 @@
+package ru.yandex.practicum.config;
+
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.clients.consumer.KafkaConsumer;
+import org.apache.kafka.clients.producer.KafkaProducer;
+import org.apache.kafka.clients.producer.Producer;
+import org.apache.kafka.clients.producer.ProducerConfig;
+import org.apache.kafka.common.serialization.LongDeserializer;
+import org.apache.kafka.common.serialization.LongSerializer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import ru.yandex.practicum.deserializer.UserActionDeserializer;
+import ru.yandex.practicum.serializer.AvroSerializer;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+public class KafkaConfig {
+
+ @Value("${kafka.bootstrap.servers}")
+ private String bootstrapServers;
+
+ @Value("${kafka.consumer.group}")
+ private String groupId;
+
+ @Value("${kafka.producer.client-id:aggregator-producer}")
+ private String clientId;
+
+ @Value("${kafka.consumer.poll.timeout:1000}")
+ private long pollTimeout;
+
+ @Autowired
+ private KafkaTopicsProperties topicsProperties;
+
+ @Bean
+ @Scope("prototype")
+ public KafkaClient kafkaClient() {
+ return new KafkaClient() {
+
+ private Consumer consumer;
+ private Producer producer;
+
+ @Override
+ public Consumer getConsumer() {
+ if (consumer == null) {
+ consumer = createConsumer();
+ }
+ return consumer;
+ }
+
+ @Override
+ public Producer getProducer() {
+ if (producer == null) {
+ producer = createProducer();
+ }
+ return producer;
+ }
+
+ @Override
+ public Duration getPollTimeout() {
+ return Duration.ofMillis(pollTimeout);
+ }
+
+ @Override
+ public KafkaTopicsProperties getTopicsProperties() {
+ return topicsProperties;
+ }
+
+ private Consumer createConsumer() {
+ Map config = new HashMap<>();
+ config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+ config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class);
+ config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, UserActionDeserializer.class);
+ config.put(ConsumerConfig.GROUP_ID_CONFIG, groupId);
+ return new KafkaConsumer<>(config);
+ }
+
+ private Producer createProducer() {
+ Map config = new HashMap<>();
+ config.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+ config.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, LongSerializer.class);
+ config.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, AvroSerializer.class);
+ return new KafkaProducer<>(config);
+ }
+ };
+ }
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaTopicsProperties.java b/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaTopicsProperties.java
new file mode 100644
index 0000000..460b7ab
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/config/KafkaTopicsProperties.java
@@ -0,0 +1,13 @@
+package ru.yandex.practicum.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "spring.kafka.topics")
+public class KafkaTopicsProperties {
+ private String userActions = "stats.user-actions.v1";
+ private String eventsSimilarity = "stats.events-similarity.v1";
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/consumer/UserActionConsumer.java b/stats/aggregator/src/main/java/ru/yandex/practicum/consumer/UserActionConsumer.java
new file mode 100644
index 0000000..3dd12a2
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/consumer/UserActionConsumer.java
@@ -0,0 +1,84 @@
+package ru.yandex.practicum.consumer;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerRecords;
+import org.apache.kafka.clients.consumer.OffsetAndMetadata;
+import org.apache.kafka.common.TopicPartition;
+import org.springframework.stereotype.Component;
+import ru.yandex.practicum.config.KafkaClient;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class UserActionConsumer {
+ private final KafkaClient kafkaClient;
+ private Consumer consumer;
+
+ public ConsumerRecords poll(Duration timeout) {
+ return getConsumer().poll(timeout);
+ }
+
+ public void subscribe() {
+ getConsumer().subscribe(List.of(kafkaClient.getTopicsProperties().getUserActions()));
+ log.info("Подписка на топик: {}", kafkaClient.getTopicsProperties().getUserActions());
+ }
+
+ public void commitAsync(Map offsets) {
+ getConsumer().commitAsync(offsets, (offsetsMap, exception) -> {
+ if (exception != null) {
+ log.error("Ошибка асинхронного коммита оффсетов: {}", offsetsMap, exception);
+ } else {
+ log.debug("Асинхронный коммит оффсетов выполнен: {}", offsetsMap);
+ }
+ });
+ }
+
+ public void commitSync(Map offsets) {
+ try {
+ getConsumer().commitSync(offsets);
+ log.debug("Синхронный коммит оффсетов выполнен: {}", offsets);
+ } catch (Exception e) {
+ log.error("Ошибка синхронного коммита оффсетов", e);
+ throw e;
+ }
+ }
+
+ public Consumer getRawConsumer() {
+ return getConsumer();
+ }
+
+ public void wakeup() {
+ if (consumer != null) {
+ log.info("Вызов wakeup для consumer");
+ consumer.wakeup();
+ }
+ }
+
+ public void close() {
+ if (consumer != null) {
+ try {
+ consumer.wakeup();
+ consumer.close(Duration.ofMillis(100));
+ log.info("Consumer успешно закрыт");
+ } catch (Exception e) {
+ log.error("Ошибка при закрытии consumer", e);
+ } finally {
+ consumer = null;
+ }
+ }
+ }
+
+ private Consumer getConsumer() {
+ if (consumer == null) {
+ consumer = kafkaClient.getConsumer();
+ }
+ return consumer;
+ }
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/mapper/SimilarityMapper.java b/stats/aggregator/src/main/java/ru/yandex/practicum/mapper/SimilarityMapper.java
new file mode 100644
index 0000000..05e75ef
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/mapper/SimilarityMapper.java
@@ -0,0 +1,24 @@
+package ru.yandex.practicum.mapper;
+
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.avro.EventSimilarityAvro;
+
+import java.time.Instant;
+
+@Slf4j
+@Component
+public class SimilarityMapper {
+
+ public EventSimilarityAvro toAvro(Long eventA, Long eventB, double score) {
+ long first = Math.min(eventA, eventB);
+ long second = Math.max(eventA, eventB);
+
+ return EventSimilarityAvro.newBuilder()
+ .setEventA(first)
+ .setEventB(second)
+ .setScore(score)
+ .setTimestamp(Instant.now())
+ .build();
+ }
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/processor/SimilarityCalculator.java b/stats/aggregator/src/main/java/ru/yandex/practicum/processor/SimilarityCalculator.java
new file mode 100644
index 0000000..ca1cf66
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/processor/SimilarityCalculator.java
@@ -0,0 +1,119 @@
+package ru.yandex.practicum.processor;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.avro.ActionTypeAvro;
+import ru.practicum.ewm.stats.avro.EventSimilarityAvro;
+import ru.practicum.ewm.stats.avro.UserActionAvro;
+import ru.yandex.practicum.mapper.SimilarityMapper;
+
+import java.time.Instant;
+import java.util.*;
+import java.util.concurrent.ConcurrentHashMap;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class SimilarityCalculator {
+ private static final double VIEW_WEIGHT = 0.4;
+ private static final double REGISTER_WEIGHT = 0.8;
+ private static final double LIKE_WEIGHT = 1.0;
+ private static final double EPSILON = 1e-10;
+
+ private static final Map WEIGHTS = Map.of(
+ ActionTypeAvro.VIEW, VIEW_WEIGHT,
+ ActionTypeAvro.REGISTER, REGISTER_WEIGHT,
+ ActionTypeAvro.LIKE, LIKE_WEIGHT
+ );
+ private final SimilarityMapper similarityMapper;
+ private final Map> weightMatrix = new ConcurrentHashMap<>();
+ private final Map weightSumByEvent = new ConcurrentHashMap<>();
+ private final Map> minWeightsSums = new ConcurrentHashMap<>();
+ private final Map> eventsByUser = new ConcurrentHashMap<>();
+
+ public List calculateSimilarity(UserActionAvro action) {
+ if (action == null) {
+ return Collections.emptyList();
+ }
+
+ long eventId = action.getEventId();
+ long userId = action.getUserId();
+
+ double actionWeight = WEIGHTS.get(action.getActionType());
+
+ Map userWeights = weightMatrix.computeIfAbsent(eventId,
+ k -> new ConcurrentHashMap<>());
+ double oldWeight = userWeights.getOrDefault(userId, 0.0);
+
+ if (actionWeight > oldWeight) {
+ userWeights.put(userId, actionWeight);
+
+ double totalWeight = weightSumByEvent.getOrDefault(eventId, 0.0);
+ totalWeight = totalWeight - oldWeight + actionWeight;
+ weightSumByEvent.put(eventId, totalWeight);
+
+ Set userEvents = eventsByUser.computeIfAbsent(userId,
+ k -> ConcurrentHashMap.newKeySet());
+
+ List similarities = new ArrayList<>();
+
+ for (Long otherEventId : userEvents) {
+ if (otherEventId.equals(eventId)) continue;
+
+ double similarity = recalculatePair(eventId, otherEventId, userId,
+ oldWeight, actionWeight);
+
+ similarities.add(similarityMapper.toAvro(
+ eventId,
+ otherEventId,
+ similarity
+ ));
+ }
+
+ userEvents.add(eventId);
+ return similarities;
+ }
+
+ return Collections.emptyList();
+ }
+
+ private double recalculatePair(long eventA, long eventB, long userId,
+ double oldWeight, double newWeight) {
+
+ double otherEventWeight = weightMatrix
+ .getOrDefault(eventB, Collections.emptyMap())
+ .getOrDefault(userId, 0.0);
+
+ double oldContribution = Math.min(oldWeight, otherEventWeight);
+ double newContribution = Math.min(newWeight, otherEventWeight);
+ double diff = newContribution - oldContribution;
+
+ double minSum = getMinSum(eventA, eventB) + diff;
+ putMinSum(eventA, eventB, minSum);
+
+ double totalA = weightSumByEvent.getOrDefault(eventA, 0.0);
+ double totalB = weightSumByEvent.getOrDefault(eventB, 0.0);
+
+ if (Math.abs(totalA) < EPSILON || Math.abs(totalB) < EPSILON) {
+ return 0.0;
+ }
+
+ return minSum / (Math.sqrt(totalA) * Math.sqrt(totalB));
+ }
+
+ private void putMinSum(long eventA, long eventB, double sum) {
+ long first = Math.min(eventA, eventB);
+ long second = Math.max(eventA, eventB);
+ minWeightsSums.computeIfAbsent(first, k -> new ConcurrentHashMap<>())
+ .put(second, sum);
+ }
+
+ private double getMinSum(long eventA, long eventB) {
+ long first = Math.min(eventA, eventB);
+ long second = Math.max(eventA, eventB);
+ return minWeightsSums
+ .getOrDefault(first, Collections.emptyMap())
+ .getOrDefault(second, 0.0);
+ }
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/processor/SimilarityProcessor.java b/stats/aggregator/src/main/java/ru/yandex/practicum/processor/SimilarityProcessor.java
new file mode 100644
index 0000000..1d1228c
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/processor/SimilarityProcessor.java
@@ -0,0 +1,116 @@
+package ru.yandex.practicum.processor;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerRecord;
+import org.apache.kafka.clients.consumer.ConsumerRecords;
+import org.apache.kafka.clients.consumer.OffsetAndMetadata;
+import org.apache.kafka.common.TopicPartition;
+import org.apache.kafka.common.errors.WakeupException;
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.avro.EventSimilarityAvro;
+import ru.practicum.ewm.stats.avro.UserActionAvro;
+import ru.yandex.practicum.config.KafkaClient;
+import ru.yandex.practicum.consumer.UserActionConsumer;
+import ru.yandex.practicum.producer.EventSimilarityProducer;
+
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class SimilarityProcessor {
+ private final SimilarityCalculator calculator;
+ private final EventSimilarityProducer producer;
+ private final UserActionConsumer consumer;
+ private final KafkaClient kafkaClient;
+ private final Map currentOffsets = new HashMap<>();
+
+ public void start() {
+ log.info("Запуск SimilarityProcessor");
+
+ Runtime.getRuntime().addShutdownHook(new Thread(consumer::wakeup));
+
+ try {
+ consumer.subscribe();
+ Consumer kafkaConsumer = consumer.getRawConsumer();
+
+ int totalRecords = 0;
+
+ while (true) {
+ ConsumerRecords records =
+ consumer.poll(kafkaClient.getPollTimeout());
+
+ for (ConsumerRecord record : records) {
+ if (record.value() instanceof UserActionAvro action) {
+ process(action);
+ manageOffsets(record, ++totalRecords, kafkaConsumer);
+ }
+ }
+
+ if (!records.isEmpty()) {
+ consumer.commitAsync(getCurrentOffsets());
+ log.debug("Коммит оффсетов после {} записей", records.count());
+ }
+ }
+ } catch (WakeupException e) {
+ log.info("Получен сигнал завершения для SimilarityProcessor");
+ } catch (Exception e) {
+ log.error("Ошибка в SimilarityProcessor", e);
+ } finally {
+ commitSyncOnShutdown();
+ consumer.close();
+ log.info("SimilarityProcessor завершен");
+ }
+ }
+
+ public void process(UserActionAvro action) {
+ List similarities = calculator.calculateSimilarity(action);
+ for (EventSimilarityAvro similarity : similarities) {
+ producer.send(similarity);
+ log.debug("Отправлено сходство: {} и {}, score={}",
+ similarity.getEventA(), similarity.getEventB(), similarity.getScore());
+ }
+ }
+
+ public void manageOffsets(ConsumerRecord record,
+ int count,
+ Consumer kafkaConsumer) {
+ currentOffsets.put(
+ new TopicPartition(record.topic(), record.partition()),
+ new OffsetAndMetadata(record.offset() + 1)
+ );
+
+ if (count % 10 == 0) {
+ kafkaConsumer.commitAsync(currentOffsets, (offsets, exception) -> {
+ if (exception != null) {
+ log.error("Ошибка промежуточного коммита оффсетов: {}", offsets, exception);
+ } else {
+ log.debug("Промежуточный коммит оффсетов выполнен: {}", offsets);
+ }
+ });
+ }
+ }
+
+ public void commitSyncOnShutdown() {
+ if (currentOffsets.isEmpty()) {
+ log.debug("Нет оффсетов для коммита");
+ return;
+ }
+
+ try {
+ consumer.commitSync(currentOffsets);
+ log.info("Финальный коммит оффсетов выполнен: {}", currentOffsets);
+ } catch (Exception e) {
+ log.error("Ошибка при финальном коммите оффсетов", e);
+ }
+ }
+
+ public Map getCurrentOffsets() {
+ return new HashMap<>(currentOffsets);
+ }
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/producer/EventSimilarityProducer.java b/stats/aggregator/src/main/java/ru/yandex/practicum/producer/EventSimilarityProducer.java
new file mode 100644
index 0000000..0291ec2
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/producer/EventSimilarityProducer.java
@@ -0,0 +1,67 @@
+package ru.yandex.practicum.producer;
+
+import jakarta.annotation.PreDestroy;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.producer.Producer;
+import org.apache.kafka.clients.producer.ProducerRecord;
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.avro.EventSimilarityAvro;
+import ru.yandex.practicum.config.KafkaClient;
+
+import java.time.Duration;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class EventSimilarityProducer {
+ private final KafkaClient kafkaClient;
+ private Producer producer;
+
+ public void send(EventSimilarityAvro similarity) {
+ long timestamp = similarity.getTimestamp().toEpochMilli();
+ Long key = similarity.getEventA();
+
+ ProducerRecord record = new ProducerRecord<>(
+ kafkaClient.getTopicsProperties().getEventsSimilarity(),
+ null,
+ timestamp,
+ key,
+ similarity
+ );
+
+ getProducer().send(record, (metadata, exception) -> {
+ if (exception != null) {
+ log.error("Ошибка отправки сходства мероприятий {} и {}: {}",
+ similarity.getEventA(), similarity.getEventB(), exception.getMessage(), exception);
+ } else {
+ log.debug("Сходство отправлено: firstEvent={}, secondEvent={}, score={}, offset={}",
+ similarity.getEventA(), similarity.getEventB(),
+ similarity.getScore(), metadata.offset());
+ }
+ });
+ }
+
+ @PreDestroy
+ public void close() {
+ if (producer != null) {
+ try {
+ producer.flush();
+ producer.close(Duration.ofSeconds(30));
+ log.info("Producer успешно закрыт");
+ } catch (Exception e) {
+ log.error("Ошибка при закрытии producer", e);
+ } finally {
+ producer = null;
+ }
+ }
+ }
+
+ private Producer getProducer() {
+ if (producer == null) {
+ producer = kafkaClient.getProducer();
+ }
+ return producer;
+ }
+}
diff --git a/stats/aggregator/src/main/java/ru/yandex/practicum/runner/AggregatorRunner.java b/stats/aggregator/src/main/java/ru/yandex/practicum/runner/AggregatorRunner.java
new file mode 100644
index 0000000..4135d91
--- /dev/null
+++ b/stats/aggregator/src/main/java/ru/yandex/practicum/runner/AggregatorRunner.java
@@ -0,0 +1,21 @@
+package ru.yandex.practicum.runner;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.boot.CommandLineRunner;
+import org.springframework.stereotype.Component;
+import ru.yandex.practicum.processor.SimilarityProcessor;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class AggregatorRunner implements CommandLineRunner {
+ private final SimilarityProcessor similarityProcessor;
+
+ @Override
+ public void run(String... args) {
+ log.info("Запуск AggregatorRunner");
+ similarityProcessor.start();
+ log.info("AggregatorRunner завершил запуск");
+ }
+}
diff --git a/stats/aggregator/src/main/resources/application.yaml b/stats/aggregator/src/main/resources/application.yaml
new file mode 100644
index 0000000..9f3b297
--- /dev/null
+++ b/stats/aggregator/src/main/resources/application.yaml
@@ -0,0 +1,26 @@
+spring:
+ application:
+ name: aggregator
+
+ config:
+ import: "configserver:"
+
+ cloud:
+ config:
+ fail-fast: true
+ retry:
+ useRandomPolicy: true
+ max-interval: 6000
+ discovery:
+ enabled: true
+ serviceId: config-server
+
+server:
+ port: 0
+
+eureka:
+ instance:
+ instanceId: ${spring.application.name}:${spring.application.instance_id:${random.value}}
+ client:
+ serviceUrl:
+ defaultZone: http://localhost:8761/eureka/
\ No newline at end of file
diff --git a/stats/analyzer/pom.xml b/stats/analyzer/pom.xml
new file mode 100644
index 0000000..eee83ec
--- /dev/null
+++ b/stats/analyzer/pom.xml
@@ -0,0 +1,114 @@
+
+
+ 4.0.0
+
+ ru.yandex.practicum
+ stats
+ 0.0.1-SNAPSHOT
+
+
+ analyzer
+
+
+ 21
+ 21
+ UTF-8
+
+
+
+
+ ru.yandex.practicum
+ avro-schemas
+ 0.0.1-SNAPSHOT
+
+
+
+ ru.yandex.practicum
+ proto-schemas
+ 0.0.1-SNAPSHOT
+
+
+
+ ru.yandex.practicum
+ common
+ 0.0.1-SNAPSHOT
+
+
+
+ org.springframework.boot
+ spring-boot-starter-actuator
+
+
+
+ org.projectlombok
+ lombok
+ provided
+
+
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+
+ org.postgresql
+ postgresql
+ runtime
+
+
+
+ net.devh
+ grpc-spring-boot-starter
+
+
+
+ net.devh
+ grpc-server-spring-boot-starter
+
+
+
+ org.apache.kafka
+ kafka-clients
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-config
+
+
+
+ org.springframework.cloud
+ spring-cloud-starter-netflix-eureka-client
+
+
+
+ org.springframework.retry
+ spring-retry
+
+
+
+ io.grpc
+ grpc-stub
+
+
+
+ io.grpc
+ grpc-protobuf
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+
+
+
+
\ No newline at end of file
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/AnalyzerApp.java b/stats/analyzer/src/main/java/ru/yandex/practicum/AnalyzerApp.java
new file mode 100644
index 0000000..95af559
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/AnalyzerApp.java
@@ -0,0 +1,13 @@
+package ru.yandex.practicum;
+
+import org.springframework.boot.SpringApplication;
+import org.springframework.boot.autoconfigure.SpringBootApplication;
+import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
+
+@SpringBootApplication
+@EnableDiscoveryClient
+public class AnalyzerApp {
+ public static void main(String[] args) {
+ SpringApplication.run(AnalyzerApp.class, args);
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaClient.java b/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaClient.java
new file mode 100644
index 0000000..a7589c0
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaClient.java
@@ -0,0 +1,17 @@
+package ru.yandex.practicum.config;
+
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+
+import java.time.Duration;
+
+public interface KafkaClient {
+
+ Consumer getConsumerAction();
+
+ Consumer getConsumerSimilarity();
+
+ Duration getPollTimeout();
+
+ KafkaTopicsProperties getTopicsProperties();
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaConfig.java b/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaConfig.java
new file mode 100644
index 0000000..eff4e5e
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaConfig.java
@@ -0,0 +1,91 @@
+package ru.yandex.practicum.config;
+
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerConfig;
+import org.apache.kafka.clients.consumer.KafkaConsumer;
+import org.apache.kafka.common.serialization.LongDeserializer;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.Scope;
+import ru.yandex.practicum.deserializer.EventSimilarityDeserializer;
+import ru.yandex.practicum.deserializer.UserActionDeserializer;
+
+import java.time.Duration;
+import java.util.HashMap;
+import java.util.Map;
+
+@Configuration
+public class KafkaConfig {
+
+ @Value("${kafka.bootstrap.servers}")
+ private String bootstrapServers;
+
+ @Value("${kafka.consumer.group.action}")
+ private String groupAction;
+
+ @Value("${kafka.consumer.group.similarity}")
+ private String groupSimilarity;
+
+ @Value("${kafka.consumer.poll.timeout:1000}")
+ private long pollTimeout;
+
+ @Autowired
+ private KafkaTopicsProperties topicsProperties;
+
+ @Bean
+ @Scope("prototype")
+ public KafkaClient kafkaClient() {
+ return new KafkaClient() {
+
+ private Consumer consumerAction;
+ private Consumer consumerSimilarity;
+
+ @Override
+ public Consumer getConsumerAction() {
+ if (consumerAction == null) {
+ consumerAction = createConsumerAction();
+ }
+ return consumerAction;
+ }
+
+ @Override
+ public Consumer getConsumerSimilarity() {
+ if (consumerSimilarity == null) {
+ consumerSimilarity = createConsumerSimilarity();
+ }
+ return consumerSimilarity;
+ }
+
+ @Override
+ public Duration getPollTimeout() {
+ return Duration.ofMillis(pollTimeout);
+ }
+
+ @Override
+ public KafkaTopicsProperties getTopicsProperties() {
+ return topicsProperties;
+ }
+
+ private Consumer createConsumerAction() {
+ Map config = new HashMap<>();
+ config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+ config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class);
+ config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, UserActionDeserializer.class);
+ config.put(ConsumerConfig.GROUP_ID_CONFIG, groupAction);
+ return new KafkaConsumer<>(config);
+ }
+
+ private Consumer createConsumerSimilarity() {
+ Map config = new HashMap<>();
+ config.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers);
+ config.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, LongDeserializer.class);
+ config.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, EventSimilarityDeserializer.class);
+ config.put(ConsumerConfig.GROUP_ID_CONFIG, groupSimilarity);
+ return new KafkaConsumer<>(config);
+ }
+ };
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaTopicsProperties.java b/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaTopicsProperties.java
new file mode 100644
index 0000000..460b7ab
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/config/KafkaTopicsProperties.java
@@ -0,0 +1,13 @@
+package ru.yandex.practicum.config;
+
+import lombok.Data;
+import org.springframework.boot.context.properties.ConfigurationProperties;
+import org.springframework.stereotype.Component;
+
+@Data
+@Component
+@ConfigurationProperties(prefix = "spring.kafka.topics")
+public class KafkaTopicsProperties {
+ private String userActions = "stats.user-actions.v1";
+ private String eventsSimilarity = "stats.events-similarity.v1";
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/consumer/EventSimilarityConsumer.java b/stats/analyzer/src/main/java/ru/yandex/practicum/consumer/EventSimilarityConsumer.java
new file mode 100644
index 0000000..07f66de
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/consumer/EventSimilarityConsumer.java
@@ -0,0 +1,80 @@
+package ru.yandex.practicum.consumer;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerRecords;
+import org.apache.kafka.clients.consumer.OffsetAndMetadata;
+import org.apache.kafka.common.TopicPartition;
+import org.springframework.stereotype.Component;
+import ru.yandex.practicum.config.KafkaClient;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class EventSimilarityConsumer {
+ private final KafkaClient kafkaClient;
+ private Consumer consumer;
+
+ public ConsumerRecords poll(Duration timeout) {
+ return getConsumer().poll(timeout);
+ }
+
+ public void subscribe() {
+ getConsumer().subscribe(List.of(kafkaClient.getTopicsProperties().getEventsSimilarity()));
+ log.info("Подписка на топик сходств: {}", kafkaClient.getTopicsProperties().getEventsSimilarity());
+ }
+
+ public void commitAsync(Map offsets) {
+ getConsumer().commitAsync(offsets, (offsetsMap, exception) -> {
+ if (exception != null) {
+ log.error("Ошибка асинхронного коммита оффсетов: {}", offsetsMap, exception);
+ } else {
+ log.debug("Асинхронный коммит оффсетов выполнен: {}", offsetsMap);
+ }
+ });
+ }
+
+ public void commitSync(Map offsets) {
+ try {
+ getConsumer().commitSync(offsets);
+ log.debug("Синхронный коммит оффсетов выполнен: {}", offsets);
+ } catch (Exception e) {
+ log.error("Ошибка синхронного коммита оффсетов", e);
+ throw e;
+ }
+ }
+
+ public void wakeup() {
+ if (consumer != null) {
+ log.info("Вызов wakeup для consumer сходств");
+ consumer.wakeup();
+ }
+ }
+
+ public void close() {
+ if (consumer != null) {
+ try {
+ consumer.wakeup();
+ consumer.close(Duration.ofMillis(100));
+ log.info("Consumer сходств успешно закрыт");
+ } catch (Exception e) {
+ log.error("Ошибка при закрытии consumer сходств", e);
+ } finally {
+ consumer = null;
+ }
+ }
+ }
+
+ public Consumer getConsumer() {
+ if (consumer == null) {
+ consumer = kafkaClient.getConsumerSimilarity();
+ }
+ return consumer;
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/consumer/UserActionConsumer.java b/stats/analyzer/src/main/java/ru/yandex/practicum/consumer/UserActionConsumer.java
new file mode 100644
index 0000000..ac14685
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/consumer/UserActionConsumer.java
@@ -0,0 +1,80 @@
+package ru.yandex.practicum.consumer;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.avro.specific.SpecificRecordBase;
+import org.apache.kafka.clients.consumer.Consumer;
+import org.apache.kafka.clients.consumer.ConsumerRecords;
+import org.apache.kafka.clients.consumer.OffsetAndMetadata;
+import org.apache.kafka.common.TopicPartition;
+import org.springframework.stereotype.Component;
+import ru.yandex.practicum.config.KafkaClient;
+
+import java.time.Duration;
+import java.util.List;
+import java.util.Map;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class UserActionConsumer {
+ private final KafkaClient kafkaClient;
+ private Consumer consumer;
+
+ public ConsumerRecords poll(Duration timeout) {
+ return getConsumer().poll(timeout);
+ }
+
+ public void subscribe() {
+ getConsumer().subscribe(List.of(kafkaClient.getTopicsProperties().getUserActions()));
+ log.info("Подписка на топик действий: {}", kafkaClient.getTopicsProperties().getUserActions());
+ }
+
+ public void commitAsync(Map offsets) {
+ getConsumer().commitAsync(offsets, (offsetsMap, exception) -> {
+ if (exception != null) {
+ log.error("Ошибка асинхронного коммита оффсетов: {}", offsetsMap, exception);
+ } else {
+ log.debug("Асинхронный коммит оффсетов выполнен: {}", offsetsMap);
+ }
+ });
+ }
+
+ public void commitSync(Map offsets) {
+ try {
+ getConsumer().commitSync(offsets);
+ log.debug("Синхронный коммит оффсетов выполнен: {}", offsets);
+ } catch (Exception e) {
+ log.error("Ошибка синхронного коммита оффсетов", e);
+ throw e;
+ }
+ }
+
+ public void wakeup() {
+ if (consumer != null) {
+ log.info("Вызов wakeup для consumer действий");
+ consumer.wakeup();
+ }
+ }
+
+ public void close() {
+ if (consumer != null) {
+ try {
+ consumer.wakeup();
+ consumer.close(Duration.ofMillis(100));
+ log.info("Consumer действий успешно закрыт");
+ } catch (Exception e) {
+ log.error("Ошибка при закрытии consumer действий", e);
+ } finally {
+ consumer = null;
+ }
+ }
+ }
+
+ public Consumer getConsumer() {
+ if (consumer == null) {
+ consumer = kafkaClient.getConsumerAction();
+ }
+ return consumer;
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/controller/RecommendationsController.java b/stats/analyzer/src/main/java/ru/yandex/practicum/controller/RecommendationsController.java
new file mode 100644
index 0000000..2755f63
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/controller/RecommendationsController.java
@@ -0,0 +1,57 @@
+package ru.yandex.practicum.controller;
+
+import io.grpc.Status;
+import io.grpc.stub.StreamObserver;
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import net.devh.boot.grpc.server.service.GrpcService;
+import ru.practicum.ewm.stats.proto.*;
+import ru.yandex.practicum.service.RecommendationService;
+
+import java.util.stream.Stream;
+
+@Slf4j
+@GrpcService
+@RequiredArgsConstructor
+public class RecommendationsController extends RecommendationsControllerGrpc.RecommendationsControllerImplBase {
+ private final RecommendationService recommendationService;
+
+ @Override
+ public void getRecommendationsForUser(UserPredictionsRequestProto request,
+ StreamObserver responseObserver) {
+ log.info("gRPC запрос рекомендаций: userId={}, maxResults={}",
+ request.getUserId(), request.getMaxResults());
+ handleStreamResponse(recommendationService.getRecommendationsForUser(request), responseObserver);
+ }
+
+ @Override
+ public void getSimilarEvents(SimilarEventsRequestProto request,
+ StreamObserver responseObserver) {
+ log.info("gRPC запрос похожих событий: eventId={}, userId={}, maxResults={}",
+ request.getEventId(), request.getUserId(), request.getMaxResults());
+ handleStreamResponse(recommendationService.getSimilarEvents(request), responseObserver);
+ }
+
+ @Override
+ public void getInteractionsCount(InteractionsCountRequestProto request,
+ StreamObserver responseObserver) {
+ log.info("gRPC запрос количества взаимодействий: events={}",
+ request.getEventIdList());
+ handleStreamResponse(recommendationService.getInteractionsCount(request), responseObserver);
+ }
+
+ private void handleStreamResponse(Stream stream,
+ StreamObserver responseObserver) {
+ try (Stream safeStream = stream) {
+ safeStream.forEach(responseObserver::onNext);
+ responseObserver.onCompleted();
+ log.debug("gRPC ответ успешно отправлен");
+ } catch (Exception e) {
+ log.error("Ошибка при обработке gRPC запроса: {}", e.getMessage(), e);
+ responseObserver.onError(Status.INTERNAL
+ .withDescription(e.getMessage())
+ .withCause(e)
+ .asRuntimeException());
+ }
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/handler/EventSimilarityHandler.java b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/EventSimilarityHandler.java
new file mode 100644
index 0000000..667568b
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/EventSimilarityHandler.java
@@ -0,0 +1,7 @@
+package ru.yandex.practicum.handler;
+
+import ru.practicum.ewm.stats.avro.EventSimilarityAvro;
+
+public interface EventSimilarityHandler {
+ void handle(EventSimilarityAvro eventSimilarityAvro);
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/handler/EventSimilarityHandlerImpl.java b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/EventSimilarityHandlerImpl.java
new file mode 100644
index 0000000..67c4bd9
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/EventSimilarityHandlerImpl.java
@@ -0,0 +1,26 @@
+package ru.yandex.practicum.handler;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.avro.EventSimilarityAvro;
+import ru.yandex.practicum.mapper.EventSimilarityMapper;
+import ru.yandex.practicum.model.EventSimilarity;
+import ru.yandex.practicum.service.EventSimilarityService;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class EventSimilarityHandlerImpl implements EventSimilarityHandler {
+ private final EventSimilarityService eventSimilarityService;
+ private final EventSimilarityMapper mapper;
+
+ @Override
+ public void handle(EventSimilarityAvro avro) {
+ EventSimilarity entity = mapper.toEntity(avro);
+ eventSimilarityService.save(entity);
+
+ log.debug("Сохранено сходство: {} и {}, score={}",
+ entity.getEventA(), entity.getEventB(), entity.getScore());
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/handler/UserActionHandler.java b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/UserActionHandler.java
new file mode 100644
index 0000000..9c45b04
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/UserActionHandler.java
@@ -0,0 +1,7 @@
+package ru.yandex.practicum.handler;
+
+import ru.practicum.ewm.stats.avro.UserActionAvro;
+
+public interface UserActionHandler {
+ void handle(UserActionAvro userActionAvro);
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/handler/UserActionHandlerImpl.java b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/UserActionHandlerImpl.java
new file mode 100644
index 0000000..7d7a233
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/handler/UserActionHandlerImpl.java
@@ -0,0 +1,26 @@
+package ru.yandex.practicum.handler;
+
+import lombok.RequiredArgsConstructor;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.avro.UserActionAvro;
+import ru.yandex.practicum.mapper.UserActionMapper;
+import ru.yandex.practicum.model.UserAction;
+import ru.yandex.practicum.service.UserActionService;
+
+@Slf4j
+@Component
+@RequiredArgsConstructor
+public class UserActionHandlerImpl implements UserActionHandler {
+ private final UserActionService userActionService;
+ private final UserActionMapper mapper;
+
+ @Override
+ public void handle(UserActionAvro avro) {
+ UserAction entity = mapper.toEntity(avro);
+ userActionService.save(entity);
+
+ log.debug("Сохранено действие: userId={}, eventId={}, weight={}",
+ entity.getUserId(), entity.getEventId(), entity.getUserScore());
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/mapper/EventSimilarityMapper.java b/stats/analyzer/src/main/java/ru/yandex/practicum/mapper/EventSimilarityMapper.java
new file mode 100644
index 0000000..4ae3298
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/mapper/EventSimilarityMapper.java
@@ -0,0 +1,17 @@
+package ru.yandex.practicum.mapper;
+
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.avro.EventSimilarityAvro;
+import ru.yandex.practicum.model.EventSimilarity;
+
+@Component
+public class EventSimilarityMapper {
+
+ public EventSimilarity toEntity(EventSimilarityAvro avro) {
+ return EventSimilarity.builder()
+ .eventA(avro.getEventA())
+ .eventB(avro.getEventB())
+ .score(avro.getScore())
+ .build();
+ }
+}
diff --git a/stats/analyzer/src/main/java/ru/yandex/practicum/mapper/RecommendationsMapper.java b/stats/analyzer/src/main/java/ru/yandex/practicum/mapper/RecommendationsMapper.java
new file mode 100644
index 0000000..75bb270
--- /dev/null
+++ b/stats/analyzer/src/main/java/ru/yandex/practicum/mapper/RecommendationsMapper.java
@@ -0,0 +1,43 @@
+package ru.yandex.practicum.mapper;
+
+import org.springframework.stereotype.Component;
+import ru.practicum.ewm.stats.proto.RecommendedEventProto;
+import ru.yandex.practicum.model.EventSimilarity;
+
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Stream;
+
+@Component
+public class RecommendationsMapper {
+
+ public Stream mapToProto(
+ List eventSimilarities, Long currentEventId) {
+ return eventSimilarities.stream()
+ .map(s -> {
+ long recommendedEventId = (s.getEventA().equals(currentEventId))
+ ? s.getEventB()
+ : s.getEventA();
+ return RecommendedEventProto.newBuilder()
+ .setEventId(recommendedEventId)
+ .setScore(s.getScore())
+ .build();
+ });
+ }
+
+ public Stream mapToProto(Map scoreByEvent) {
+ return scoreByEvent.entrySet().stream()
+ .map(entry -> RecommendedEventProto.newBuilder()
+ .setEventId(entry.getKey())
+ .setScore(entry.getValue())
+ .build());
+ }
+
+ public Stream mapFromAggregation(List
+
+ ru.yandex.practicum
+ proto-schemas
+ 0.0.1-SNAPSHOT
+ compile
+
+
org.springframework.boot
- spring-boot-starter-web
+ spring-boot-starter
org.projectlombok
lombok
- true
+ provided
- ru.yandex.practicum
- stats-dto
- 0.0.1-SNAPSHOT
+ net.devh
+ grpc-spring-boot-starter
org.springframework.cloud
- spring-cloud-starter-netflix-eureka-client
+ spring-cloud-starter-config
org.springframework.cloud
- spring-cloud-starter-config
+ spring-cloud-commons
org.springframework.cloud
- spring-cloud-commons
+ spring-cloud-starter-openfeign
diff --git a/stats/stats-client/src/main/java/ru/yandex/practicum/StatsClientApp.java b/stats/stats-client/src/main/java/ru/yandex/practicum/StatsClientApp.java
deleted file mode 100644
index 8c3fb01..0000000
--- a/stats/stats-client/src/main/java/ru/yandex/practicum/StatsClientApp.java
+++ /dev/null
@@ -1,77 +0,0 @@
-package ru.yandex.practicum;
-
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.beans.factory.annotation.Value;
-import org.springframework.core.ParameterizedTypeReference;
-import org.springframework.http.HttpHeaders;
-import org.springframework.http.MediaType;
-import org.springframework.stereotype.Component;
-import org.springframework.web.client.RestClient;
-import org.springframework.web.util.UriBuilder;
-import ru.yandex.practicum.exception.StatsClientException;
-
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-
-import static ru.yandex.practicum.constants.DateTimeConstants.DATE_TIME_PATTERN;
-
-@Slf4j
-@Component
-public class StatsClientApp {
- private final RestClient restClient;
- private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN);
-
- public StatsClientApp(@Value("${stats-server.url:http://localhost:9090}") String serverUrl) {
- this.restClient = RestClient.builder()
- .baseUrl(serverUrl)
- .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
- .build();
- }
-
- public void saveHit(CreateEndpointHitDto createEndpointHitDto) {
- try {
- restClient.post()
- .uri("/hit")
- .body(createEndpointHitDto)
- .retrieve()
- .toBodilessEntity();
-
- log.debug("Запись обращения к эндпоинту успешно сохранена: приложение {}, URI {}",
- createEndpointHitDto.app(), createEndpointHitDto.uri());
- } catch (Exception exception) {
- log.error("Ошибка при сохранении статистики: {}", exception.getMessage());
- throw new StatsClientException("Endpoint statistics could not be saved", exception);
- }
- }
-
- public List getStats(LocalDateTime start, LocalDateTime end,
- List uris, boolean unique) {
- try {
- List result = restClient.get()
- .uri(uriBuilder -> {
- UriBuilder builder = uriBuilder.path("/stats")
- .queryParam("start", start.format(formatter))
- .queryParam("end", end.format(formatter));
-
- if (uris != null && !uris.isEmpty()) {
- uris.forEach(uri -> builder.queryParam("uris", uri));
- }
-
- builder.queryParam("unique", unique);
-
- return builder.build();
- })
- .retrieve()
- .body(new ParameterizedTypeReference<>() {
- });
-
- log.debug("Получено записей статистики: {}", result != null ? result.size() : 0);
-
- return result;
- } catch (Exception exception) {
- log.error("Ошибка при получении статистики: {}", exception.getMessage());
- throw new StatsClientException("Statistics could not be retrieved", exception);
- }
- }
-}
diff --git a/stats/stats-client/src/main/java/ru/yandex/practicum/client/AnalyzerClient.java b/stats/stats-client/src/main/java/ru/yandex/practicum/client/AnalyzerClient.java
new file mode 100644
index 0000000..af5a893
--- /dev/null
+++ b/stats/stats-client/src/main/java/ru/yandex/practicum/client/AnalyzerClient.java
@@ -0,0 +1,58 @@
+package ru.yandex.practicum.client;
+
+import io.grpc.StatusRuntimeException;
+import lombok.extern.slf4j.Slf4j;
+import net.devh.boot.grpc.client.inject.GrpcClient;
+import org.springframework.stereotype.Service;
+import ru.practicum.ewm.stats.proto.*;
+
+import java.util.Iterator;
+import java.util.Spliterator;
+import java.util.Spliterators;
+import java.util.stream.Stream;
+import java.util.stream.StreamSupport;
+
+@Slf4j
+@Service
+public class AnalyzerClient {
+
+ @GrpcClient("analyzer")
+ private RecommendationsControllerGrpc.RecommendationsControllerBlockingStub analyzerStub;
+
+ public Stream getRecommendationsForUser(UserPredictionsRequestProto request) {
+ try {
+ Iterator iterator = analyzerStub.getRecommendationsForUser(request);
+ return asStream(iterator);
+ } catch (StatusRuntimeException e) {
+ log.error("Ошибка получения рекомендаций: {}", e.getMessage());
+ return Stream.empty();
+ }
+ }
+
+ public Stream getSimilarEvents(SimilarEventsRequestProto request) {
+ try {
+ Iterator iterator = analyzerStub.getSimilarEvents(request);
+ return asStream(iterator);
+ } catch (StatusRuntimeException e) {
+ log.error("Ошибка получения похожих событий: {}", e.getMessage());
+ return Stream.empty();
+ }
+ }
+
+ public Stream getInteractionsCount(InteractionsCountRequestProto request) {
+ try {
+ Iterator iterator = analyzerStub.getInteractionsCount(request);
+ return asStream(iterator);
+ } catch (StatusRuntimeException e) {
+ log.error("Ошибка получения количества взаимодействий: {}", e.getMessage());
+ return Stream.empty();
+ }
+ }
+
+ private Stream asStream(Iterator iterator) {
+ return StreamSupport.stream(
+ Spliterators.spliteratorUnknownSize(iterator, Spliterator.ORDERED),
+ false
+ );
+ }
+}
diff --git a/stats/stats-client/src/main/java/ru/yandex/practicum/client/CollectorClient.java b/stats/stats-client/src/main/java/ru/yandex/practicum/client/CollectorClient.java
new file mode 100644
index 0000000..cec9d14
--- /dev/null
+++ b/stats/stats-client/src/main/java/ru/yandex/practicum/client/CollectorClient.java
@@ -0,0 +1,27 @@
+package ru.yandex.practicum.client;
+
+import io.grpc.StatusRuntimeException;
+import lombok.extern.slf4j.Slf4j;
+import net.devh.boot.grpc.client.inject.GrpcClient;
+import org.springframework.stereotype.Service;
+import ru.practicum.ewm.stats.proto.UserActionControllerGrpc;
+import ru.practicum.ewm.stats.proto.UserActionProto;
+
+@Slf4j
+@Service
+public class CollectorClient {
+
+ @GrpcClient("collector")
+ private UserActionControllerGrpc.UserActionControllerBlockingStub collectorStub;
+
+ public void sendUserAction(UserActionProto action) {
+ try {
+ collectorStub.collectUserAction(action);
+ log.debug("Действие отправлено: userId={}, eventId={}",
+ action.getUserId(), action.getEventId());
+ } catch (StatusRuntimeException e) {
+ log.error("Ошибка отправки действия: {}", e.getMessage());
+ throw e;
+ }
+ }
+}
diff --git a/stats/stats-client/src/main/java/ru/yandex/practicum/exception/StatsClientException.java b/stats/stats-client/src/main/java/ru/yandex/practicum/exception/StatsClientException.java
deleted file mode 100644
index ee42c9a..0000000
--- a/stats/stats-client/src/main/java/ru/yandex/practicum/exception/StatsClientException.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package ru.yandex.practicum.exception;
-
-public class StatsClientException extends RuntimeException {
- public StatsClientException(String message, Throwable cause) {
- super(message, cause);
- }
-}
diff --git a/stats/stats-dto/src/main/java/ru/yandex/practicum/CreateEndpointHitDto.java b/stats/stats-dto/src/main/java/ru/yandex/practicum/CreateEndpointHitDto.java
deleted file mode 100644
index d262ea8..0000000
--- a/stats/stats-dto/src/main/java/ru/yandex/practicum/CreateEndpointHitDto.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package ru.yandex.practicum;
-
-import com.fasterxml.jackson.annotation.JsonFormat;
-import jakarta.validation.constraints.NotBlank;
-import jakarta.validation.constraints.NotNull;
-
-import java.time.LocalDateTime;
-
-import static ru.yandex.practicum.constants.DateTimeConstants.DATE_TIME_PATTERN;
-
-public record CreateEndpointHitDto(
-
- @NotBlank(message = "Название приложения не может быть пустым")
- String app,
-
- @NotBlank(message = "URI не может быть пустым")
- String uri,
-
- @NotBlank(message = "IP адрес не может быть пустым")
- String ip,
-
- @NotNull(message = "Временная метка не может быть null")
- @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = DATE_TIME_PATTERN)
- LocalDateTime timestamp
-) {
-}
diff --git a/stats/stats-dto/src/main/java/ru/yandex/practicum/StatsRequest.java b/stats/stats-dto/src/main/java/ru/yandex/practicum/StatsRequest.java
deleted file mode 100644
index 7e31d6b..0000000
--- a/stats/stats-dto/src/main/java/ru/yandex/practicum/StatsRequest.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package ru.yandex.practicum;
-
-import java.time.LocalDateTime;
-import java.time.format.DateTimeFormatter;
-import java.util.List;
-
-import static ru.yandex.practicum.constants.DateTimeConstants.DATE_TIME_PATTERN;
-
-public record StatsRequest(
-
- LocalDateTime start,
-
- LocalDateTime end,
-
- List uris,
-
- boolean unique
-) {
- public static StatsRequest of(String start, String end, List uris, boolean unique) {
- DateTimeFormatter formatter = DateTimeFormatter.ofPattern(DATE_TIME_PATTERN);
- return new StatsRequest(
- LocalDateTime.parse(start, formatter),
- LocalDateTime.parse(end, formatter),
- uris,
- unique
- );
- }
-}
diff --git a/stats/stats-dto/src/main/java/ru/yandex/practicum/ViewStatsDto.java b/stats/stats-dto/src/main/java/ru/yandex/practicum/ViewStatsDto.java
deleted file mode 100644
index 660b8fd..0000000
--- a/stats/stats-dto/src/main/java/ru/yandex/practicum/ViewStatsDto.java
+++ /dev/null
@@ -1,11 +0,0 @@
-package ru.yandex.practicum;
-
-public record ViewStatsDto(
-
- String app,
-
- String uri,
-
- Long hits
-) {
-}
diff --git a/stats/stats-dto/src/main/java/ru/yandex/practicum/constants/DateTimeConstants.java b/stats/stats-dto/src/main/java/ru/yandex/practicum/constants/DateTimeConstants.java
deleted file mode 100644
index 10d19ff..0000000
--- a/stats/stats-dto/src/main/java/ru/yandex/practicum/constants/DateTimeConstants.java
+++ /dev/null
@@ -1,9 +0,0 @@
-package ru.yandex.practicum.constants;
-
-public final class DateTimeConstants {
-
- private DateTimeConstants() {
- }
-
- public static final String DATE_TIME_PATTERN = "yyyy-MM-dd HH:mm:ss";
-}
diff --git a/stats/stats-server/Dockerfile b/stats/stats-server/Dockerfile
deleted file mode 100644
index 0ff1817..0000000
--- a/stats/stats-server/Dockerfile
+++ /dev/null
@@ -1,5 +0,0 @@
-FROM eclipse-temurin:21-jre-jammy
-VOLUME /tmp
-ARG JAR_FILE=target/*.jar
-COPY ${JAR_FILE} app.jar
-ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -jar /app.jar"]
\ No newline at end of file
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/controller/StatsController.java b/stats/stats-server/src/main/java/ru/yandex/practicum/controller/StatsController.java
deleted file mode 100644
index 0d7c10e..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/controller/StatsController.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package ru.yandex.practicum.controller;
-
-import jakarta.validation.Valid;
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.*;
-import ru.yandex.practicum.CreateEndpointHitDto;
-import ru.yandex.practicum.StatsRequest;
-import ru.yandex.practicum.ViewStatsDto;
-import ru.yandex.practicum.exception.BadRequestException;
-import ru.yandex.practicum.service.StatsService;
-
-import java.util.List;
-
-@Slf4j
-@RestController
-@RequiredArgsConstructor
-public class StatsController {
- private final StatsService statsService;
-
- @PostMapping("/hit")
- @ResponseStatus(HttpStatus.CREATED)
- public void createHit(@RequestBody @Valid CreateEndpointHitDto createEndpointHitDto) {
- log.debug("Controller: createHit requestBody={}", createEndpointHitDto);
- statsService.createHit(createEndpointHitDto);
- }
-
- @GetMapping("/stats")
- public List getStats(@RequestParam("start") String start, @RequestParam("end") String end,
- @RequestParam(value = "uris", required = false) List uris,
- @RequestParam(value = "unique", defaultValue = "false") boolean unique) {
- StatsRequest request = StatsRequest.of(start, end, uris, unique);
-
- if (request.start().isAfter(request.end())) {
- throw new BadRequestException("Дата начала должна быть раньше даты окончания");
- }
-
- log.debug("Controller: getStats request={}", request);
- return statsService.getStats(request);
- }
-}
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/exception/BadRequestException.java b/stats/stats-server/src/main/java/ru/yandex/practicum/exception/BadRequestException.java
deleted file mode 100644
index 4340bf4..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/exception/BadRequestException.java
+++ /dev/null
@@ -1,7 +0,0 @@
-package ru.yandex.practicum.exception;
-
-public class BadRequestException extends RuntimeException {
- public BadRequestException(String message) {
- super(message);
- }
-}
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/exception/ErrorHandler.java b/stats/stats-server/src/main/java/ru/yandex/practicum/exception/ErrorHandler.java
deleted file mode 100644
index 294cc02..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/exception/ErrorHandler.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package ru.yandex.practicum.exception;
-
-import jakarta.servlet.http.HttpServletRequest;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.ResponseStatus;
-import org.springframework.web.bind.annotation.RestControllerAdvice;
-
-@RestControllerAdvice
-public class ErrorHandler {
- @ExceptionHandler(BadRequestException.class)
- @ResponseStatus(HttpStatus.BAD_REQUEST)
- public ErrorResponse handleBadRequestException(BadRequestException exception, HttpServletRequest request) {
- return buildResponse(HttpStatus.BAD_REQUEST, exception, request);
- }
-
- private ErrorResponse buildResponse(
- HttpStatus httpStatus, Exception exception, HttpServletRequest request) {
- return buildResponse(httpStatus, exception.getMessage(), exception, request);
- }
-
- private ErrorResponse buildResponse(
- HttpStatus httpStatus, String message, Exception exception, HttpServletRequest request) {
- String path = request.getRequestURI();
- String httpMethod = request.getMethod();
- int statusCode = httpStatus.value();
- String error = httpStatus.getReasonPhrase();
-
- return new ErrorResponse(path, httpMethod, statusCode, error, message);
- }
-}
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/exception/ErrorResponse.java b/stats/stats-server/src/main/java/ru/yandex/practicum/exception/ErrorResponse.java
deleted file mode 100644
index c8ea4fa..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/exception/ErrorResponse.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package ru.yandex.practicum.exception;
-
-public record ErrorResponse(
-
- String path,
-
- String httpMethod,
-
- int statusCode,
-
- String error,
-
- String message
-) {
-}
\ No newline at end of file
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/mapper/EndpointHitMapper.java b/stats/stats-server/src/main/java/ru/yandex/practicum/mapper/EndpointHitMapper.java
deleted file mode 100644
index 7ffff00..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/mapper/EndpointHitMapper.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package ru.yandex.practicum.mapper;
-
-import org.mapstruct.Mapper;
-import org.mapstruct.Mapping;
-import ru.yandex.practicum.CreateEndpointHitDto;
-import ru.yandex.practicum.model.EndpointHit;
-
-@Mapper(componentModel = "spring")
-public interface EndpointHitMapper {
-
- @Mapping(target = "id", ignore = true)
- EndpointHit fromNewRequest(CreateEndpointHitDto request);
-}
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/model/EndpointHit.java b/stats/stats-server/src/main/java/ru/yandex/practicum/model/EndpointHit.java
deleted file mode 100644
index 47110dd..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/model/EndpointHit.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package ru.yandex.practicum.model;
-
-import jakarta.persistence.*;
-import lombok.EqualsAndHashCode;
-import lombok.Getter;
-import lombok.Setter;
-
-import java.time.LocalDateTime;
-
-@Entity
-@Table(name = "endpoint_hits")
-@Getter
-@Setter
-@EqualsAndHashCode(onlyExplicitlyIncluded = true)
-public class EndpointHit {
-
- @Id
- @GeneratedValue(strategy = GenerationType.IDENTITY)
- @EqualsAndHashCode.Include
- @Column(name = "hit_id")
- private Long id;
-
- private String app;
-
- private String uri;
-
- private String ip;
-
- private LocalDateTime timestamp;
-}
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/repository/StatsRepository.java b/stats/stats-server/src/main/java/ru/yandex/practicum/repository/StatsRepository.java
deleted file mode 100644
index 586129d..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/repository/StatsRepository.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package ru.yandex.practicum.repository;
-
-import org.springframework.data.jpa.repository.JpaRepository;
-import org.springframework.data.jpa.repository.Query;
-import org.springframework.data.repository.query.Param;
-import ru.yandex.practicum.ViewStatsDto;
-import ru.yandex.practicum.model.EndpointHit;
-
-import java.time.LocalDateTime;
-import java.util.List;
-
-public interface StatsRepository extends JpaRepository {
- @Query("""
- SELECT new ru.yandex.practicum.ViewStatsDto(e.app, e.uri, COUNT(DISTINCT e.ip))
- FROM EndpointHit e
- WHERE e.timestamp BETWEEN :start AND :end
- AND (:uris IS NULL OR e.uri IN :uris)
- GROUP BY e.app, e.uri
- ORDER BY COUNT(DISTINCT e.ip) DESC
- """)
- List getUniqueStats(@Param("start") LocalDateTime start,
- @Param("end") LocalDateTime end,
- @Param("uris") List uris);
-
- @Query("""
- SELECT new ru.yandex.practicum.ViewStatsDto(e.app, e.uri, COUNT(e.ip))
- FROM EndpointHit e
- WHERE e.timestamp BETWEEN :start AND :end
- AND (:uris IS NULL OR e.uri IN :uris)
- GROUP BY e.app, e.uri
- ORDER BY COUNT(e.ip) DESC
- """)
- List getStats(@Param("start") LocalDateTime start,
- @Param("end") LocalDateTime end,
- @Param("uris") List uris);
-}
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/service/StatsService.java b/stats/stats-server/src/main/java/ru/yandex/practicum/service/StatsService.java
deleted file mode 100644
index 0d19776..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/service/StatsService.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package ru.yandex.practicum.service;
-
-import ru.yandex.practicum.CreateEndpointHitDto;
-import ru.yandex.practicum.StatsRequest;
-import ru.yandex.practicum.ViewStatsDto;
-
-import java.util.List;
-
-public interface StatsService {
- void createHit(CreateEndpointHitDto createEndpointHitDto);
-
- List getStats(StatsRequest request);
-}
diff --git a/stats/stats-server/src/main/java/ru/yandex/practicum/service/StatsServiceImpl.java b/stats/stats-server/src/main/java/ru/yandex/practicum/service/StatsServiceImpl.java
deleted file mode 100644
index 43c8418..0000000
--- a/stats/stats-server/src/main/java/ru/yandex/practicum/service/StatsServiceImpl.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package ru.yandex.practicum.service;
-
-import lombok.RequiredArgsConstructor;
-import lombok.extern.slf4j.Slf4j;
-import org.springframework.stereotype.Service;
-import org.springframework.transaction.annotation.Transactional;
-import ru.yandex.practicum.CreateEndpointHitDto;
-import ru.yandex.practicum.StatsRequest;
-import ru.yandex.practicum.ViewStatsDto;
-import ru.yandex.practicum.mapper.EndpointHitMapper;
-import ru.yandex.practicum.model.EndpointHit;
-import ru.yandex.practicum.repository.StatsRepository;
-
-import java.util.List;
-
-@Slf4j
-@Service
-@RequiredArgsConstructor
-@Transactional(readOnly = true)
-public class StatsServiceImpl implements StatsService {
- private final StatsRepository statsRepository;
- private final EndpointHitMapper hitMapper;
-
- @Override
- @Transactional
- public void createHit(CreateEndpointHitDto createEndpointHitDto) {
- EndpointHit hit = hitMapper.fromNewRequest(createEndpointHitDto);
- hit = statsRepository.save(hit);
- log.info("Отправлен запрос на сохранение информации id={}", hit.getId());
- }
-
- @Override
- public List getStats(StatsRequest request) {
- List uris = (request.uris() == null || request.uris().isEmpty())
- ? null
- : request.uris();
-
- List result = request.unique()
- ? statsRepository.getUniqueStats(request.start(), request.end(), uris)
- : statsRepository.getStats(request.start(), request.end(), uris);
-
- log.info("Размер полученного списка статистики: {}", result.size());
- return result;
- }
-}
diff --git a/stats/stats-server/src/main/resources/application.yaml b/stats/stats-server/src/main/resources/application.yaml
deleted file mode 100644
index 50188d5..0000000
--- a/stats/stats-server/src/main/resources/application.yaml
+++ /dev/null
@@ -1,21 +0,0 @@
-spring:
- application:
- name: stats-server
- config:
- import: "configserver:"
- cloud:
- config:
- discovery:
- enabled: true
- service-id: config-server
- fail-fast: true
-
-server:
- port: 0
-
-eureka:
- client:
- serviceUrl:
- defaultZone: http://localhost:8761/eureka/
- instance:
- prefer-ip-address: true
\ No newline at end of file
diff --git a/stats/stats-server/src/main/resources/schema.sql b/stats/stats-server/src/main/resources/schema.sql
deleted file mode 100644
index 6af3298..0000000
--- a/stats/stats-server/src/main/resources/schema.sql
+++ /dev/null
@@ -1,10 +0,0 @@
-DROP TABLE IF EXISTS endpoint_hits;
-
-create TABLE IF NOT EXISTS endpoint_hits (
- hit_id BIGINT GENERATED BY DEFAULT AS IDENTITY PRIMARY KEY,
- app VARCHAR(255) NOT NULL,
- uri VARCHAR(2000) NOT NULL,
- ip VARCHAR(45) NOT NULL,
- timestamp TIMESTAMP WITHOUT TIME ZONE NOT NULL
-);
-create index IF NOT EXISTS idx_endpoint_hits_app_uri_timestamp ON endpoint_hits(app, uri, timestamp);
\ No newline at end of file