From 2611c7685e55fdc6129b24c8373e85dfa97f8fa4 Mon Sep 17 00:00:00 2001 From: serega6531 Date: Tue, 17 Mar 2020 15:40:17 +0300 Subject: [PATCH] =?UTF-8?q?=D0=9E=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=81=D1=87=D0=B5=D1=82=D1=87=D0=B8=D0=BA=D0=BE=D0=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../model/enums/SubscriptionMessageType.java | 2 +- .../packmate/model/pojo/CountersHolder.java | 23 +++++++++++++++ .../packmate/service/CountingService.java | 29 ++++++++++++++++++- .../packmate/service/SubscriptionService.java | 2 +- 4 files changed, 53 insertions(+), 3 deletions(-) create mode 100644 src/main/java/ru/serega6531/packmate/model/pojo/CountersHolder.java diff --git a/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java b/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java index af46d09..1d44fda 100644 --- a/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java +++ b/src/main/java/ru/serega6531/packmate/model/enums/SubscriptionMessageType.java @@ -1,5 +1,5 @@ package ru.serega6531.packmate.model.enums; public enum SubscriptionMessageType { - SAVE_SERVICE, SAVE_PATTERN, DELETE_SERVICE, DELETE_PATTERN, NEW_STREAM + SAVE_SERVICE, SAVE_PATTERN, DELETE_SERVICE, DELETE_PATTERN, NEW_STREAM, COUNTERS_UPDATE } diff --git a/src/main/java/ru/serega6531/packmate/model/pojo/CountersHolder.java b/src/main/java/ru/serega6531/packmate/model/pojo/CountersHolder.java new file mode 100644 index 0000000..b39bb8e --- /dev/null +++ b/src/main/java/ru/serega6531/packmate/model/pojo/CountersHolder.java @@ -0,0 +1,23 @@ +package ru.serega6531.packmate.model.pojo; + +import lombok.Getter; + +import java.util.Map; + +@Getter +public class CountersHolder { + + private Map servicesPackets; + private Map servicesStreams; + + private int totalPackets; + private int totalStreams; + + public CountersHolder(Map servicesPackets, Map servicesStreams, + int totalPackets, int totalStreams) { + this.servicesPackets = servicesPackets; + this.servicesStreams = servicesStreams; + this.totalPackets = totalPackets; + this.totalStreams = totalStreams; + } +} diff --git a/src/main/java/ru/serega6531/packmate/service/CountingService.java b/src/main/java/ru/serega6531/packmate/service/CountingService.java index f899e92..a23f8f1 100644 --- a/src/main/java/ru/serega6531/packmate/service/CountingService.java +++ b/src/main/java/ru/serega6531/packmate/service/CountingService.java @@ -1,21 +1,33 @@ package ru.serega6531.packmate.service; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; +import ru.serega6531.packmate.model.enums.SubscriptionMessageType; import ru.serega6531.packmate.model.pojo.Counter; +import ru.serega6531.packmate.model.pojo.CountersHolder; +import ru.serega6531.packmate.model.pojo.SubscriptionMessage; import java.util.HashMap; import java.util.Map; +import java.util.stream.Collectors; @Service public class CountingService { + private final SubscriptionService subscriptionService; + private Map servicesPackets = new HashMap<>(); private Map servicesStreams = new HashMap<>(); private Counter totalPackets = new Counter(); private Counter totalStreams = new Counter(); + @Autowired + public CountingService(SubscriptionService subscriptionService) { + this.subscriptionService = subscriptionService; + } + void countStream(int serviceId, int packets) { getCounter(servicesPackets, serviceId).increment(packets); getCounter(servicesStreams, serviceId).increment(); @@ -26,7 +38,22 @@ public class CountingService { @Scheduled(cron = "0 * * ? * *") public void sendCounters() { - //TODO + subscriptionService.broadcast(new SubscriptionMessage(SubscriptionMessageType.COUNTERS_UPDATE, + new CountersHolder( + toIntegerMap(servicesPackets), toIntegerMap(servicesStreams), + totalPackets.getValue(), totalStreams.getValue()))); + + servicesPackets.clear(); + servicesStreams.clear(); + totalPackets = new Counter(); + totalStreams = new Counter(); + } + + private Map toIntegerMap(Map map) { + return map.entrySet().stream() + .collect(Collectors.toMap( + Map.Entry::getKey, + ent -> ent.getValue().getValue())); } private Counter getCounter(Map counters, int serviceId) { diff --git a/src/main/java/ru/serega6531/packmate/service/SubscriptionService.java b/src/main/java/ru/serega6531/packmate/service/SubscriptionService.java index f140f78..207a978 100644 --- a/src/main/java/ru/serega6531/packmate/service/SubscriptionService.java +++ b/src/main/java/ru/serega6531/packmate/service/SubscriptionService.java @@ -36,7 +36,7 @@ public class SubscriptionService { public void removeSubscriber(WebSocketSession session) { subscribers.remove(session); - log.info("User unsubscribed {}", Objects.requireNonNull(session.getRemoteAddress()).getHostName()); + log.info("User unsubscribed: {}", Objects.requireNonNull(session.getRemoteAddress()).getHostName()); } void broadcast(SubscriptionMessage message) {