2020-04-08 16:47:54 +02:00
#!/bin/bash
2020-11-05 11:57:29 +01:00
# Deployed images in media-node
IMAGES=(
2020-11-09 23:01:17 +01:00
"kurento-media-server"
"docker.elastic.co/beats/filebeat"
"docker.elastic.co/beats/metricbeat"
2020-11-05 11:57:29 +01:00
"openvidu/media-node-controller"
)
docker_command_by_container_image() {
IMAGE_NAME=$1
COMMAND=$2
if [[ ! -z "${IMAGE_NAME}" ]]; then
CONTAINERS=$(docker ps -a | grep "${IMAGE_NAME}" | awk '{print $1}')
for CONTAINER_ID in ${CONTAINERS[@]}; do
if [[ ! -z "${CONTAINER_ID}" ]] && [[ ! -z "${COMMAND}" ]]; then
2020-11-09 23:01:17 +01:00
bash -c "docker ${COMMAND} ${CONTAINER_ID}"
2020-11-05 11:57:29 +01:00
fi
done
fi
}
stop_containers() {
printf "Stopping containers..."
for IMAGE in ${IMAGES[@]}; do
docker_command_by_container_image "${IMAGE}" "rm -f"
done
}
2020-11-05 14:58:44 +01:00
kurento_logs() {
if [[ "$1" == "-f" ]]; then
tail -f /opt/openvidu/kurento-logs/*.log
else
cat /opt/openvidu/kurento-logs/*.log
fi
2020-11-05 11:57:29 +01:00
}
2020-07-16 20:09:48 +02:00
upgrade_media_node() {
UPGRADE_SCRIPT_URL="https://s3-eu-west-1.amazonaws.com/aws.openvidu.io/install_media_node_OVVERSION.sh"
2020-05-05 18:01:08 +02:00
HTTP_STATUS=$(curl -s -o /dev/null -I -w "%{http_code}" ${UPGRADE_SCRIPT_URL//OVVERSION/$1})
2020-07-16 20:09:48 +02:00
printf " => Upgrading Media Node to '%s' version" "$1"
2020-05-05 18:01:08 +02:00
if [ "$HTTP_STATUS" == "200" ]; then
2020-05-06 16:28:47 +02:00
printf "\n => Downloading and upgrading new version"
2020-05-05 18:01:08 +02:00
printf "\n"
2020-05-06 14:46:05 +02:00
2020-05-06 16:28:47 +02:00
curl --silent ${UPGRADE_SCRIPT_URL//OVVERSION/$1} | bash -s upgrade
2020-05-05 18:01:08 +02:00
else
printf "\n =======¡ERROR!======="
2020-07-16 20:09:48 +02:00
printf "\n Media Node Version %s not exist" "$1"
2020-05-05 18:01:08 +02:00
printf "\n"
exit 0
fi
}
2020-05-18 11:37:43 +02:00
collect_basic_information() {
LINUX_VERSION=$(lsb_release -d)
DOCKER_PS=$(docker ps)
DOCKER_VERSION=$(docker version --format '{{.Server.Version}}')
DOCKER_COMPOSE_VERSION=$(docker-compose version --short)
2020-07-16 20:09:48 +02:00
MEDIA_NODE_FOLDER="${PWD}"
OV_VERSION=$(grep 'Openvidu Version:' "${MEDIA_NODE_FOLDER}/docker-compose.yml" | awk '{ print $4 }')
OV_TYPE_INSTALLATION=$(grep 'Installation Mode:' "${MEDIA_NODE_FOLDER}/docker-compose.yml" | awk '{ print $4,$5 }')
2020-05-18 11:37:43 +02:00
TREE_OV_DIRECTORY=$(find "." | sed -e "s/[^-][^\/]*\// |/g" -e "s/|\([^ ]\)/|-\1/")
}
version_ov() {
collect_basic_information
2020-07-16 20:09:48 +02:00
printf '\nMedia Node Information:'
2020-05-18 11:37:43 +02:00
printf '\n'
printf '\n Installation Type: %s' "${OV_TYPE_INSTALLATION}"
printf '\n Openvidu Version: %s' "${OV_VERSION}"
printf '\n'
printf '\nSystem Information:'
printf '\n'
printf '\n Linux Version:'
printf '\n - %s' "${LINUX_VERSION}"
printf '\n Docker Version: %s' "${DOCKER_VERSION}"
printf '\n Docker Compose Version: %s' "${DOCKER_COMPOSE_VERSION}"
printf '\n'
printf '\nInstallation Information:'
printf '\n'
2020-07-16 20:09:48 +02:00
printf '\n Installation Folder: %s' "${MEDIA_NODE_FOLDER}"
2020-05-18 11:37:43 +02:00
printf '\n Installation Folder Tree:'
printf '\n%s' "$(echo "${TREE_OV_DIRECTORY}" | sed -e 's/.//' -e ':a' -e 'N;$!ba' -e 's/\n/\n\t/g')"
printf '\n'
printf '\nDocker Running Services:'
printf '\n'
printf '\n %s' "$(echo "${DOCKER_PS}" | sed -e ':a' -e 'N;$!ba' -e 's/\n/\n\t/g')"
printf '\n'
}
generate_report() {
collect_basic_information
REPORT_CREATION_DATE=$(date +"%d-%m-%Y")
REPORT_CREATION_TIME=$(date +"%H:%M:%S")
2020-07-16 20:09:48 +02:00
REPORT_NAME="media-node-report-${REPORT_CREATION_DATE}-$(date +"%H-%M").txt"
REPORT_OUPUT="${MEDIA_NODE_FOLDER}/${REPORT_NAME}"
CONTAINERS=$(docker ps | awk '{if(NR>1) print $NF}')
2020-05-18 11:37:43 +02:00
{
printf "\n ======================================="
printf "\n = REPORT INFORMATION ="
printf "\n ======================================="
printf '\n'
printf '\n Creation Date: %s' "${REPORT_CREATION_DATE}"
printf '\n Creation Time: %s' "${REPORT_CREATION_TIME}"
printf '\n'
printf "\n ======================================="
2020-07-16 20:09:48 +02:00
printf "\n = MEDIA NODE INFORMATION ="
2020-05-18 11:37:43 +02:00
printf "\n ======================================="
printf '\n'
printf '\n Installation Type: %s' "${OV_TYPE_INSTALLATION}"
printf '\n Openvidu Version: %s' "${OV_VERSION}"
printf '\n'
printf "\n ======================================="
printf "\n = SYSTEM INFORMATION ="
printf "\n ======================================="
printf '\n'
printf '\n Linux Version:'
printf '\n - %s' "${LINUX_VERSION}"
printf '\n Docker Version: %s' "${DOCKER_VERSION}"
printf '\n Docker Compose Version: %s' "${DOCKER_COMPOSE_VERSION}"
printf '\n'
printf "\n ======================================="
printf "\n = INSTALLATION INFORMATION ="
printf "\n ======================================="
printf '\n'
2020-07-16 20:09:48 +02:00
printf '\n Installation Folder: %s' "${MEDIA_NODE_FOLDER}"
2020-05-18 11:37:43 +02:00
printf '\n Installation Folder Tree:'
printf '\n%s' "$(echo "${TREE_OV_DIRECTORY}" | sed -e 's/.//' -e ':a' -e 'N;$!ba' -e 's/\n/\n\t/g')"
printf '\n'
printf "\n ======================================="
printf "\n = DOCKER RUNNING SERVICES ="
printf "\n ======================================="
printf '\n'
printf '\n %s' "$(echo "${DOCKER_PS}" | sed -e ':a' -e 'N;$!ba' -e 's/\n/\n\t/g')"
printf '\n'
printf "\n ======================================="
printf "\n = CONFIGURATION FILES ="
printf "\n ======================================="
printf '\n'
printf '\n ================ .env ================='
printf '\n'
printf '\n'
2020-07-16 20:09:48 +02:00
cat < "${MEDIA_NODE_FOLDER}/.env"
2020-05-18 11:37:43 +02:00
2020-05-18 13:28:38 +02:00
printf '\n'
printf '\n ========= docker-compose.yml =========='
printf '\n'
printf '\n'
2020-07-16 20:09:48 +02:00
cat "${MEDIA_NODE_FOLDER}/docker-compose.yml"
2020-05-18 11:37:43 +02:00
printf '\n'
printf '\n'
printf "\n ======================================="
2020-07-02 19:01:27 +02:00
printf "\n = LOGS ="
2020-05-18 11:37:43 +02:00
printf "\n ======================================="
2020-07-02 19:01:27 +02:00
for CONTAINER in $CONTAINERS
do
printf '\n'
printf "\n ---------------------------------------"
printf "\n %s" $CONTAINER
printf "\n ---------------------------------------"
printf '\n'
docker logs $CONTAINER
printf "\n ---------------------------------------"
printf '\n'
printf '\n'
done
2020-05-18 11:37:43 +02:00
2020-11-05 11:57:29 +01:00
printf '\n'
printf "\n ---------------------------------------"
printf "\n KMS"
printf "\n ---------------------------------------"
printf '\n'
2020-11-05 14:58:44 +01:00
kurento_logs
2020-11-05 11:57:29 +01:00
printf "\n ---------------------------------------"
printf '\n'
printf '\n'
2020-07-02 19:01:27 +02:00
printf "\n ======================================="
printf "\n = CONTAINER ENVS VARIABLES ="
printf "\n ======================================="
2020-05-18 11:37:43 +02:00
2020-07-02 19:01:27 +02:00
for CONTAINER in $CONTAINERS
do
printf '\n'
printf "\n ======================================="
printf "\n %s" $CONTAINER
printf "\n ---------------------------------------"
printf '\n'
docker exec $CONTAINER env
printf "\n ---------------------------------------"
printf '\n'
printf '\n'
done
} >> "${REPORT_OUPUT}" 2>&1
2020-05-18 11:37:43 +02:00
printf "\n Generation of the report completed with success"
printf "\n You can get your report at path '%s'" "${REPORT_OUPUT}"
printf "\n"
}
2020-04-08 16:47:54 +02:00
usage() {
2020-07-16 20:09:48 +02:00
printf "Usage: \n\t media_node [command]"
2020-04-08 16:47:54 +02:00
printf "\n\nAvailable Commands:"
2020-07-16 20:09:48 +02:00
printf "\n\tstart\t\t\tStart media node service"
printf "\n\tstop\t\t\tStop media node service"
printf "\n\trestart\t\t\tRestart media node service"
2020-11-05 14:58:44 +01:00
printf "\n\tlogs [-f]\t\tShow media-node-controller logs."
printf "\n\tkms-logs [-f]\t\tShow kms logs"
2020-07-16 20:09:48 +02:00
printf "\n\tupgrade\t\t\tUpgrade to the lastest Media Node version"
printf "\n\tupgrade [version]\tUpgrade to the specific Media Node version"
printf "\n\tversion\t\t\tShow version of Media Node"
printf "\n\treport\t\t\tGenerate a report with the current status of Media Node"
printf "\n\thelp\t\t\tShow help for media node command"
2020-04-08 16:47:54 +02:00
printf "\n"
}
case $1 in
2020-07-16 20:09:48 +02:00
2020-04-08 16:47:54 +02:00
start)
docker-compose up -d
2020-07-16 20:09:48 +02:00
docker-compose logs -f media-node-controller
2020-04-08 16:47:54 +02:00
;;
stop)
docker-compose down
2020-07-16 20:09:48 +02:00
stop_containers
2020-04-08 16:47:54 +02:00
;;
restart)
2020-04-10 01:41:33 +02:00
docker-compose down
2020-07-16 20:09:48 +02:00
stop_containers
2020-04-10 01:41:33 +02:00
docker-compose up -d
2020-07-16 20:09:48 +02:00
docker-compose logs -f media-node-controller
2020-04-08 16:47:54 +02:00
;;
logs)
2020-11-05 11:57:29 +01:00
case $2 in
2020-11-05 12:59:22 +01:00
"-f")
docker-compose logs -f media-node-controller
;;
2020-11-05 11:57:29 +01:00
*)
2020-11-05 12:59:22 +01:00
docker-compose logs media-node-controller
;;
esac
;;
kms-logs)
2020-11-05 14:58:44 +01:00
kurento_logs $2
2020-04-08 16:47:54 +02:00
;;
2020-05-05 18:01:08 +02:00
upgrade)
if [ -z "$2" ]; then
2020-05-06 16:28:47 +02:00
UPGRADE_VERSION="latest"
2020-05-05 18:01:08 +02:00
else
2020-05-06 16:28:47 +02:00
UPGRADE_VERSION="$2"
2020-05-05 18:01:08 +02:00
fi
2020-05-06 16:28:47 +02:00
2020-07-16 20:09:48 +02:00
read -r -p " You're about to update Media Node to '${UPGRADE_VERSION}' version. Are you sure? [y/N]: " response
2020-05-18 11:37:43 +02:00
case "$response" in
2020-07-16 20:09:48 +02:00
[yY][eE][sS]|[yY])
upgrade_media_node "${UPGRADE_VERSION}"
2020-05-18 11:37:43 +02:00
;;
2020-07-16 20:09:48 +02:00
*)
2020-05-18 11:37:43 +02:00
exit 0
;;
esac
;;
version)
version_ov
;;
report)
2020-07-16 20:09:48 +02:00
read -r -p " You are about to generate a report on the current status of Media Node, this may take some time. Do you want to continue? [y/N]: " response
2020-05-18 11:37:43 +02:00
case "$response" in
2020-07-16 20:09:48 +02:00
[yY][eE][sS]|[yY])
2020-05-18 11:37:43 +02:00
generate_report
;;
*)
exit 0
;;
2020-05-06 16:28:47 +02:00
esac
2020-05-05 18:01:08 +02:00
;;
2020-05-06 16:28:47 +02:00
2020-04-08 16:47:54 +02:00
*)
usage
;;
2020-07-16 20:09:48 +02:00
esac