Отправка счетчиков

This commit is contained in:
serega6531
2020-03-17 15:40:17 +03:00
parent b3cc0de450
commit 2611c7685e
4 changed files with 53 additions and 3 deletions

View File

@@ -1,5 +1,5 @@
package ru.serega6531.packmate.model.enums; package ru.serega6531.packmate.model.enums;
public enum SubscriptionMessageType { 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
} }

View File

@@ -0,0 +1,23 @@
package ru.serega6531.packmate.model.pojo;
import lombok.Getter;
import java.util.Map;
@Getter
public class CountersHolder {
private Map<Integer, Integer> servicesPackets;
private Map<Integer, Integer> servicesStreams;
private int totalPackets;
private int totalStreams;
public CountersHolder(Map<Integer, Integer> servicesPackets, Map<Integer, Integer> servicesStreams,
int totalPackets, int totalStreams) {
this.servicesPackets = servicesPackets;
this.servicesStreams = servicesStreams;
this.totalPackets = totalPackets;
this.totalStreams = totalStreams;
}
}

View File

@@ -1,21 +1,33 @@
package ru.serega6531.packmate.service; package ru.serega6531.packmate.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled; import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Service; 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.Counter;
import ru.serega6531.packmate.model.pojo.CountersHolder;
import ru.serega6531.packmate.model.pojo.SubscriptionMessage;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors;
@Service @Service
public class CountingService { public class CountingService {
private final SubscriptionService subscriptionService;
private Map<Integer, Counter> servicesPackets = new HashMap<>(); private Map<Integer, Counter> servicesPackets = new HashMap<>();
private Map<Integer, Counter> servicesStreams = new HashMap<>(); private Map<Integer, Counter> servicesStreams = new HashMap<>();
private Counter totalPackets = new Counter(); private Counter totalPackets = new Counter();
private Counter totalStreams = new Counter(); private Counter totalStreams = new Counter();
@Autowired
public CountingService(SubscriptionService subscriptionService) {
this.subscriptionService = subscriptionService;
}
void countStream(int serviceId, int packets) { void countStream(int serviceId, int packets) {
getCounter(servicesPackets, serviceId).increment(packets); getCounter(servicesPackets, serviceId).increment(packets);
getCounter(servicesStreams, serviceId).increment(); getCounter(servicesStreams, serviceId).increment();
@@ -26,7 +38,22 @@ public class CountingService {
@Scheduled(cron = "0 * * ? * *") @Scheduled(cron = "0 * * ? * *")
public void sendCounters() { 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<Integer, Integer> toIntegerMap(Map<Integer, Counter> map) {
return map.entrySet().stream()
.collect(Collectors.toMap(
Map.Entry::getKey,
ent -> ent.getValue().getValue()));
} }
private Counter getCounter(Map<Integer, Counter> counters, int serviceId) { private Counter getCounter(Map<Integer, Counter> counters, int serviceId) {

View File

@@ -36,7 +36,7 @@ public class SubscriptionService {
public void removeSubscriber(WebSocketSession session) { public void removeSubscriber(WebSocketSession session) {
subscribers.remove(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) { void broadcast(SubscriptionMessage message) {