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 8476e8a9..d9a80e30 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 @@ -46,5 +46,7 @@ public interface Session { int getActivePublishers(); JSONObject toJSON(); + + JSONObject withStatsToJSON(); } 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 831b299e..dd8c9cf0 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 @@ -348,7 +348,7 @@ public class KurentoSession implements Session { kurentoSessionHandler.updateFilter(this.sessionId, participant, filterId, newState); } } - + @Override @SuppressWarnings("unchecked") public JSONObject toJSON() { @@ -368,4 +368,23 @@ public class KurentoSession implements Session { return json; } + @Override + @SuppressWarnings("unchecked") + public JSONObject withStatsToJSON() { + JSONObject json = new JSONObject(); + json.put("sessionId", this.sessionId); + json.put("mediaMode", this.sessionProperties.mediaMode().name()); + json.put("recordingMode", this.sessionProperties.recordingMode().name()); + json.put("defaultRecordingLayout", this.sessionProperties.defaultRecordingLayout().name()); + if (this.sessionProperties.defaultCustomLayout() != null && !this.sessionProperties.defaultCustomLayout().isEmpty()) { + json.put("defaultCustomLayout", this.sessionProperties.defaultCustomLayout()); + } + JSONArray participants = new JSONArray(); + this.participants.values().forEach(p -> { + participants.add(p.withStatsToJSON()); + }); + json.put("connections", participants); + return json; + } + } diff --git a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java index c3ae8200..62878085 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java +++ b/openvidu-server/src/main/java/io/openvidu/server/kurento/endpoint/MediaEndpoint.java @@ -502,10 +502,18 @@ public abstract class MediaEndpoint { } }); } - + @SuppressWarnings("unchecked") public JSONObject toJSON() { JSONObject json = new JSONObject(); + json.put("mediaOptions", this.mediaOptions); + return json; + } + + @SuppressWarnings("unchecked") + public JSONObject withStatsToJSON() { + JSONObject json = new JSONObject(); + json.put("mediaOptions", this.mediaOptions); json.put("webrtcTagName", this.getEndpoint().getTag("name")); json.put("localCandidate", this.selectedLocalIceCandidate); json.put("remoteCandidate", this.selectedRemoteIceCandidate); diff --git a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java index 37f4319a..ab1e288b 100644 --- a/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java +++ b/openvidu-server/src/main/java/io/openvidu/server/rest/SessionRestController.java @@ -32,6 +32,7 @@ import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import io.openvidu.client.OpenViduException; @@ -135,10 +136,12 @@ public class SessionRestController { } @RequestMapping(value = "/sessions/{sessionId}", method = RequestMethod.GET) - public ResponseEntity getSession(@PathVariable("sessionId") String sessionId) { + public ResponseEntity getSession(@PathVariable("sessionId") String sessionId, + @RequestParam("webRtcStats") boolean webRtcStats) { Session session = this.sessionManager.getSession(sessionId); if (session != null) { - return new ResponseEntity<>(session.toJSON(), HttpStatus.OK); + JSONObject response = (webRtcStats == true) ? session.withStatsToJSON() : session.toJSON(); + return new ResponseEntity<>(response, HttpStatus.OK); } else { return new ResponseEntity<>(HttpStatus.NOT_FOUND); } @@ -146,12 +149,13 @@ public class SessionRestController { @SuppressWarnings("unchecked") @RequestMapping(value = "/sessions", method = RequestMethod.GET) - public ResponseEntity listSessions() { + public ResponseEntity listSessions(@RequestParam("webRtcStats") boolean webRtcStats) { Collection sessions = this.sessionManager.getSessionObjects(); JSONObject json = new JSONObject(); JSONArray jsonArray = new JSONArray(); sessions.forEach(s -> { - jsonArray.add(s.toJSON()); + JSONObject sessionJson = (webRtcStats == true) ? s.withStatsToJSON() : s.toJSON(); + jsonArray.add(sessionJson); }); json.put("count", sessions.size()); json.put("items", jsonArray);