2011-08-26 06:47:03 +08:00
|
|
|
#!/bin/bash
|
|
|
|
#
|
|
|
|
# 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
|
|
|
|
|
|
|
|
|
|
|
|
set -e
|
|
|
|
#set -x
|
|
|
|
|
|
|
|
BASE=/var/bigbluebutton/recording
|
|
|
|
STATUS=$BASE/status
|
|
|
|
|
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
|
|
|
|
for type in $TYPES; do
|
|
|
|
if [ -d $BASE/process/$type/$MEETING_ID ]; then
|
|
|
|
rm -rf $BASE/process/$type/$MEETING_ID
|
|
|
|
else
|
|
|
|
echo "Warn: Didn't find $BASE/process/$type/$MEETING_ID"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
if [ -f $STATUS/processed/$MEETING_ID-$type.done ]; then
|
|
|
|
rm $STATUS/processed/$MEETING_ID-$type.done
|
|
|
|
else
|
|
|
|
echo "Warn: Didn't find $STATUS/processed/$MEETING_ID-$type.done"
|
|
|
|
exit 1
|
|
|
|
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
|
|
|
|
}
|
|
|
|
|
2011-08-26 06:47:03 +08:00
|
|
|
BBB_VERSION=0.8-dev
|
|
|
|
|
|
|
|
need_root() {
|
|
|
|
if [ $EUID != 0 ]; then
|
|
|
|
echo "Need to be root to run this option"
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
|
|
|
usage() {
|
|
|
|
echo "BigBlueButton Recording Utility - Version $BBB_VERSION"
|
|
|
|
echo
|
|
|
|
echo " bbb-record [options]"
|
|
|
|
echo
|
|
|
|
echo "Configuration:"
|
|
|
|
echo " --version Display BigBlueButton version (packages)"
|
|
|
|
echo
|
|
|
|
echo "Monitoring:"
|
|
|
|
echo " --watch watch the processing in real-time"
|
2011-08-31 04:12:37 +08:00
|
|
|
echo " --rebuild [meetingID] rebuild the output for meetingID"
|
2011-09-01 02:55:20 +08:00
|
|
|
echo " --deletall delete all meetings and recordings"
|
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
|
|
|
|
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
|
|
|
|
usage
|
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
|
|
|
|
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
|
|
|
|
|
|
|
|
#sudo rm -rf /var/bigbluebutton/recording/process/slides/6e35e3b2778883f5db637d7a5dba0a427f692e91-1314313817423
|
|
|
|
#sudo rm /var/bigbluebutton/recording/status/processed/6e35e3b2778883f5db637d7a5dba0a427f692e91-1314313817423-slides.done
|
|
|
|
|
|
|
|
#rm -rf $BASE/recording/process/slides/$recording
|
|
|
|
#rm -rf $BASE/publish/slides/$recording
|
|
|
|
|
|
|
|
#if [ -d /var/bigbluebutton/published/$recording ]; then
|
|
|
|
# rm -rf /var/bigbluebutton/published/$recording
|
|
|
|
#fi
|
|
|
|
#if [ -d /var/bigbluebutton/unpublished/$recording ]; then
|
|
|
|
# rm -rf /var/bigbluebutton/unpublished/$recording
|
|
|
|
#fi
|
|
|
|
done
|
|
|
|
else
|
|
|
|
echo "Marking for rebuild: $MEETING_ID"
|
|
|
|
mark_for_rebuild $MEETING_ID
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2011-08-31 04:12:37 +08:00
|
|
|
fi
|
|
|
|
fi
|
2011-08-26 06:47:03 +08:00
|
|
|
|
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/*
|
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
|
|
|
|
|
|
|
|
if [ $WATCH ]; then
|
|
|
|
|
|
|
|
|
|
|
|
#ps -fC god
|
|
|
|
#ps -uxfp $(cat /var/run/god.pid)
|
|
|
|
#RAP_PID=$(ps -fC ruby | grep rap-worker | awk '{print $2}')
|
|
|
|
#if [ "$RAP_PID" != "" ]; then
|
|
|
|
#echo
|
|
|
|
#ps fU tomcat6 -o "%c%a"
|
|
|
|
#ps af -C tomcat6 -o "%c%a"
|
|
|
|
# pstree --ascii -alp $RAP_PID
|
|
|
|
#fi
|
|
|
|
|
|
|
|
|
2011-09-01 02:55:20 +08:00
|
|
|
echo "MeetingID Time Slides Recorded Archived Processed Published Description"
|
|
|
|
echo "------------------------------------------------------ ---------------------------- ------ -------- -------- -------------------- -------------------- -----------------------------"
|
2011-08-31 04:12:37 +08:00
|
|
|
|
|
|
|
for meeting in $(ls -u /var/bigbluebutton | grep "[0-9]\{13\}$"); 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 " "
|
|
|
|
echo -n $(date --date "Jan 1, 1970 00:00:00 +0000 + $epoc seconds")
|
2011-08-26 06:47:03 +08:00
|
|
|
|
2011-08-31 04:12:37 +08:00
|
|
|
printf "%7s" $(find /var/bigbluebutton/$meeting/$meeting -name "*.swf" | wc -l)
|
2011-08-26 06:47:03 +08:00
|
|
|
#echo "/var/bigbluebutton/$meeting/$meeting"
|
|
|
|
|
|
|
|
#echo $BASE/raw/$meeting
|
|
|
|
if [ -d $BASE/raw/$meeting ]; then
|
|
|
|
recording=$meeting
|
|
|
|
|
|
|
|
#for recording in $(dir $BASE/raw); do
|
|
|
|
|
|
|
|
#echo -n "$recording: "
|
|
|
|
|
|
|
|
#
|
|
|
|
# Check archived
|
|
|
|
if [ -f $STATUS/recorded/$recording.done ]; then
|
2011-08-31 04:12:37 +08:00
|
|
|
echo -n " done "
|
2011-08-26 06:47:03 +08:00
|
|
|
else
|
|
|
|
echo -n " "
|
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Check archived
|
|
|
|
if [ -f $STATUS/archived/$recording.done ]; then
|
2011-08-31 04:12:37 +08:00
|
|
|
echo -n " done "
|
2011-08-26 06:47:03 +08:00
|
|
|
else
|
2011-08-31 04:12:37 +08:00
|
|
|
echo -n " "
|
2011-08-26 06:47:03 +08:00
|
|
|
fi
|
|
|
|
|
|
|
|
|
|
|
|
#
|
|
|
|
# Check archived
|
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 " "
|
2011-08-26 06:47:03 +08:00
|
|
|
echo -n $(head -n 5 /var/bigbluebutton/recording/raw/$recording/events.xml | grep description | sed s/.*description=\"//g | sed s/\".*//g)
|
|
|
|
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
|
|
|
|
|
|
|
|
|