From c92bfbb591b60db1d198d1f214219ffdc618bcba Mon Sep 17 00:00:00 2001 From: Richard Alam <ritzalam@gmail.com> Date: Tue, 4 Jun 2019 10:56:40 -0700 Subject: [PATCH] - deploy recording scripts in proper location - log upload captions params --- .../org/bigbluebutton/api/MeetingService.java | 15 ++++ bigbluebutton-web/build.gradle | 3 + .../controllers/RecordingController.groovy | 28 +++++--- record-and-playback/deploy.sh | 69 +++++++++++++++---- 4 files changed, 94 insertions(+), 21 deletions(-) diff --git a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java index 6ed1a8de06..4cfa808e38 100755 --- a/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java +++ b/bbb-common-web/src/main/java/org/bigbluebutton/api/MeetingService.java @@ -410,6 +410,21 @@ public class MeetingService implements MessageListener { public String putRecordingTextTrack(String recordId, String kind, String lang, File file, String label, String origFilename, String trackId, String contentType, String tempFilename) { + Map<String, Object> logData = new HashMap<>(); + logData.put("recordId", recordId); + logData.put("kind", kind); + logData.put("lang", lang); + logData.put("label", label); + logData.put("origFilename", origFilename); + logData.put("contentType", contentType); + logData.put("tempFilename", tempFilename); + logData.put("logCode", "recording_captions_uploaded"); + logData.put("description", "Captions for recording uploaded."); + + Gson gson = new Gson(); + String logStr = gson.toJson(logData); + log.info(" --analytics-- data={}", logStr); + UploadedTrack track = new UploadedTrack(recordId, kind, lang, label, origFilename, file, trackId, getCaptionTrackInboxDir(), contentType, tempFilename); return recordingService.putRecordingTextTrack(track); diff --git a/bigbluebutton-web/build.gradle b/bigbluebutton-web/build.gradle index 03b25c8d1b..5dfb4f6434 100755 --- a/bigbluebutton-web/build.gradle +++ b/bigbluebutton-web/build.gradle @@ -84,6 +84,9 @@ dependencies { compile "org.libreoffice:ridl:5.4.2" compile "org.libreoffice:juh:5.4.2" compile "org.libreoffice:jurt:5.4.2" + // https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload + compile group: 'commons-fileupload', name: 'commons-fileupload', version: '1.4' + //--- BigBlueButton Dependencies End console "org.grails:grails-console" profile "org.grails.profiles:web" diff --git a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy index 546b1de23a..51ccee962c 100755 --- a/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy +++ b/bigbluebutton-web/grails-app/controllers/org/bigbluebutton/web/controllers/RecordingController.groovy @@ -9,7 +9,7 @@ import org.bigbluebutton.api.ApiErrors import org.bigbluebutton.api.ApiParams import org.apache.commons.lang3.StringUtils import org.json.JSONArray - +import org.springframework.web.multipart.commons.CommonsMultipartFile class RecordingController { private static final String CONTROLLER_NAME = 'RecordingController' @@ -108,6 +108,8 @@ class RecordingController { } String recordId = StringUtils.strip(params.recordID) + log.debug("Captions for recordID: " + recordId) + if (!paramsProcessorUtil.isChecksumSame(API_CALL, params.checksum, request.getQueryString())) { invalid("checksumError", "You did not pass the checksum security check") @@ -127,22 +129,28 @@ class RecordingController { } String captionsKind = StringUtils.strip(params.kind) + log.debug("Captions kind: " + captionsKind) + def isAllowedKind = captionsKind in ['subtitles', 'captions'] if (!isAllowedKind) { respondWithError("invalidKind", "Invalid kind parameter, expected='subtitles|captions' actual=" + captionsKind) return } - - Locale locale; + + Locale locale if (StringUtils.isEmpty(params.lang)) { respondWithError("paramError", "Missing param lang.") return } String paramsLang = StringUtils.strip(params.lang) + log.debug("Captions lang: " + paramsLang) + + Locale paramLocale = Locale.forLanguageTag(paramsLang) + log.debug("Captions locale: " + paramLocale.toString()) Collection<Locale> locales = new ArrayList<>() - locales.add(Locale.forLanguageTag(paramsLang)) + locales.add(paramLocale) try { List<Locale.LanguageRange> languageRanges = Locale.LanguageRange.parse(paramsLang) locale = Locale.lookup(languageRanges, locales) @@ -155,10 +163,8 @@ class RecordingController { return } - String contentType = request.getContentType() - String captionsLang = locale.toString() - String captionsLabel = captionsLang + String captionsLabel = paramLocale.getDisplayLanguage() if (!StringUtils.isEmpty(params.label)) { captionsLabel = StringUtils.strip(params.label) @@ -166,6 +172,12 @@ class RecordingController { def uploadedCaptionsFile = request.getFile('file') if (uploadedCaptionsFile && !uploadedCaptionsFile.empty) { + CommonsMultipartFile contentType = uploadedCaptionsFile.contentType + def fileContentType = null + if (contentType != null) { + fileContentType = contentType.getContentType() + } + log.debug("Captions content type: " + fileContentType) def origFilename = uploadedCaptionsFile.getOriginalFilename() def trackId = recordId + "-" + System.currentTimeMillis() def tempFilename = trackId + "-track.txt" @@ -175,7 +187,7 @@ class RecordingController { uploadedCaptionsFile.transferTo(captionsFile) String result = meetingService.putRecordingTextTrack(recordId, captionsKind, - captionsLang, captionsFile, captionsLabel, origFilename, trackId, contentType, tempFilename) + captionsLang, captionsFile, captionsLabel, origFilename, trackId, fileContentType, tempFilename) response.addHeader("Cache-Control", "no-cache") withFormat { diff --git a/record-and-playback/deploy.sh b/record-and-playback/deploy.sh index ba7a0e00f8..a29d8c9d1a 100755 --- a/record-and-playback/deploy.sh +++ b/record-and-playback/deploy.sh @@ -40,22 +40,65 @@ function deploy_format() { deploy_format "presentation" -sudo mkdir -p /var/bigbluebutton/captions/ -sudo mkdir -p /var/bigbluebutton/events/ -sudo mkdir -p /var/bigbluebutton/playback/ -sudo mkdir -p /var/bigbluebutton/recording/raw/ -sudo mkdir -p /var/bigbluebutton/recording/process/ -sudo mkdir -p /var/bigbluebutton/recording/publish/ -sudo mkdir -p /var/bigbluebutton/recording/status/ended/ -sudo mkdir -p /var/bigbluebutton/recording/status/recorded/ -sudo mkdir -p /var/bigbluebutton/recording/status/archived/ -sudo mkdir -p /var/bigbluebutton/recording/status/processed/ -sudo mkdir -p /var/bigbluebutton/recording/status/sanity/ +CAPTIONS_DIR=/var/bigbluebutton/captions/ +if [ ! -d "$CAPTIONS_DIR" ]; then + sudo mkdir -p $CAPTIONS_DIR +fi + +EVENTS_DIR=/var/bigbluebutton/events/ +if [ ! -d "$EVENTS_DIR" ]; then + sudo mkdir -p $EVENTS_DIR +fi + +PLAYBACK_DIR=/var/bigbluebutton/playback/ +if [ ! -d "$PLAYBACK_DIR" ]; then + sudo mkdir -p $PLAYBACK_DIR +fi + +REC_RAW_DIR=/var/bigbluebutton/recording/raw/ +if [ ! -d "$REC_RAW_DIR" ]; then + sudo mkdir -p $REC_RAW_DIR +fi + +REC_PROC_DIR=/var/bigbluebutton/recording/process/ +if [ ! -d "$REC_PROC_DIR" ]; then + sudo mkdir -p $REC_PROC_DIR +fi + +REC_PUB_DIR=/var/bigbluebutton/recording/publish/ +if [ ! -d "$REC_PUB_DIR" ]; then + sudo mkdir -p $REC_PUB_DIR +fi + +REC_STATUS_ENDED_DIR=/var/bigbluebutton/recording/status/ended/ +if [ ! -d "$REC_STATUS_ENDED_DIR" ]; then + sudo mkdir -p $REC_STATUS_ENDED_DIR +fi + +REC_STATUS_RECORDED_DIR=/var/bigbluebutton/recording/status/recorded/ +if [ ! -d "$REC_STATUS_RECORDED_DIR" ]; then + sudo mkdir -p $REC_STATUS_RECORDED_DIR +fi + +REC_STATUS_ARCHIVED_DIR=/var/bigbluebutton/recording/status/archived/ +if [ ! -d "$REC_STATUS_ARCHIVED_DIR" ]; then + sudo mkdir -p $REC_STATUS_ARCHIVED_DIR +fi + +REC_STATUS_PROCESSED_DIR=/var/bigbluebutton/recording/status/processed/ +if [ ! -d "$REC_STATUS_PROCESSED_DIR" ]; then + sudo mkdir -p $REC_STATUS_PROCESSED_DIR +fi + +REC_STATUS_SANITY_DIR=/var/bigbluebutton/recording/status/sanity/ +if [ ! -d "$REC_STATUS_SANITY_DIR" ]; then + sudo mkdir -p $REC_STATUS_SANITY_DIR +fi sudo mv /usr/local/bigbluebutton/core/scripts/*.nginx /etc/bigbluebutton/nginx/ sudo service nginx reload sudo chown -R bigbluebutton:bigbluebutton /var/bigbluebutton/ /var/log/bigbluebutton/ sudo chown -R red5:red5 /var/bigbluebutton/screenshare/ -cd /usr/local/bigbluebutton/core/ -sudo bundle install \ No newline at end of file +#cd /usr/local/bigbluebutton/core/ +#sudo bundle install \ No newline at end of file -- GitLab