Отправка счетчиков
This commit is contained in:
@@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user