feat: add save scripts

Signed-off-by: Xinwei Xiong(cubxxw-openim) <3293172751nss@gmail.com>
This commit is contained in:
Xinwei Xiong(cubxxw-openim)
2023-08-12 16:52:03 +08:00
parent fbbaacc27a
commit 542fbec18e
9 changed files with 433 additions and 105 deletions
+4 -3
View File
@@ -16,9 +16,9 @@
set -e
set -o pipefail
. $(dirname ${BASH_SOURCE})/lib/color.sh
. $(dirname ${BASH_SOURCE})/lib/init.sh
trap 'openim::color::echo RED_PREFIX "Script interrupted."; exit 1' INT
openim::util::onCtrlC
print_with_delay() {
text="$1"
@@ -89,7 +89,8 @@ O:::::::OOO:::::::O p:::::ppppp:::::::pe::::::::e n::::n n::::nII:
print_with_delay "Open-IM-Server: Reinventing Instant Messaging" 0.01
print_progress 50 0.02
print_with_delay "Open-IM-Server is not just a product; it's a revolution. It's about bringing the power of seamless, real-time messaging to your fingertips. And it's about joining a global community of developers, dedicated to pushing the boundaries of what's possible." 0.01
print_with_delay "Open-IM-Server is not just a product; it's a revolution. It's about bringing the power of seamless," 0.01
print_with_delay "real-time messaging to your fingertips. And it's about joining a global community of developers, dedicated to pushing the boundaries of what's possible." 0.01
print_progress 50 0.02
+1 -1
View File
@@ -14,7 +14,7 @@
# limitations under the License.
# Iterates over two directories: 'pkg' and 'internal/pkg'.
for top in pkg internal/pkg tools
for top in pkg internal/pkg
do
# Finds all subdirectories (including nested ones) under the current directory in the iteration ('pkg' or 'internal/pkg').
for d in $(find $top -type d)
+45 -93
View File
@@ -13,110 +13,62 @@
# limitations under the License.
#Include shell font styles and some basic information
SCRIPTS_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
OPENIM_ROOT=$(dirname "${BASH_SOURCE[0]}")/..
source "${OPENIM_ROOT}/scripts/lib/init.sh"
source "${OPENIM_ROOT}/scripts/install/environment.sh"
openim::util::onCtrlC
# docker-compose.yaml file name
docker_compose_file_name="docker-compose.yaml"
trap 'onCtrlC' INT
function onCtrlC () {
#Capture CTRL+C, terminate the background process of the program when the script is terminated in the form of ctrl+c
kill -9 ${do_sth_pid} ${progress_pid}
echo
echo 'Ctrl+C is captured'
exit 1
# Load environment variables from .env file
load_env() {
source ${OPENIM_ROOT}/.env
}
do_sth() {
#Main program to run
echo "++++++++++++++++++++++++"
sleep 5
echo "++++++++++++++++++++++++"
sleep 10
}
#Import environment variables
source .env
#Get the public IP address of the local machine
internet_ip=$(curl ifconfig.me -s)
echo -e "\033[1;34mCurrent public IP address: ${internet_ip}\033[0m\n"
#If MINIO_ENDPOINT is "http://127.0.0.1:10005", replace it with the current public IP address
if [[ $MINIO_ENDPOINT == "http://127.0.0.1:10005" ]]; then
sed -i "s/127.0.0.1/${internet_ip}/" .env
fi
do_progress_bar() {
local duration=${1}
local max_progress=20
local current_progress=0
while true; do
((current_progress++))
if [[ $current_progress -gt $max_progress ]]; then
break
fi
sleep "$duration"
echo "=====> Progress: [${current_progress}/${max_progress}]"
done
}
#Start Docker containers
start_docker_containers() {
if command -v docker-compose >/dev/null 2>&1; then
echo -e "\033[1;34mFound docker-compose command, starting docker containers...\033[0m\n"
docker-compose -f ${OPENIM_ROOT}/${docker_compose_file_name} up -d
else
if command -v docker >/dev/null 2>&1; then
echo -e "\033[1;34mFound docker command, starting docker containers...\033[0m\n"
docker compose -f ${OPENIM_ROOT}/${docker_compose_file_name} up -d
else
echo -e "\033[1;31mFailed to find docker-compose or docker command, please make sure they are installed and configured correctly.\033[0m"
return 1
fi
# Replace local IP with public IP in .env
replace_ip() {
if [ "$API_URL" == "http://127.0.0.1:10002/object/" ]; then
sed -i "s/127.0.0.1/${internet_ip}/" ${OPENIM_ROOT}/.env
fi
if [ "$MINIO_ENDPOINT" == "http://127.0.0.1:10005" ]; then
sed -i "s/127.0.0.1/${internet_ip}/" ${OPENIM_ROOT}/.env
fi
openim::log::info "Your minio endpoint is ${MINIO_ENDPOINT}"
}
#Execute scripts
setup_script() {
chmod +x ${SCRIPTS_ROOT}/*.sh
echo -e "\033[1;34m============>Executing init_pwd.sh script...\033[0m\n"
${SCRIPTS_ROOT}/init_pwd.sh
echo -e "\033[1;34m============>Executing env_check.sh script...\033[0m\n"
${SCRIPTS_ROOT}/env_check.sh
# Execute necessary scripts
execute_scripts() {
chmod +x ${OPENIM_ROOT}/scripts/*.sh
openim::log::info "Executing init_pwd.sh"
${OPENIM_ROOT}/scripts/init_pwd.sh
openim::log::info "Executing env_check.sh"
${OPENIM_ROOT}/scripts/env_check.sh
}
setup_script &
# Start docker compose
start_docker_compose() {
openim::log::info "Checking if docker-compose command is available"
if command -v docker-compose &> /dev/null; then
docker-compose up -d
else
docker compose up -d
fi
#Start Docker containers (timeout 10 seconds)
start_docker_containers
${OPENIM_ROOT}/scripts/docker_check_service.sh
}
docker_pid=$!
timeout 10s tail --pid=${docker_pid} -f /dev/null
docker_exit_code=$?
main() {
load_env
openim::util::get_server_ip
replace_ip
execute_scripts
start_docker_compose
openim::log::success "Script executed successfully"
}
if [ $docker_exit_code -eq 0 ]; then
echo -e "\033[1;32m============>Docker containers started successfully!\033[0m\n"
else
echo -e "\033[1;31m============>Failed to start Docker containers, please check the environment configuration and dependencies.\033[0m\n"
exit 1
fi
echo -e "\033[1;34m============>Executing docker_check_service.sh script...\033[0m\n"
#View running Docker containers
echo -e "\033[1;34m============>Viewing running Docker containers...\033[0m\n"
echo ""
docker ps
#Replace the progress bar section with the pv command
echo -e "\033[1;34m============>Starting progress bar...\033[0m\n"
do_progress_bar 0.5 | pv -l -s 20 > /dev/null
echo -e "\033[1;34m============>Progress bar completed.\033[0m\n"
#Execute the main program
do_sth
# Run the main function
main
+33 -8
View File
@@ -128,7 +128,7 @@ openim::util::wait_for_url() {
return 1
}
# Example: openim::util::wait_for_success 120 5 "imctl get nodes|grep localhost"
# Example: openim::util::wait_for_success 120 5 "openimctl get nodes|grep localhost"
# arguments: wait time, sleep time, shell command
# returns 0 if the shell command get output, 1 otherwise.
openim::util::wait_for_success(){
@@ -277,7 +277,7 @@ openim::util::find-binary() {
openim::util::find-binary-for-platform "$1" "$(openim::util::host_platform)"
}
# Run all known doc generators (today gendocs and genman for imctl)
# Run all known doc generators (today gendocs and genman for openimctl)
# $1 is the directory to put those generated documents
openim::util::gen-docs() {
local dest="$1"
@@ -293,8 +293,8 @@ openim::util::gen-docs() {
# least from k/k tree), remove it completely.
openim::util::sourced_variable "${genfeddocs}"
mkdir -p "${dest}/docs/guide/en-US/cmd/imctl/"
"${gendocs}" "${dest}/docs/guide/en-US/cmd/imctl/"
mkdir -p "${dest}/docs/guide/en-US/cmd/openimctl/"
"${gendocs}" "${dest}/docs/guide/en-US/cmd/openimctl/"
mkdir -p "${dest}/docs/guide/en-US/cmd/"
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-api"
@@ -310,7 +310,7 @@ openim::util::gen-docs() {
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-rpc-msg"
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-rpc-third"
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/" "openim-rpc-user"
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/imctl" "imctl"
"${genopenimdocs}" "${dest}/docs/guide/en-US/cmd/openimctl" "openimctl"
mkdir -p "${dest}/docs/man/man1/"
"${genman}" "${dest}/docs/man/man1/" "openim-api"
@@ -327,8 +327,8 @@ openim::util::gen-docs() {
"${genman}" "${dest}/docs/man/man1/" "openim-rpc-third"
"${genman}" "${dest}/docs/man/man1/" "openim-rpc-user"
mkdir -p "${dest}/docs/guide/en-US/yaml/imctl/"
"${genyaml}" "${dest}/docs/guide/en-US/yaml/imct/"
mkdir -p "${dest}/docs/guide/en-US/yaml/openimctl/"
"${genyaml}" "${dest}/docs/guide/en-US/yaml/openimctl/"
# create the list of generated files
pushd "${dest}" > /dev/null || return 1
@@ -553,7 +553,7 @@ EOF
# flatten the openimconfig files to make them self contained
username=$(whoami)
${sudo} /usr/bin/env bash -e <<EOF
$(openim::util::find-binary imct) --openimconfig="${dest_dir}/${client_id}.openimconfig" config view --minify --flatten > "/tmp/${client_id}.openimconfig"
$(openim::util::find-binary openimctl) --openimconfig="${dest_dir}/${client_id}.openimconfig" config view --minify --flatten > "/tmp/${client_id}.openimconfig"
mv -f "/tmp/${client_id}.openimconfig" "${dest_dir}/${client_id}.openimconfig"
chown ${username} "${dest_dir}/${client_id}.openimconfig"
EOF
@@ -896,6 +896,31 @@ function openim::util::run::relative() {
done
}
# This function retrieves the IP address of the current server.
# It primarily uses the `curl` command to fetch the public IP address from ifconfig.me.
# If curl or the service is not available, it falls back
# to the internal IP address provided by the hostname command.
function openim::util::get_server_ip() {
# Check if the 'curl' command is available
if command -v curl &> /dev/null; then
# Try to retrieve the public IP address using curl and ifconfig.me
IP=$(curl -s ifconfig.me)
# Check if IP retrieval was successful
if [[ -z "$IP" ]]; then
# If not, get the internal IP address
IP=$(hostname -I | awk '{print $1}')
fi
else
# If curl is not available, get the internal IP address
IP=$(hostname -I | awk '{print $1}')
fi
# Return the fetched IP address
echo "$IP"
}
function openim::util::onCtrlC () {
#Capture CTRL+C, terminate the background process of the program when the script is terminated in the form of ctrl+c
kill -9 ${do_sth_pid} ${progress_pid}