2012-03-05 08:18:35 +08:00
|
|
|
#!/bin/bash
|
2011-08-26 06:47:03 +08:00
|
|
|
#
|
|
|
|
# Copyright (c) 2008-2011 by BigBlueButton Inc.
|
|
|
|
#
|
|
|
|
# This file is part of BigBlueButton - http://www.bigbluebutton.org
|
|
|
|
#
|
|
|
|
# BigBlueButton is free software; you can redistribute it and/or modify it under the
|
|
|
|
# terms of the GNU Lesser General Public License as published by the Free Software
|
|
|
|
# Foundation; either version 2 of the License, or (at your option) any later
|
|
|
|
# version.
|
|
|
|
#
|
|
|
|
# BigBlueButton is distributed in the hope that it will be useful, but WITHOUT ANY
|
|
|
|
# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A
|
|
|
|
# PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
|
|
|
|
#
|
|
|
|
# You should have received a copy of the GNU Lesser General Public License along
|
|
|
|
# with BigBlueButton; if not, see <http://www.gnu.org/licenses/>.
|
|
|
|
#
|
|
|
|
# Author(s):
|
|
|
|
# Fred Dixon <ffdixon@bigbluebutton.org>
|
|
|
|
#
|
|
|
|
# Changelog:
|
|
|
|
# 2011-08-18 FFD Inital Version
|
2011-11-20 22:33:55 +08:00
|
|
|
# 2011-11-20 FFD Added more checks for processing of recording
|
2012-01-06 06:07:34 +08:00
|
|
|
# 2012-01-04 GUG Add option to check for errors
|
2012-02-28 00:40:35 +08:00
|
|
|
# 2012-02-27 GUG Add option to delete one meeting and recording
|
2012-08-14 05:25:57 +08:00
|
|
|
# 2012-08-13 GUG Republish recording
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2012-08-22 08:43:31 +08:00
|
|
|
#set -e
|
2011-08-26 06:47:03 +08:00
|
|
|
#set -x
|
|
|
|
|
|
|
|
BASE=/var/bigbluebutton/recording
|
|
|
|
STATUS=$BASE/status
|
2012-02-28 23:06:29 +08:00
|
|
|
source /etc/bigbluebutton/bigbluebutton-release
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2012-09-13 02:52:36 +08:00
|
|
|
SERVLET_DIR=/var/lib/tomcat6/webapps
|
|
|
|
BBB_WEB=$(cat ${SERVLET_DIR}/bigbluebutton/WEB-INF/classes/bigbluebutton.properties | sed -n '/^bigbluebutton.web.serverURL/{s/.*\///;p}')
|
|
|
|
|
2011-11-20 22:33:55 +08:00
|
|
|
RECORDING_DIR=$(cat /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml | sed -n '/\(recording_dir\)/{s/.*recording_dir:[ ]*//;s/;//;p}')
|
|
|
|
PUBLISHED_DIR=$(cat /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml | sed -n '/\(published_dir\)/{s/.*published_dir:[ ]*//;s/;//;p}')
|
|
|
|
RAW_AUDIO_SRC=$(cat /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml | sed -n '/\(raw_audio_src\)/{s/.*raw_audio_src:[ ]*//;s/;//;p}')
|
|
|
|
RAW_VIDEO_SRC=$(cat /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml | sed -n '/\(raw_video_src\)/{s/.*raw_video_src:[ ]*//;s/;//;p}')
|
|
|
|
RAW_DESKSHARE_SRC=$(cat /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml | sed -n '/\(raw_deskshare_src\)/{s/.*raw_deskshare_src:[ ]*//;s/;//;p}')
|
|
|
|
RAW_PRESENTATION_SRC=$(cat /usr/local/bigbluebutton/core/scripts/bigbluebutton.yml | sed -n '/\(raw_presentation_src\)/{s/.*raw_presentation_src:[ ]*//;s/;//;p}')
|
|
|
|
|
2011-08-31 04:12:37 +08:00
|
|
|
TYPES=$(cd /usr/local/bigbluebutton/core/scripts/process; ls *.rb | sed s/.rb//g)
|
|
|
|
|
|
|
|
mark_for_rebuild() {
|
|
|
|
MEETING_ID=$1
|
2012-03-02 03:51:09 +08:00
|
|
|
#set -x
|
2011-08-31 04:12:37 +08:00
|
|
|
for type in $TYPES; do
|
|
|
|
if [ -d $BASE/process/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf $BASE/process/$type/$MEETING_ID
|
2011-09-10 21:35:32 +08:00
|
|
|
# else
|
|
|
|
# echo "Warn: Didn't find $BASE/process/$type/$MEETING_ID"
|
|
|
|
# exit 1
|
2011-08-31 04:12:37 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -f $STATUS/processed/$MEETING_ID-$type.done ]; then
|
|
|
|
rm $STATUS/processed/$MEETING_ID-$type.done
|
2011-09-10 21:35:32 +08:00
|
|
|
# else
|
|
|
|
# echo "Warn: Didn't find $STATUS/processed/$MEETING_ID-$type.done"
|
|
|
|
# exit 1
|
2011-08-31 04:12:37 +08:00
|
|
|
fi
|
2011-09-01 02:55:20 +08:00
|
|
|
|
2011-09-01 05:45:38 +08:00
|
|
|
if [ -d $BASE/publish/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf $BASE/publish/$type/$MEETING_ID
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -d /var/bigbluebutton/processed/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf /var/bigbluebutton/published/$type/$MEETING_ID
|
|
|
|
fi
|
|
|
|
|
2011-09-01 02:55:20 +08:00
|
|
|
if [ -d /var/bigbluebutton/published/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf /var/bigbluebutton/published/$type/$MEETING_ID
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -d /var/bigbluebutton/unpublished/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf /var/bigbluebutton/unpublished/$type/$MEETING_ID
|
|
|
|
fi
|
2011-08-31 04:12:37 +08:00
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2012-08-14 05:25:57 +08:00
|
|
|
mark_for_republish() {
|
|
|
|
MEETING_ID=$1
|
|
|
|
#set -x
|
|
|
|
for type in $TYPES; do
|
|
|
|
if [ -d $BASE/publish/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf $BASE/publish/$type/$MEETING_ID
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -d /var/bigbluebutton/published/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf /var/bigbluebutton/published/$type/$MEETING_ID
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -d /var/bigbluebutton/unpublished/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf /var/bigbluebutton/unpublished/$type/$MEETING_ID
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
}
|
|
|
|
|
2012-02-28 23:06:29 +08:00
|
|
|
BIGBLUEBUTTON_RELEASE=0.8-beta-4
|
2011-08-26 06:47:03 +08:00
|
|
|
|
|
|
|
need_root() {
|
|
|
|
if [ $EUID != 0 ]; then
|
|
|
|
echo "Need to be root to run this option"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2012-02-27 04:00:37 +08:00
|
|
|
print_header() {
|
|
|
|
if [ ! $HEADER ]; then
|
|
|
|
echo
|
|
|
|
echo "** Potential problems described below **"
|
|
|
|
HEADER=1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2011-08-26 06:47:03 +08:00
|
|
|
usage() {
|
2012-02-28 23:06:29 +08:00
|
|
|
echo "BigBlueButton Recording Diagnostic Utility (BigBlueButton Version $BIGBLUEBUTTON_RELEASE)"
|
2011-08-26 06:47:03 +08:00
|
|
|
echo
|
|
|
|
echo " bbb-record [options]"
|
|
|
|
echo
|
2011-09-10 21:35:32 +08:00
|
|
|
echo "Reporting:"
|
|
|
|
echo " --list List all recordings"
|
|
|
|
echo
|
2011-08-26 06:47:03 +08:00
|
|
|
echo "Monitoring:"
|
2011-09-10 21:35:32 +08:00
|
|
|
echo " --watch Watch processing of recordings"
|
2012-08-22 09:05:22 +08:00
|
|
|
echo
|
|
|
|
echo "Administration:"
|
2011-08-31 04:12:37 +08:00
|
|
|
echo " --rebuild [meetingID] rebuild the output for meetingID"
|
2012-08-22 09:05:22 +08:00
|
|
|
echo " --republish [meetingID] republish the recording for meetingID"
|
2012-03-02 03:51:09 +08:00
|
|
|
echo " --delete [meetingID] delete one meeting and recording"
|
2011-09-01 02:55:20 +08:00
|
|
|
echo " --deletall delete all meetings and recordings"
|
2012-02-27 04:00:37 +08:00
|
|
|
echo " --debug check for recording errors"
|
|
|
|
echo " --check check for configuration errors"
|
2011-08-26 06:47:03 +08:00
|
|
|
echo
|
|
|
|
}
|
|
|
|
|
|
|
|
if [ $# -eq 0 ]; then
|
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# Parse the parameters
|
|
|
|
while [ $# -gt 0 ]; do
|
|
|
|
if [ "$1" = "-watch" -o "$1" = "--watch" ]; then
|
|
|
|
WATCH=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
2011-09-10 21:35:32 +08:00
|
|
|
if [ "$1" = "-list" -o "$1" = "--list" ]; then
|
|
|
|
LIST=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
2011-09-12 05:11:50 +08:00
|
|
|
if [ "$1" = "--list20" ]; then
|
2011-09-10 21:35:32 +08:00
|
|
|
LIST=1
|
|
|
|
HEAD=20
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
2011-08-26 06:47:03 +08:00
|
|
|
if [ "$1" = "-rebuild" -o "$1" = "--rebuild" ]; then
|
|
|
|
need_root
|
2011-08-31 04:12:37 +08:00
|
|
|
if [ ! -z "${2}" ]; then
|
|
|
|
MEETING_ID="${2}"
|
|
|
|
shift
|
|
|
|
fi
|
2011-08-26 06:47:03 +08:00
|
|
|
REBUILD=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
2012-08-14 05:25:57 +08:00
|
|
|
|
|
|
|
if [ "$1" = "-republish" -o "$1" = "--republish" ]; then
|
|
|
|
need_root
|
|
|
|
if [ ! -z "${2}" ]; then
|
|
|
|
MEETING_ID="${2}"
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
REPUBLISH=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
2012-02-28 00:40:35 +08:00
|
|
|
|
2012-08-14 05:25:57 +08:00
|
|
|
if [ "$1" = "-delete" -o "$1" = "--delete" ]; then
|
2012-02-28 00:40:35 +08:00
|
|
|
need_root
|
|
|
|
if [ ! -z "${2}" ]; then
|
|
|
|
MEETING_ID="${2}"
|
|
|
|
shift
|
|
|
|
fi
|
|
|
|
DELETE=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2011-09-01 02:55:20 +08:00
|
|
|
if [ "$1" = "-deleteall" -o "$1" = "--deleteall" ]; then
|
2011-08-26 06:47:03 +08:00
|
|
|
need_root
|
2011-09-01 02:55:20 +08:00
|
|
|
DELETEALL=1
|
2011-08-26 06:47:03 +08:00
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
2012-01-06 06:07:34 +08:00
|
|
|
if [ "$1" = "-check" -o "$1" = "--check" ]; then
|
|
|
|
need_root
|
|
|
|
CHECK=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
2011-11-22 01:20:31 +08:00
|
|
|
|
2012-02-27 04:00:37 +08:00
|
|
|
if [ "$1" = "-debug" -o "$1" = "--debug" ]; then
|
|
|
|
need_root
|
|
|
|
DEBUG=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2012-08-22 09:05:22 +08:00
|
|
|
if [ "$1" = "-clean" -o "$1" = "--clean" ]; then
|
|
|
|
need_root
|
|
|
|
CLEAN=1
|
|
|
|
shift
|
|
|
|
continue
|
|
|
|
fi
|
|
|
|
|
2011-08-26 06:47:03 +08:00
|
|
|
usage
|
|
|
|
exit 1
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ $REBUILD ]; then
|
2011-08-31 04:12:37 +08:00
|
|
|
if [ -z "$MEETING_ID" ]; then
|
2011-08-26 06:47:03 +08:00
|
|
|
#
|
2011-08-31 04:12:37 +08:00
|
|
|
# Regenerate all meetings
|
|
|
|
#
|
|
|
|
for recording in $(dir $BASE/raw); do
|
|
|
|
echo "Marking for rebuild: $MEETING_ID"
|
|
|
|
mark_for_rebuild $MEETING_ID
|
|
|
|
done
|
|
|
|
else
|
2011-11-20 22:33:55 +08:00
|
|
|
echo "Marking for rebuild: $MEETING_ID"
|
|
|
|
mark_for_rebuild $MEETING_ID
|
2012-08-14 05:25:57 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ $REPUBLISH ]; then
|
|
|
|
if [ -z "$MEETING_ID" ]; then
|
|
|
|
#
|
|
|
|
# Republish all meetings
|
|
|
|
#
|
|
|
|
for recording in $(dir $BASE/raw); do
|
|
|
|
echo "Marking for republish: $recording"
|
|
|
|
mark_for_republish $recording
|
|
|
|
done
|
|
|
|
else
|
|
|
|
echo "Marking for republish: $MEETING_ID"
|
|
|
|
mark_for_republish $MEETING_ID
|
2011-08-31 04:12:37 +08:00
|
|
|
fi
|
|
|
|
fi
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2012-08-22 09:05:22 +08:00
|
|
|
if [ $CLEAN ]; then
|
|
|
|
sudo /etc/init.d/bbb-record-core stop
|
|
|
|
for type in $TYPES; do
|
|
|
|
echo " clearning logs in /var/log/bigbluebutton/$type"
|
|
|
|
find /var/log/bigbluebutton/$type -name "*.log" -exec sudo rm '{}' \;
|
|
|
|
done
|
|
|
|
sudo /etc/init.d/bbb-record-core start
|
|
|
|
fi
|
|
|
|
|
2012-02-28 00:40:35 +08:00
|
|
|
if [ $DELETE ]; then
|
|
|
|
if [ ! -z "$MEETING_ID" ]; then
|
|
|
|
for type in $TYPES; do
|
|
|
|
rm -rf /var/bigbluebutton/published/$type/$MEETING_ID*
|
|
|
|
rm -rf /var/bigbluebutton/unpublished/$type/$MEETING_ID*
|
|
|
|
|
|
|
|
rm -rf /var/bigbluebutton/recording/process/$type/$MEETING_ID*
|
|
|
|
rm -rf /var/bigbluebutton/recording/publish/$type/$MEETING_ID*
|
|
|
|
|
|
|
|
rm -rf /var/bigbluebutton/recording/raw/$MEETING_ID*
|
|
|
|
|
|
|
|
rm -rf /var/log/bigbluebutton/$type/*$MEETING_ID*
|
|
|
|
done
|
|
|
|
|
|
|
|
rm -f /var/bigbluebutton/recording/status/recorded/$MEETING_ID*
|
|
|
|
rm -f /var/bigbluebutton/recording/status/archived/$MEETING_ID*
|
|
|
|
rm -f /var/bigbluebutton/recording/status/processed/$MEETING_ID*
|
|
|
|
|
|
|
|
rm -rf /usr/share/red5/webapps/video/streams/$MEETING_ID
|
|
|
|
rm -f /var/bigbluebutton/deskshare/$MEETING_ID*.flv
|
|
|
|
rm -f /var/freeswitch/meetings/$MEETING_ID*.wav
|
2012-03-14 23:08:25 +08:00
|
|
|
rm -rf /var/bigbluebutton/$MEETING_ID
|
2012-02-28 00:40:35 +08:00
|
|
|
|
|
|
|
echo "deleting: $MEETING_ID"
|
|
|
|
else
|
|
|
|
echo "Give a meeting id or use --deleteall"
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
2011-09-01 02:55:20 +08:00
|
|
|
if [ $DELETEALL ]; then
|
2011-08-31 04:12:37 +08:00
|
|
|
for type in $TYPES; do
|
|
|
|
rm -rf /var/bigbluebutton/published/$type/*
|
|
|
|
rm -rf /var/bigbluebutton/unpublished/$type/*
|
|
|
|
|
|
|
|
rm -rf /var/bigbluebutton/recording/process/$type/*
|
|
|
|
rm -rf /var/bigbluebutton/recording/publish/$type/*
|
|
|
|
|
|
|
|
rm -rf /var/bigbluebutton/recording/raw/*
|
2011-09-01 02:55:20 +08:00
|
|
|
|
|
|
|
rm -rf /var/log/bigbluebutton/$type/*
|
2011-08-31 04:12:37 +08:00
|
|
|
done
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2011-09-01 02:55:20 +08:00
|
|
|
rm -f /var/bigbluebutton/recording/status/recorded/*
|
|
|
|
rm -f /var/bigbluebutton/recording/status/archived/*
|
|
|
|
rm -f /var/bigbluebutton/recording/status/processed/*
|
2012-09-12 06:41:32 +08:00
|
|
|
rm -f /var/bigbluebutton/recording/status/sanity/*
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2011-11-20 22:33:55 +08:00
|
|
|
rm -f /usr/share/red5/webapps/video/streams/*.flv
|
|
|
|
rm -f /var/bigbluebutton/deskshare/*.flv
|
2011-11-22 01:20:31 +08:00
|
|
|
rm -f /var/freeswitch/meetings/*.wav
|
2011-11-20 22:33:55 +08:00
|
|
|
|
2011-08-26 06:47:03 +08:00
|
|
|
for meeting in $(ls /var/bigbluebutton | grep "[0-9]\{13\}$"); do
|
|
|
|
echo "deleting: $meeting"
|
2011-09-01 02:55:20 +08:00
|
|
|
rm -rf /var/bigbluebutton/$meeting
|
2011-08-26 06:47:03 +08:00
|
|
|
done
|
|
|
|
fi
|
|
|
|
|
2011-09-10 21:35:32 +08:00
|
|
|
if [ $LIST ]; then
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2012-02-20 01:34:21 +08:00
|
|
|
# Does the meeting contain:
|
|
|
|
# A -- Audio
|
|
|
|
# P -- Presentation
|
|
|
|
# V -- Video
|
|
|
|
# D -- Desktop
|
|
|
|
#
|
|
|
|
# Does the archive contain
|
|
|
|
# A -- Audio
|
|
|
|
# P -- Presentation
|
|
|
|
# V -- Video
|
|
|
|
# D -- Desktop
|
|
|
|
# E -- Events
|
|
|
|
#
|
|
|
|
# Is there a done flag (trigger rap-worker.rb to process) for
|
|
|
|
# R -- Recording
|
|
|
|
# A -- Archiving
|
|
|
|
#
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2012-08-31 06:00:26 +08:00
|
|
|
echo "MeetingID Time APVD APVDE RAS Slides Processed Published Description"
|
|
|
|
echo "------------------------------------------------------ ---------------------------- ---- ----- --- ------ -------------------- -------------------- -----------------------------"
|
2011-09-10 21:35:32 +08:00
|
|
|
|
|
|
|
if [ -z $HEAD ]; then
|
|
|
|
# If we're not called with --list20, show all recordings
|
|
|
|
HEAD=99999
|
|
|
|
fi
|
2011-08-31 04:12:37 +08:00
|
|
|
|
2011-11-20 22:33:55 +08:00
|
|
|
for meeting in $(ls -t /var/bigbluebutton | grep "[0-9]\{13\}$" | head -n $HEAD); do
|
2011-08-26 06:47:03 +08:00
|
|
|
echo -n "$meeting"
|
2011-08-31 04:12:37 +08:00
|
|
|
timestamp=$(echo $meeting | sed s/.*-//g)
|
|
|
|
epoc=$(($timestamp/1000))
|
|
|
|
echo -n " "
|
2011-09-10 21:35:32 +08:00
|
|
|
echo -n $(date --date "Jan 1, 1970 00:00:00 +0000 + $epoc seconds") | awk '{ printf("%-28s",$0) }'
|
2011-11-20 22:33:55 +08:00
|
|
|
echo -n " "
|
|
|
|
|
|
|
|
#
|
|
|
|
# Monitor the live recordings
|
|
|
|
#
|
|
|
|
|
|
|
|
#
|
|
|
|
# Check if there is any recorded audio
|
|
|
|
if ls -A $RAW_AUDIO_SRC/$meeting-*.wav &> /dev/null; then
|
|
|
|
echo -n "X"
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2011-11-20 22:33:55 +08:00
|
|
|
#
|
|
|
|
# Check if there area uploaded presentations
|
|
|
|
if [ -d $RAW_PRESENTATION_SRC/$meeting/$meeting ]; then
|
|
|
|
if [ "$(ls -A $RAW_PRESENTATION_SRC/$meeting/$meeting)" ]; then
|
|
|
|
echo -n "X"
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
2011-08-26 06:47:03 +08:00
|
|
|
|
|
|
|
|
2011-11-20 22:33:55 +08:00
|
|
|
#
|
|
|
|
# Check if there is any recorded videos
|
|
|
|
if [ -d $RAW_VIDEO_SRC/$meeting ]; then
|
|
|
|
if [ "$(ls -A $RAW_VIDEO_SRC/$meeting)" ]; then
|
|
|
|
echo -n "X"
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
2011-08-26 06:47:03 +08:00
|
|
|
|
|
|
|
#
|
2011-11-20 22:33:55 +08:00
|
|
|
# Check if there is any recorded desktop sharing
|
|
|
|
if ls -A $RAW_DESKSHARE_SRC/$meeting-*.flv &> /dev/null; then
|
|
|
|
echo -n "X"
|
2011-08-26 06:47:03 +08:00
|
|
|
else
|
2011-11-20 22:33:55 +08:00
|
|
|
echo -n " "
|
2011-08-26 06:47:03 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
2011-11-20 22:33:55 +08:00
|
|
|
# Monitor the archived files
|
|
|
|
#
|
|
|
|
RAW_DIR=$RAW_PRESENTATION_SRC/recording/raw/$meeting
|
|
|
|
echo -n " "
|
|
|
|
|
|
|
|
# Check if there area uploaded presentations
|
|
|
|
#echo "$RAW/audio"
|
|
|
|
DIRS="audio presentation video deskshare"
|
|
|
|
for dir in $DIRS; do
|
|
|
|
if [ -d $RAW_DIR/$dir ]; then
|
|
|
|
if [ "$(ls -A $RAW_DIR/$dir)" ]; then
|
|
|
|
echo -n "X"
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -f $RAW_DIR/events.xml ]; then
|
|
|
|
echo -n "X"
|
2011-08-26 06:47:03 +08:00
|
|
|
else
|
2011-11-20 22:33:55 +08:00
|
|
|
echo -n " "
|
2011-08-26 06:47:03 +08:00
|
|
|
fi
|
|
|
|
|
2011-11-20 22:33:55 +08:00
|
|
|
#
|
|
|
|
# Check the status files
|
|
|
|
#
|
|
|
|
echo -n " "
|
|
|
|
STATUS_DIR=$RAW_PRESENTATION_SRC/recording/status
|
2012-08-31 06:00:26 +08:00
|
|
|
DIRS="recorded archived sanity"
|
2011-11-20 22:33:55 +08:00
|
|
|
for dir in $DIRS; do
|
|
|
|
if [ -f $STATUS_DIR/$dir/$meeting.done ]; then
|
|
|
|
echo -n "X"
|
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
#
|
|
|
|
# Numbe rof slides
|
|
|
|
printf "%7s" $(find /var/bigbluebutton/$meeting/$meeting -name "*.swf" | wc -l)
|
|
|
|
|
|
|
|
|
|
|
|
echo -n " "
|
|
|
|
#echo $BASE/raw/$meeting
|
|
|
|
if [ -d $BASE/raw/$meeting ]; then
|
|
|
|
recording=$meeting
|
2011-08-26 06:47:03 +08:00
|
|
|
|
|
|
|
#
|
2011-11-20 22:33:55 +08:00
|
|
|
# Checka processed
|
2011-09-01 02:55:20 +08:00
|
|
|
processed=""
|
2011-08-31 04:12:37 +08:00
|
|
|
for type in $TYPES; do
|
|
|
|
if [ -f $STATUS/processed/$recording-$type.done ]; then
|
2011-09-01 02:55:20 +08:00
|
|
|
if [ ! -z "$processed" ]; then
|
|
|
|
processed="$processed,"
|
2011-08-31 04:12:37 +08:00
|
|
|
fi
|
2011-09-01 02:55:20 +08:00
|
|
|
processed="$processed$type"
|
2011-08-31 04:12:37 +08:00
|
|
|
fi
|
|
|
|
done
|
2011-09-01 02:55:20 +08:00
|
|
|
printf "%-21s" $processed
|
|
|
|
|
|
|
|
#
|
|
|
|
# Check archived
|
|
|
|
published=""
|
|
|
|
for type in $TYPES; do
|
|
|
|
if [ -f /var/bigbluebutton/published/$type/$recording/metadata.xml ]; then
|
|
|
|
if [ ! -z "$published" ]; then
|
|
|
|
published="$published,"
|
|
|
|
fi
|
|
|
|
published="$published$type"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
printf "%-17s" $published
|
|
|
|
|
2011-08-26 06:47:03 +08:00
|
|
|
|
|
|
|
if [ -f /var/bigbluebutton/recording/raw/$recording/events.xml ]; then
|
2011-08-31 04:12:37 +08:00
|
|
|
echo -n " "
|
2012-05-18 06:12:42 +08:00
|
|
|
echo -n $(head -n 5 /var/bigbluebutton/recording/raw/$recording/events.xml | grep description | sed s/.*description=\"//g | sed s/\".*//g) | sed -e 's/<[^>]*>//g' -e 's/</</g' -e 's/>/>/g' -e 's/&/\&/g' -e 's/ \{1,\}/ /g' | tr -d '\n'
|
2011-08-26 06:47:03 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
fi
|
|
|
|
echo
|
|
|
|
done
|
|
|
|
echo
|
|
|
|
echo "--"
|
|
|
|
ps fU tomcat6 -o "%c%a" | grep -v COMMAND | grep -v logging.properties
|
|
|
|
|
|
|
|
echo "--"
|
|
|
|
|
|
|
|
if tail -n 20 /var/log/bigbluebutton/bbb-web.log | grep -q "is recorded. Process it."; then
|
|
|
|
echo -n "Last meeting processed (bbb-web.log): "
|
|
|
|
tail -n 20 /var/log/bigbluebutton/bbb-web.log | grep "is recorded. Process it." | sed "s/.*\[//g" | sed "s/\].*//g"
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
fi
|
|
|
|
|
2011-09-10 21:35:32 +08:00
|
|
|
if [ $WATCH ]; then
|
|
|
|
watch -n 2 "bbb-record --list20"
|
|
|
|
fi
|
2012-01-06 06:07:34 +08:00
|
|
|
|
|
|
|
if [ $CHECK ]; then
|
2012-02-28 08:10:18 +08:00
|
|
|
if [ -f /var/bigbluebutton/recording/process/slides ]; then
|
|
|
|
if [ ! -w /var/bigbluebutton/recording/process/slides ]; then
|
2012-02-27 04:00:37 +08:00
|
|
|
print_header
|
|
|
|
echo "# Error: The output director for slides"
|
|
|
|
echo "#"
|
|
|
|
echo "# /var/bigbluebutton/recording/process/slides"
|
|
|
|
echo "#"
|
|
|
|
echo "# is not writeable."
|
|
|
|
echo
|
2012-02-28 08:10:18 +08:00
|
|
|
fi
|
2012-02-27 04:00:37 +08:00
|
|
|
fi
|
2012-09-13 02:52:36 +08:00
|
|
|
|
|
|
|
#
|
|
|
|
# Check that the playback of slides have the proper URL
|
|
|
|
#
|
|
|
|
#set -x
|
|
|
|
for type in $TYPES; do
|
|
|
|
for recording in $(find $BASE/publish/$type -name metadata.xml); do
|
|
|
|
url_playback=$(cat $recording | grep "<link>" | sed 's/[ ]*<link>http:\/\/\([^\"\/]*\)[^>]*>/\1/g')
|
|
|
|
if [ "$BBB_WEB" != "$url_playback" ]; then
|
|
|
|
echo
|
|
|
|
echo "# The hostname in <link> .. </link> ($url_playback)"
|
|
|
|
echo "# $recording"
|
|
|
|
echo "# do not match the hostname for bigbluebutton.web.serverURL ($BBB_WEB)"
|
|
|
|
echo "# /usr/share/red5/webapps/bigbluebutton/WEB-INF/bigbluebutton.properties"
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
|
|
|
|
2012-02-27 04:00:37 +08:00
|
|
|
fi
|
2012-01-06 06:07:34 +08:00
|
|
|
|
2012-02-27 04:00:37 +08:00
|
|
|
if [ $DEBUG ]; then
|
2012-01-06 06:07:34 +08:00
|
|
|
|
2012-02-20 01:34:21 +08:00
|
|
|
LOG_DIR=/var/log/bigbluebutton
|
|
|
|
|
2012-02-27 04:00:37 +08:00
|
|
|
if [ -f /var/log/bigbluebutton/bbb-rap-worker.log ]; then
|
|
|
|
grep -i error /var/log/bigbluebutton/bbb-rap-worker.*
|
|
|
|
fi
|
|
|
|
|
2012-01-06 06:07:34 +08:00
|
|
|
#
|
|
|
|
#Failures while archiving files
|
|
|
|
#
|
2012-02-20 01:34:21 +08:00
|
|
|
if [ -f $LOG_DIR/archive.log ]; then
|
|
|
|
grep "Failed to" "$LOG_DIR/archive.log" > /tmp/t
|
2012-01-06 06:07:34 +08:00
|
|
|
if [ -s /tmp/t ]; then
|
|
|
|
echo " -- ERRORS found while archiving files -- "
|
|
|
|
cat /tmp/t
|
|
|
|
echo
|
2012-01-07 07:31:24 +08:00
|
|
|
grep "on ASCII" /tmp/t > /tmp/u
|
2012-01-07 01:34:33 +08:00
|
|
|
if [ -s /tmp/u ]; then
|
|
|
|
echo " -- events.xml was not created. There is a problem with the character encoding "
|
|
|
|
echo
|
|
|
|
fi
|
2012-01-06 06:07:34 +08:00
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
#
|
2012-02-20 01:34:21 +08:00
|
|
|
# We're going to look through the output files for each of the processed types
|
2012-01-06 06:07:34 +08:00
|
|
|
#
|
2012-02-20 01:34:21 +08:00
|
|
|
STAGES="process publish"
|
|
|
|
for type in $TYPES; do
|
2012-08-22 08:13:50 +08:00
|
|
|
for stage in $STAGES; do
|
|
|
|
LOC=$LOG_DIR/$type/$stage
|
|
|
|
if ls -A $LOC-* &> /dev/null; then
|
|
|
|
rm -rf /tmp/t
|
2012-08-22 08:51:24 +08:00
|
|
|
grep -B 3 "ERROR -- : Error:" $LOC-* | egrep -w 'Error:' | grep -v "ffmpeg version" > /tmp/t
|
2012-08-22 08:13:50 +08:00
|
|
|
if [ -s /tmp/t ]; then
|
|
|
|
echo " -- ERRORS found while processing slides $LOC-* -- "
|
|
|
|
cat /tmp/t
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
done
|
2012-01-06 06:07:34 +08:00
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Additional checks for record and playback
|
|
|
|
#
|
|
|
|
rm -rf /tmp/t
|
|
|
|
if ls /var/log/bigbluebutton/slides-process-* > /dev/null 2>1; then
|
|
|
|
sudo grep -i Error /var/log/bigbluebutton/slides-process-* > /tmp/t
|
|
|
|
if [ -s /tmp/t ]; then
|
|
|
|
echo " -- Ingest and Processing errors found in /var/log/bigbluebutton/slides-process-*.log -- "
|
|
|
|
cat /tmp/t
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
rm -rf /tmp/t
|
|
|
|
if ls /var/log/bigbluebutton/slides-publish-* > /dev/null 2>1; then
|
|
|
|
sudo grep -i Error /var/log/bigbluebutton/slides-publish-* > /tmp/t
|
|
|
|
if [ -s /tmp/t ]; then
|
|
|
|
echo " -- Ingest and Processing errors found in /var/log/bigbluebutton/slides-publish-*.log -- "
|
|
|
|
cat /tmp/t
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
rm -rf /tmp/t
|
|
|
|
if ls /var/log/bigbluebutton/slides-process-* > /dev/null 2>1; then
|
|
|
|
for file in /var/log/bigbluebutton/slides-process-*; do
|
|
|
|
if [ ! -f $(echo $file | sed 's/process/publish/g') ]; then
|
|
|
|
echo " $file" >> /tmp/t
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -s /tmp/t ]; then
|
|
|
|
echo " -- Ingest and Processing: found process file but not publish -- "
|
|
|
|
cat /tmp/t
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
rm -rf /tmp/t
|
|
|
|
if ls /var/bigbluebutton/recording/status/recorded/*.done > /dev/null 2>1; then
|
|
|
|
for file in /var/bigbluebutton/recording/status/recorded/*.done; do
|
|
|
|
if [ ! -f $(echo $file | sed 's/recorded/archived/g') ]; then
|
|
|
|
echo " $file" >> /tmp/t
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
|
|
|
|
if [ -s /tmp/t ]; then
|
|
|
|
echo " -- Ingest and Processing: found recorded meeting but no archive files-- "
|
|
|
|
cat /tmp/t
|
|
|
|
echo
|
|
|
|
fi
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
exit 0
|
|
|
|
fi
|