From edb5dd36ff957e862fc87588bde14ceb21daea10 Mon Sep 17 00:00:00 2001 From: pabloFuente Date: Thu, 28 Oct 2021 14:06:48 +0200 Subject: [PATCH] openvidu-server: deprecated recordingStarted/recordingStopped CDR events removed --- .../io/openvidu/server/cdr/CDREventName.java | 2 +- .../server/cdr/CDREventRecording.java | 75 ------------------- ...va => CDREventRecordingStatusChanged.java} | 4 +- .../openvidu/server/cdr/CallDetailRecord.java | 35 ++------- .../openvidu/server/core/SessionManager.java | 10 +-- .../recording/service/RecordingManager.java | 10 +-- .../server/summary/SessionSummary.java | 6 +- 7 files changed, 23 insertions(+), 119 deletions(-) delete mode 100644 openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java rename openvidu-server/src/main/java/io/openvidu/server/cdr/{CDREventRecordingStatus.java => CDREventRecordingStatusChanged.java} (93%) diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventName.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventName.java index bef99490..2894b032 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventName.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventName.java @@ -20,7 +20,7 @@ package io.openvidu.server.cdr; public enum CDREventName { sessionCreated, sessionDestroyed, participantJoined, participantLeft, webrtcConnectionCreated, - webrtcConnectionDestroyed, recordingStarted, recordingStopped, recordingStatusChanged, filterEventDispatched, + webrtcConnectionDestroyed, recordingStatusChanged, filterEventDispatched, signalSent, mediaNodeStatusChanged, autoscaling, nodeCrashed } diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java deleted file mode 100644 index 0ffefc85..00000000 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecording.java +++ /dev/null @@ -1,75 +0,0 @@ -/* - * (C) Copyright 2017-2020 OpenVidu (https://openvidu.io) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -package io.openvidu.server.cdr; - -import com.google.gson.JsonObject; - -import io.openvidu.java.client.RecordingLayout; -import io.openvidu.server.core.EndReason; -import io.openvidu.server.recording.Recording; -import io.openvidu.server.utils.RecordingUtils; - -public class CDREventRecording extends CDREventEnd { - - protected Recording recording; - - // recordingStarted - public CDREventRecording(Recording recording) { - super(CDREventName.recordingStarted, recording.getSessionId(), recording.getUniqueSessionId(), - recording.getCreatedAt()); - this.recording = recording; - } - - // recordingStopped - public CDREventRecording(CDREventRecording event, Recording recording, EndReason reason, Long timestamp) { - super(CDREventName.recordingStopped, event == null ? recording.getSessionId() : event.getSessionId(), - event == null ? recording.getUniqueSessionId() : event.getUniqueSessionId(), - event == null ? recording.getCreatedAt() : event.getTimestamp(), reason, timestamp); - this.recording = recording; - } - - @Override - public JsonObject toJson() { - JsonObject json = super.toJson(); - json.addProperty("id", this.recording.getId()); - json.addProperty("name", this.recording.getName()); - json.addProperty("outputMode", this.recording.getOutputMode().name()); - if (RecordingUtils.IS_COMPOSED(this.recording.getOutputMode()) && this.recording.hasVideo()) { - json.addProperty("resolution", this.recording.getResolution()); - json.addProperty("frameRate", this.recording.getFrameRate()); - json.addProperty("recordingLayout", this.recording.getRecordingLayout().name()); - if (RecordingLayout.CUSTOM.equals(this.recording.getRecordingLayout()) - && this.recording.getCustomLayout() != null && !this.recording.getCustomLayout().isEmpty()) { - json.addProperty("customLayout", this.recording.getCustomLayout()); - } - if (this.recording.getRecordingProperties().mediaNode() != null) { - json.addProperty("media_node_id", this.recording.getRecordingProperties().mediaNode()); - } - } - json.addProperty("hasAudio", this.recording.hasAudio()); - json.addProperty("hasVideo", this.recording.hasVideo()); - json.addProperty("size", this.recording.getSize()); - json.addProperty("duration", this.recording.getDuration()); - return json; - } - - public Recording getRecording() { - return this.recording; - } - -} diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatus.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatusChanged.java similarity index 93% rename from openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatus.java rename to openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatusChanged.java index ac4e8fad..4b2de7cf 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatus.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CDREventRecordingStatusChanged.java @@ -25,12 +25,12 @@ import io.openvidu.server.core.EndReason; import io.openvidu.server.recording.Recording; import io.openvidu.server.utils.RecordingUtils; -public class CDREventRecordingStatus extends CDREventEnd { +public class CDREventRecordingStatusChanged extends CDREventEnd { private Recording recording; private Status status; - public CDREventRecordingStatus(Recording recording, Long startTime, EndReason reason, Long timestamp, + public CDREventRecordingStatusChanged(Recording recording, Long startTime, EndReason reason, Long timestamp, Status status) { super(CDREventName.recordingStatusChanged, recording.getSessionId(), recording.getUniqueSessionId(), startTime, reason, timestamp); diff --git a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java index 0ccfc9bd..700906c1 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java +++ b/openvidu-server/src/main/java/io/openvidu/server/cdr/CallDetailRecord.java @@ -39,7 +39,6 @@ import io.openvidu.server.kurento.endpoint.KmsEvent; import io.openvidu.server.recording.Recording; import io.openvidu.server.recording.service.RecordingManager; import io.openvidu.server.summary.SessionSummary; -import io.openvidu.server.webhook.CDRLoggerWebhook; /** * CDR logger to register all information of a Session. Enabled by property @@ -60,7 +59,6 @@ public class CallDetailRecord { private Map participants = new ConcurrentHashMap<>(); private Map publications = new ConcurrentHashMap<>(); private Map> subscriptions = new ConcurrentHashMap<>(); - private Map recordings = new ConcurrentHashMap<>(); public CallDetailRecord(Collection loggers) { this.loggers = loggers; @@ -158,25 +156,15 @@ public class CallDetailRecord { } } - public void recordRecordingStarted(Recording recording) { - CDREventRecording recordingStartedEvent = new CDREventRecording(recording); - this.recordings.putIfAbsent(recording.getId(), recordingStartedEvent); - this.log(recordingStartedEvent); - } - - public void recordRecordingStopped(Recording recording, EndReason reason, long timestamp) { - CDREventRecording recordingStartedEvent = this.recordings.remove(recording.getId()); - CDREventRecording recordingStoppedEvent = new CDREventRecording(recordingStartedEvent, recording, - RecordingManager.finalReason(reason), timestamp); - this.log(recordingStoppedEvent); - - // Summary: update ended recording - sessionManager.getAccumulatedRecordings(recording.getSessionId()).add(recordingStoppedEvent); - } - public void recordRecordingStatusChanged(Recording recording, EndReason finalReason, long timestamp, Status status) { - this.log(new CDREventRecordingStatus(recording, recording.getCreatedAt(), finalReason, timestamp, status)); + CDREventRecordingStatusChanged event = new CDREventRecordingStatusChanged(recording, recording.getCreatedAt(), + finalReason, timestamp, status); + if (Status.stopped.equals(status)) { + // Summary: update ended recording + sessionManager.accumulateNewRecording(event); + } + this.log(event); } public void recordFilterEventDispatched(String sessionId, String uniqueSessionId, String connectionId, @@ -194,14 +182,7 @@ public class CallDetailRecord { protected void log(CDREvent event) { this.loggers.forEach(logger -> { - - // TEMP FIX: AVOID SENDING recordingStarted AND recordingStopped EVENTS TO - // WEBHOOK. ONLY recordingStatusChanged - if (!(logger instanceof CDRLoggerWebhook && (CDREventName.recordingStarted.equals(event.getEventName()) - || CDREventName.recordingStopped.equals(event.getEventName())))) { - logger.log(event); - } - + logger.log(event); }); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java index 0e352cfd..60e46b7f 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/core/SessionManager.java @@ -51,7 +51,7 @@ import io.openvidu.java.client.KurentoOptions; import io.openvidu.java.client.OpenViduRole; import io.openvidu.java.client.Recording; import io.openvidu.java.client.SessionProperties; -import io.openvidu.server.cdr.CDREventRecording; +import io.openvidu.server.cdr.CDREventRecordingStatusChanged; import io.openvidu.server.config.OpenviduConfig; import io.openvidu.server.coturn.CoturnCredentialsService; import io.openvidu.server.kurento.endpoint.EndpointType; @@ -99,7 +99,7 @@ public abstract class SessionManager { final protected ConcurrentMap sessionsNotActive = new ConcurrentHashMap<>(); protected ConcurrentMap> sessionidParticipantpublicidParticipant = new ConcurrentHashMap<>(); protected ConcurrentMap> sessionidFinalUsers = new ConcurrentHashMap<>(); - protected ConcurrentMap> sessionidAccumulatedRecordings = new ConcurrentHashMap<>(); + protected ConcurrentMap> sessionidAccumulatedRecordings = new ConcurrentHashMap<>(); protected ConcurrentMap insecureUsers = new ConcurrentHashMap<>(); @@ -292,11 +292,11 @@ public abstract class SessionManager { return this.sessionidFinalUsers.remove(sessionId); } - public Collection getAccumulatedRecordings(String sessionId) { - return this.sessionidAccumulatedRecordings.get(sessionId); + public void accumulateNewRecording(CDREventRecordingStatusChanged event) { + this.sessionidAccumulatedRecordings.get(event.getSessionId()).add(event); } - public Collection removeAccumulatedRecordings(String sessionId) { + public Collection removeAccumulatedRecordings(String sessionId) { return this.sessionidAccumulatedRecordings.remove(sessionId); } diff --git a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java index b0b22eb6..b454dade 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java +++ b/openvidu-server/src/main/java/io/openvidu/server/recording/service/RecordingManager.java @@ -221,7 +221,8 @@ public class RecordingManager { log.info("Recording module required: Downloading openvidu/openvidu-recording:" + openviduConfig.getOpenViduRecordingVersion() + " Docker image (350MB aprox)"); - if (dockMng.dockerImageExistsLocally(openviduConfig.getOpenviduRecordingImageRepo() + ":" + openviduConfig.getOpenViduRecordingVersion())) { + if (dockMng.dockerImageExistsLocally( + openviduConfig.getOpenviduRecordingImageRepo() + ":" + openviduConfig.getOpenViduRecordingVersion())) { log.info("Docker image already exists locally"); } else { Thread t = new Thread(() -> { @@ -239,7 +240,8 @@ public class RecordingManager { }); t.start(); try { - dockMng.downloadDockerImage(openviduConfig.getOpenviduRecordingImageRepo() + ":" + openviduConfig.getOpenViduRecordingVersion(), 600); + dockMng.downloadDockerImage(openviduConfig.getOpenviduRecordingImageRepo() + ":" + + openviduConfig.getOpenViduRecordingVersion(), 600); } catch (Exception e) { log.error("Error downloading docker image {}:{}", openviduConfig.getOpenviduRecordingImageRepo(), openviduConfig.getOpenViduRecordingVersion()); @@ -302,8 +304,6 @@ public class RecordingManager { this.cdr.recordRecordingStatusChanged(recording, null, recording.getCreatedAt(), Status.started); - // TODO: remove deprecated "recordingStarted" event - this.cdr.recordRecordingStarted(recording); if (!(OutputMode.COMPOSED.equals(properties.outputMode()) && properties.hasVideo())) { // Directly send recording started notification for all cases except for @@ -365,8 +365,6 @@ public class RecordingManager { final long timestamp = System.currentTimeMillis(); this.cdr.recordRecordingStatusChanged(recording, reason, timestamp, Status.stopped); - // TODO: remove deprecated "recordingStopped" event - this.cdr.recordRecordingStopped(recording, reason, timestamp); switch (recording.getOutputMode()) { case COMPOSED: diff --git a/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java b/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java index 4609ec45..464f8112 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java +++ b/openvidu-server/src/main/java/io/openvidu/server/summary/SessionSummary.java @@ -24,7 +24,7 @@ import java.util.Map; import com.google.gson.JsonArray; import com.google.gson.JsonObject; -import io.openvidu.server.cdr.CDREventRecording; +import io.openvidu.server.cdr.CDREventRecordingStatusChanged; import io.openvidu.server.cdr.CDREventSession; import io.openvidu.server.core.FinalUser; @@ -32,10 +32,10 @@ public class SessionSummary { private CDREventSession eventSessionEnd; private Map users; - private Collection recordings; + private Collection recordings; public SessionSummary(CDREventSession event, Map users, - Collection recordings) { + Collection recordings) { this.eventSessionEnd = event; this.users = users; this.recordings = recordings == null ? new LinkedList<>() : recordings;