diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java index b10a465e..3e05909b 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/Session.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/Session.java @@ -272,4 +272,8 @@ public class Session implements SessionInterface { return false; } + public int getNumberOfConnections() { + return this.participants.size(); + } + } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java index bcbfa7ce..c924976b 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/core/KurentoSession.java @@ -347,6 +347,7 @@ public class KurentoSession extends Session { public int getNumberOfWebrtcConnections() { return this.getActivePublishers() + this.participants.values().stream() + .filter(p -> !ProtocolElements.RECORDER_PARTICIPANT_PUBLICID.equals(p.getParticipantPublicId())) .mapToInt(p -> ((KurentoParticipant) p).getSubscribers().size()).reduce(0, Integer::sum); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java index fd4e23c6..adfdb53b 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/FixedOneKmsManager.java @@ -71,17 +71,16 @@ public class FixedOneKmsManager extends KmsManager { @Override public void incrementActiveRecordings(RecordingProperties properties, String recordingId, Session session) { try { - this.getKmss().iterator().next().incrementActiveRecordings(recordingId, session.getSessionId()); + this.getKmss().iterator().next().incrementActiveRecordings(session.getSessionId(), recordingId, properties); } catch (NoSuchElementException e) { log.error("There is no KMS available when incrementing active recordings"); } } @Override - public void decrementActiveRecordings(RecordingProperties recordingProperties, String recordingId, - Session session) { + public void decrementActiveRecordings(RecordingProperties properties, String recordingId, Session session) { try { - this.getKmss().iterator().next().decrementActiveRecordings(recordingId); + this.getKmss().iterator().next().decrementActiveRecordings(recordingId, properties); } catch (NoSuchElementException e) { log.error("There is no KMS available when decrementing active recordings"); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/Kms.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/Kms.java index 8b09b0f3..4a478c84 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/Kms.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/kms/Kms.java @@ -36,8 +36,10 @@ import org.slf4j.LoggerFactory; import com.google.gson.JsonArray; import com.google.gson.JsonObject; +import io.openvidu.java.client.RecordingProperties; import io.openvidu.server.kurento.core.KurentoSession; import io.openvidu.server.utils.QuarantineKiller; +import io.openvidu.server.utils.RecordingUtils; import io.openvidu.server.utils.UpdatableTimerTask; /** @@ -69,6 +71,7 @@ public class Kms { private Map kurentoSessions = new ConcurrentHashMap<>(); private Map activeRecordings = new ConcurrentHashMap<>(); + private AtomicLong activeComposedRecordings = new AtomicLong(); public Kms(KmsProperties props, LoadManager loadManager, QuarantineKiller quarantineKiller) { this.id = props.getId(); @@ -163,12 +166,19 @@ public class Kms { return this.activeRecordings.entrySet(); } - public synchronized void incrementActiveRecordings(String recordingId, String sessionId) { + public synchronized void incrementActiveRecordings(String sessionId, String recordingId, + RecordingProperties properties) { this.activeRecordings.put(recordingId, sessionId); + if (RecordingUtils.IS_COMPOSED(properties.outputMode())) { + this.activeComposedRecordings.incrementAndGet(); + } } - public synchronized void decrementActiveRecordings(String recordingId) { + public synchronized void decrementActiveRecordings(String recordingId, RecordingProperties properties) { this.activeRecordings.remove(recordingId); + if (RecordingUtils.IS_COMPOSED(properties.outputMode())) { + this.activeComposedRecordings.decrementAndGet(); + } this.quarantineKiller.dropMediaNode(this.id); } @@ -250,9 +260,18 @@ public class Kms { return this.uri; } + public int getNumberOfConnections() { + return this.kurentoSessions.values().stream().mapToInt(kSession -> kSession.getNumberOfConnections()).reduce(0, + Integer::sum); + } + public int getNumberOfWebrtcConnections() { - return this.kurentoSessions.values().stream().mapToInt(session -> session.getNumberOfWebrtcConnections()) + return this.kurentoSessions.values().stream().mapToInt(kSession -> kSession.getNumberOfWebrtcConnections()) .reduce(0, Integer::sum); } + public int getNumberOfComposedRecordings() { + return this.activeComposedRecordings.intValue(); + } + }