From 7313168bb7bd15cd76ffbd262ce49c4fee9a6732 Mon Sep 17 00:00:00 2001 From: "Xinwei Xiong(cubxxw)" <3293172751nss@gmail.com> Date: Thu, 11 May 2023 02:06:50 +0800 Subject: [PATCH] fix: change the filename from script to scripts Signed-off-by: Xinwei Xiong(cubxxw) <3293172751nss@gmail.com> --- scripts/.env | 4 + scripts/LICENSE_TEMPLATES | 13 ++ scripts/batch_build_all_service.sh | 60 +++++++++ scripts/batch_start_all.sh | 61 +++++++++ scripts/build_all_service.sh | 36 +++++ scripts/build_images.sh | 11 ++ scripts/check_all.sh | 66 ++++++++++ scripts/demo_svr_start.sh | 47 +++++++ scripts/docker_check_service.sh | 12 ++ scripts/docker_start_all.sh | 35 +++++ scripts/enterprise/check_all.sh | 28 ++++ scripts/enterprise/function.sh | 15 +++ scripts/enterprise/path_info.cfg | 29 +++++ scripts/env_check.sh | 56 ++++++++ scripts/function.sh | 15 +++ scripts/init_pwd.sh | 11 ++ scripts/make-rules/common.mk | 62 +++++++++ scripts/make-rules/copyright.mk | 59 +++++++++ scripts/make-rules/dependencies.mk | 17 +++ scripts/make-rules/gen.mk | 19 +++ scripts/make-rules/golang.mk | 17 +++ scripts/make-rules/image.mk | 21 +++ scripts/make-rules/tools.mk | 202 +++++++++++++++++++++++++++++ scripts/mongo-init.sh | 12 ++ scripts/msg_gateway_start.sh | 53 ++++++++ scripts/msg_transfer_start.sh | 45 +++++++ scripts/path_info.cfg | 88 +++++++++++++ scripts/push_start.sh | 48 +++++++ scripts/sdk_svr_start.sh | 45 +++++++ scripts/start_all.sh | 30 +++++ scripts/start_cron.sh | 36 +++++ scripts/start_rpc_service.sh | 95 ++++++++++++++ scripts/stop_all.sh | 19 +++ scripts/style_info.cfg | 9 ++ scripts/win_build_all_service.cmd | 22 ++++ scripts/win_start_all_service.cmd | 22 ++++ 36 files changed, 1420 insertions(+) create mode 100644 scripts/.env create mode 100644 scripts/LICENSE_TEMPLATES create mode 100644 scripts/batch_build_all_service.sh create mode 100644 scripts/batch_start_all.sh create mode 100644 scripts/build_all_service.sh create mode 100644 scripts/build_images.sh create mode 100644 scripts/check_all.sh create mode 100644 scripts/demo_svr_start.sh create mode 100644 scripts/docker_check_service.sh create mode 100644 scripts/docker_start_all.sh create mode 100644 scripts/enterprise/check_all.sh create mode 100644 scripts/enterprise/function.sh create mode 100644 scripts/enterprise/path_info.cfg create mode 100644 scripts/env_check.sh create mode 100644 scripts/function.sh create mode 100644 scripts/init_pwd.sh create mode 100644 scripts/make-rules/common.mk create mode 100644 scripts/make-rules/copyright.mk create mode 100644 scripts/make-rules/dependencies.mk create mode 100644 scripts/make-rules/gen.mk create mode 100644 scripts/make-rules/golang.mk create mode 100644 scripts/make-rules/image.mk create mode 100644 scripts/make-rules/tools.mk create mode 100644 scripts/mongo-init.sh create mode 100755 scripts/msg_gateway_start.sh create mode 100755 scripts/msg_transfer_start.sh create mode 100644 scripts/path_info.cfg create mode 100644 scripts/push_start.sh create mode 100644 scripts/sdk_svr_start.sh create mode 100644 scripts/start_all.sh create mode 100644 scripts/start_cron.sh create mode 100644 scripts/start_rpc_service.sh create mode 100644 scripts/stop_all.sh create mode 100644 scripts/style_info.cfg create mode 100644 scripts/win_build_all_service.cmd create mode 100644 scripts/win_start_all_service.cmd diff --git a/scripts/.env b/scripts/.env new file mode 100644 index 000000000..7fdf0e3b3 --- /dev/null +++ b/scripts/.env @@ -0,0 +1,4 @@ +USER=root +PASSWORD=openIM123 +MINIO_ENDPOINT=http://127.0.0.1:10005 +DATA_DIR=./ \ No newline at end of file diff --git a/scripts/LICENSE_TEMPLATES b/scripts/LICENSE_TEMPLATES new file mode 100644 index 000000000..dbc5ce2c8 --- /dev/null +++ b/scripts/LICENSE_TEMPLATES @@ -0,0 +1,13 @@ +Copyright © {{.Year}} {{.Holder}} All rights reserved. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/scripts/batch_build_all_service.sh b/scripts/batch_build_all_service.sh new file mode 100644 index 000000000..bf780008f --- /dev/null +++ b/scripts/batch_build_all_service.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh + +bin_dir="../bin" +logs_dir="../logs" +sdk_db_dir="../db/sdk/" +#Automatically created when there is no bin, logs folder +if [ ! -d $bin_dir ]; then + mkdir -p $bin_dir +fi +if [ ! -d $logs_dir ]; then + mkdir -p $logs_dir +fi +if [ ! -d $sdk_db_dir ]; then + mkdir -p $sdk_db_dir +fi + +#begin path +begin_path=$PWD + + +build_pid_array=() + +for ((i = 0; i < ${#service_source_root[*]}; i++)); do + cd $begin_path + service_path=${service_source_root[$i]} + cd $service_path + make install > /dev/null & + build_pid=$! + build_pid_array[i]=$build_pid +done + + +echo "wait all build finish....." + +success_num=0 +for ((i = 0; i < ${#service_source_root[*]}; i++)); do + echo "wait pid: " ${build_pid_array[i]} ${service_names[$i]} + wait ${build_pid_array[i]} + stat=$? + echo ${service_names[$i]} "pid: " ${build_pid_array[i]} "stat: " $stat + if [ $stat == 0 ] + then + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + let success_num=$success_num+1 + + else + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + fi +done + +echo "success_num" $success_num "service num:" ${#service_source_root[*]} +if [ $success_num == ${#service_source_root[*]} ] +then + echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +fi diff --git a/scripts/batch_start_all.sh b/scripts/batch_start_all.sh new file mode 100644 index 000000000..c2d78c509 --- /dev/null +++ b/scripts/batch_start_all.sh @@ -0,0 +1,61 @@ +#!/usr/bin/env bash +#fixme This script is the total startup script +#fixme The full name of the shell script that needs to be started is placed in the need_to_start_server_shell array + +#fixme Put the shell script name here +need_to_start_server_shell=( + start_rpc_service.sh + msg_gateway_start.sh + push_start.sh + msg_transfer_start.sh + sdk_svr_start.sh + demo_svr_start.sh +) +time=`date +"%Y-%m-%d %H:%M:%S"` +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========server start time:${time}===========">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & + +build_pid_array=() +idx=0 +for i in ${need_to_start_server_shell[*]}; do + chmod +x $i + ./$i & + build_pid=$! + echo "build_pid " $build_pid + build_pid_array[idx]=$build_pid + let idx=idx+1 +done + +echo "wait all start finish....." + +exit 0 + +success_num=0 +for ((i = 0; i < ${#need_to_start_server_shell[*]}; i++)); do + echo "wait pid: " ${build_pid_array[i]} ${need_to_start_server_shell[$i]} + wait ${build_pid_array[i]} + stat=$? + echo ${build_pid_array[i]} " " $stat + if [ $stat == 0 ] + then + # echo -e "${GREEN_PREFIX}${need_to_start_server_shell[$i]} successfully be built ${COLOR_SUFFIX}\n" + let success_num=$success_num+1 + + else + #echo -e "${RED_PREFIX}${need_to_start_server_shell[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + fi +done + +echo "success_num" $success_num "service num:" ${#need_to_start_server_shell[*]} +if [ $success_num == ${#need_to_start_server_shell[*]} ] +then + echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} +fi + + diff --git a/scripts/build_all_service.sh b/scripts/build_all_service.sh new file mode 100644 index 000000000..90e45444d --- /dev/null +++ b/scripts/build_all_service.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash + +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh + +bin_dir="../bin" +logs_dir="../logs" +sdk_db_dir="../db/sdk/" +#Automatically created when there is no bin, logs folder +if [ ! -d $bin_dir ]; then + mkdir -p $bin_dir +fi +if [ ! -d $logs_dir ]; then + mkdir -p $logs_dir +fi +if [ ! -d $sdk_db_dir ]; then + mkdir -p $sdk_db_dir +fi + +#begin path +begin_path=$PWD + +for ((i = 0; i < ${#service_source_root[*]}; i++)); do + cd $begin_path + service_path=${service_source_root[$i]} + cd $service_path + make install os=${goos} arch=${goarch} + if [ $? -ne 0 ]; then + echo -e "${RED_PREFIX}${service_names[$i]} build failed ${COLOR_SUFFIX}\n" + exit -1 + else + echo -e "${GREEN_PREFIX}${service_names[$i]} successfully be built ${COLOR_SUFFIX}\n" + fi +done +echo -e ${YELLOW_PREFIX}"all services build success"${COLOR_SUFFIX} diff --git a/scripts/build_images.sh b/scripts/build_images.sh new file mode 100644 index 000000000..ad37e24e4 --- /dev/null +++ b/scripts/build_images.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +image=openim/open_im_server:v1.0.5 +rm Open-IM-Server -rf +git clone https://github.com/OpenIMSDK/Open-IM-Server.git --recursive +cd Open-IM-Server +git checkout tuoyun +cd cmd/Open-IM-SDK-Core/ +git checkout tuoyun +cd ../../ +docker build -t $image . -f deploy.Dockerfile +docker push $image \ No newline at end of file diff --git a/scripts/check_all.sh b/scripts/check_all.sh new file mode 100644 index 000000000..af3d44ceb --- /dev/null +++ b/scripts/check_all.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash + +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh +service_port_name=( + openImWsPort + openImApiPort + openImSdkWsPort + openImDemoPort + openImCmsApiPort + openImUserPort + openImFriendPort + openImMessagePort + openImMessageGatewayPort + openImGroupPort + openImAuthPort + openImPushPort + openImAdminCmsPort + openImOfficePort + openImOrganizationPort + openImConversationPort + openImCachePort +) +switch=$(cat $config_path | grep demoswitch |awk -F '[:]' '{print $NF}') +for i in ${service_port_name[*]}; do + if [ ${switch} != "true" ]; then + if [ ${i} == "openImDemoPort" ]; then + continue + fi + fi + list=$(cat $config_path | grep -w ${i} | awk -F '[:]' '{print $NF}') + list_to_string $list + for j in ${ports_array}; do + port=$(ss -tunlp| grep open_im | awk '{print $5}' | grep -w ${j} | awk -F '[:]' '{print $NF}') + if [[ ${port} -ne ${j} ]]; then + echo -e ${YELLOW_PREFIX}${i}${COLOR_SUFFIX}${RED_PREFIX}" service does not start normally,not initiated port is "${COLOR_SUFFIX}${YELLOW_PREFIX}${j}${COLOR_SUFFIX} + echo -e ${RED_PREFIX}"please check ../logs/openIM.log "${COLOR_SUFFIX} + exit -1 + else + echo -e ${j}${GREEN_PREFIX}" port has been listening,belongs service is "${i}${COLOR_SUFFIX} + fi + done +done + +#Check launched service process +check=$(ps aux | grep -w ./${msg_transfer_name} | grep -v grep | wc -l) +if [ $check -eq ${msg_transfer_service_num} ]; then + echo -e ${GREEN_PREFIX}"none port has been listening,belongs service is openImMsgTransfer"${COLOR_SUFFIX} +else + echo -e ${RED_PREFIX}"openImMsgTransfer service does not start normally, num err"${COLOR_SUFFIX} + echo -e ${RED_PREFIX}"please check ../logs/openIM.log "${COLOR_SUFFIX} + exit -1 +fi + + +check=$(ps aux | grep -w ./${cron_task_name} | grep -v grep | wc -l) +if [ $check -ge 1 ]; then + echo -e ${GREEN_PREFIX}"none port has been listening,belongs service is openImCronTask"${COLOR_SUFFIX} +else + echo -e ${RED_PREFIX}"cron_task_name service does not start normally"${COLOR_SUFFIX} + echo -e ${RED_PREFIX}"please check ../logs/openIM.log "${COLOR_SUFFIX} + exit -1 +fi + +echo -e ${YELLOW_PREFIX}"all services launch success"${COLOR_SUFFIX} diff --git a/scripts/demo_svr_start.sh b/scripts/demo_svr_start.sh new file mode 100644 index 000000000..85b36ab25 --- /dev/null +++ b/scripts/demo_svr_start.sh @@ -0,0 +1,47 @@ +#!/usr/bin/env bash +#Include shell font styles and some basic information +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh +switch=$(cat $config_path | grep demoswitch |awk -F '[:]' '{print $NF}') +if [ ${switch} != "true" ]; then + echo -e ${YELLOW_PREFIX}" demo service switch is false not start demo "${COLOR_SUFFIX} + exit 0 +fi +list1=$(cat $config_path | grep openImDemoPort | awk -F '[:]' '{print $NF}') +list_to_string $list1 +api_ports=($ports_array) + +#Check if the service exists +#If it is exists,kill this process +check=$(ps aux | grep -w ./${demo_server_name} | grep -v grep | wc -l) +if [ $check -ge 1 ]; then + oldPid=$(ps aux | grep -w ./${demo_server_name} | grep -v grep | awk '{print $2}') + kill -9 $oldPid +fi +#Waiting port recycling +sleep 1 +cd ${demo_server_binary_root} + +for ((i = 0; i < ${#api_ports[@]}; i++)); do + nohup ./${demo_server_name} -port ${api_ports[$i]} >>../logs/openIM.log 2>&1 & +done + +sleep 3 +#Check launched service process +check=$(ps aux | grep -w ./${demo_server_name} | grep -v grep | wc -l) +if [ $check -ge 1 ]; then + newPid=$(ps aux | grep -w ./${demo_server_name} | grep -v grep | awk '{print $2}') + ports=$(netstat -netulp | grep -w ${newPid} | awk '{print $4}' | awk -F '[:]' '{print $NF}') + allPorts="" + + for i in $ports; do + allPorts=${allPorts}"$i " + done + echo -e ${SKY_BLUE_PREFIX}"SERVICE START SUCCESS "${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"SERVICE_NAME: "${COLOR_SUFFIX}${YELLOW_PREFIX}${demo_server_name}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"PID: "${COLOR_SUFFIX}${YELLOW_PREFIX}${newPid}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"LISTENING_PORT: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allPorts}${COLOR_SUFFIX} +else + echo -e ${YELLOW_PREFIX}${demo_server_name}${COLOR_SUFFIX}${RED_PREFIX}"SERVICE START ERROR, PLEASE CHECK openIM.log"${COLOR_SUFFIX} +fi \ No newline at end of file diff --git a/scripts/docker_check_service.sh b/scripts/docker_check_service.sh new file mode 100644 index 000000000..c1cca764a --- /dev/null +++ b/scripts/docker_check_service.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +echo "docker-compose ps..........................." +docker-compose ps + +echo "check OpenIM, waiting 30s...................." +sleep 30 + +echo "check OpenIM................................" +./check_all.sh +chmod +x ./enterprise/*.sh +./enterprise/check_all.sh + diff --git a/scripts/docker_start_all.sh b/scripts/docker_start_all.sh new file mode 100644 index 000000000..16283cf22 --- /dev/null +++ b/scripts/docker_start_all.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +#fixme This script is the total startup script +#fixme The full name of the shell script that needs to be started is placed in the need_to_start_server_shell array + +#fixme Put the shell script name here +need_to_start_server_shell=( + start_rpc_service.sh + msg_gateway_start.sh + push_start.sh + msg_transfer_start.sh + sdk_svr_start.sh + demo_svr_start.sh + start_cron.sh +) + +#fixme The 10 second delay to start the project is for the docker-compose one-click to start openIM when the infrastructure dependencies are not started + +sleep 10 +time=`date +"%Y-%m-%d %H:%M:%S"` +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========server start time:${time}===========">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +for i in ${need_to_start_server_shell[*]}; do + chmod +x $i + ./$i +done + +sleep 15 + +#fixme prevents the openIM service exit after execution in the docker container +tail -f /dev/null diff --git a/scripts/enterprise/check_all.sh b/scripts/enterprise/check_all.sh new file mode 100644 index 000000000..844b978a5 --- /dev/null +++ b/scripts/enterprise/check_all.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash + +source ./style_info.cfg +source ./enterprise/path_info.cfg +source ./enterprise/function.sh +service_port_name=( + openImChatApiPort + openImAdminApiPort + #api port name + openImAdminPort + openImChatPort +) +switch=$(cat $config_path | grep demoswitch |awk -F '[:]' '{print $NF}') +for i in ${service_port_name[*]}; do + list=$(cat $config_path | grep -w ${i} | awk -F '[:]' '{print $NF}') + list_to_string $list + for j in ${ports_array}; do + port=$(ss -tunlp| grep open_im | awk '{print $5}' | grep -w ${j} | awk -F '[:]' '{print $NF}') + if [[ ${port} -ne ${j} ]]; then + echo -e ${YELLOW_PREFIX}${i}${COLOR_SUFFIX}${RED_PREFIX}" service does not start normally,not initiated port is "${COLOR_SUFFIX}${YELLOW_PREFIX}${j}${COLOR_SUFFIX} + echo -e ${RED_PREFIX}"please check ../logs/openIM.log "${COLOR_SUFFIX} + exit -1 + else + echo -e ${j}${GREEN_PREFIX}" port has been listening,belongs service is "${i}${COLOR_SUFFIX} + fi + done +done + diff --git a/scripts/enterprise/function.sh b/scripts/enterprise/function.sh new file mode 100644 index 000000000..97f19187a --- /dev/null +++ b/scripts/enterprise/function.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +#input:[10023,2323,3434] +#output:10023 2323 3434 +list_to_string(){ +ports_list=$* +sub_s1=`echo $ports_list | sed 's/ //g'` +sub_s2=${sub_s1//,/ } +sub_s3=${sub_s2#*[} +sub_s4=${sub_s3%]*} +ports_array=$sub_s4 +} +remove_space(){ + value=$* + result=`echo $value | sed 's/ //g'` +} \ No newline at end of file diff --git a/scripts/enterprise/path_info.cfg b/scripts/enterprise/path_info.cfg new file mode 100644 index 000000000..c3bf17d97 --- /dev/null +++ b/scripts/enterprise/path_info.cfg @@ -0,0 +1,29 @@ +#Don't put the space between "=" + + +demo_server_name="open_im_chat_api" +demo_server_binary_root="../bin/" + + + +#Global configuration file default dir +config_path="../docker-compose_cfg/config.yaml" + +#servicefile dir path +service_source_root=( + #api service file + ../cmd/api/chat/ + ../cmd/api/admin/ + #rpc service file + ../cmd/rpc/admin/ + ../cmd/rpc/chat/ +) +#service filename +service_names=( + #api service filename + open_im_chat_api + open_im_admin_api + #rpc service filename + open_im_admin + open_im_chat +) diff --git a/scripts/env_check.sh b/scripts/env_check.sh new file mode 100644 index 000000000..f51dca451 --- /dev/null +++ b/scripts/env_check.sh @@ -0,0 +1,56 @@ +#!/usr/bin/env bash +source ./style_info.cfg + +echo -e "check time synchronize.................................." +t=`curl http://time.akamai.com/?iso -s` +t1=`date -d $t +%s` +t2=`date +%s` +let between=t2-t1 +if [[ $between -gt 10 ]] || [[ $between -lt -10 ]]; then + echo -e ${RED_PREFIX}"Warning: The difference between the iso time and the server's time is too large: "$between"s" ${COLOR_SUFFIX} +else + echo -e ${GREEN_PREFIX} "ok: Server time is synchronized " ${COLOR_SUFFIX} +fi + + + +echo -e "check login user........................................" +user=`whoami` +if [ $user == "root" ] ; then + echo -e ${GREEN_PREFIX} "ok: login user is root" ${COLOR_SUFFIX} +else + echo -e ${RED_PREFIX}"Warning: The current user is not root "${COLOR_SUFFIX} +fi + + + +echo -e "check docker............................................" +docker_running=`systemctl status docker | grep running | grep active | wc -l` + +docker_version=`docker-compose -v; docker -v` + +if [ $docker_running -gt 0 ]; then + echo -e ${GREEN_PREFIX} "ok: docker is running" ${COLOR_SUFFIX} + echo -e ${GREEN_PREFIX} $docker_version ${COLOR_SUFFIX} + +else + echo -e ${RED_PREFIX}"docker not running"${COLOR_SUFFIX} +fi + + +echo -e "check environment......................................." +SYSTEM=`uname -s` +if [ $SYSTEM != "Linux" ] ; then + echo -e ${RED_PREFIX}"Warning: Currently only Linux is supported"${COLOR_SUFFIX} +else + echo -e ${GREEN_PREFIX} "ok: system is linux"${COLOR_SUFFIX} +fi + +echo -e "check memory............................................" +available=`free -m | grep Mem | awk '{print $NF}'` +if [ $available -lt 2000 ] ; then + echo -e ${RED_PREFIX}"Warning: Your memory not enough, available is: " "$available"m${COLOR_SUFFIX}"\c" + echo -e ${RED_PREFIX}", must be greater than 2000m"${COLOR_SUFFIX} +else + echo -e ${GREEN_PREFIX} "ok: available memory is: "$available"m${COLOR_SUFFIX}" +fi diff --git a/scripts/function.sh b/scripts/function.sh new file mode 100644 index 000000000..97f19187a --- /dev/null +++ b/scripts/function.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +#input:[10023,2323,3434] +#output:10023 2323 3434 +list_to_string(){ +ports_list=$* +sub_s1=`echo $ports_list | sed 's/ //g'` +sub_s2=${sub_s1//,/ } +sub_s3=${sub_s2#*[} +sub_s4=${sub_s3%]*} +ports_array=$sub_s4 +} +remove_space(){ + value=$* + result=`echo $value | sed 's/ //g'` +} \ No newline at end of file diff --git a/scripts/init_pwd.sh b/scripts/init_pwd.sh new file mode 100644 index 000000000..dfe02a959 --- /dev/null +++ b/scripts/init_pwd.sh @@ -0,0 +1,11 @@ +source ../.env +echo "your user is:$USER" +echo "your password is:$PASSWORD" +echo "your minio endPoint is:$MINIO_ENDPOINT" + +sed -i "/^\([[:space:]]*dbMysqlUserName: *\).*/s//\1$USER/;0,/\([[:space:]]*dbUserName: *\).*/s//\1 $USER/;/\([[:space:]]*accessKeyID: *\).*/s//\1$USER/;/\([[:space:]]*endpoint: *\).*/s//\1\"abc\"/;" ../config/usualConfig.yaml +sed -i "/^\([[:space:]]*dbMysqlPassword: *\).*/s//\1$PASSWORD/;/\([[:space:]]*dbPassword: *\).*/s//\1$PASSWORD/;/\([[:space:]]*secret: *\).*/s//\1$PASSWORD/;/\([[:space:]]*secretAccessKey: *\).*/s//\1$PASSWORD/;" ../config/usualConfig.yaml + +sed -i "/\([[:space:]]*endpoint: *\).*/s##\1$MINIO_ENDPOINT#;" ../config/usualConfig.yaml +sed -i "/\([[:space:]]*dbPassWord: *\).*/s//\1$PASSWORD/;" ../config/usualConfig.yaml +sed -i "/\([[:space:]]*secret: *\).*/s//\1$PASSWORD/;" ../docker-compose_cfg/config.yaml diff --git a/scripts/make-rules/common.mk b/scripts/make-rules/common.mk new file mode 100644 index 000000000..f65d62acf --- /dev/null +++ b/scripts/make-rules/common.mk @@ -0,0 +1,62 @@ +# Copyright © 2023 OpenIMSDK. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ============================================================================== +# Makefile helper functions for common tasks +# + + + + +# ============================================================================== +# Makefile helper functions for common tasks + +# Help information for the makefile package +define makehelp + @printf "\n\033[1mUsage: make ...\033[0m\n\n\\033[1mTargets:\\033[0m\n\n" + @sed -n 's/^##//p' $< | awk -F':' '{printf "\033[36m%-28s\033[0m %s\n", $$1, $$2}' | sed -e 's/^/ /' + @printf "\n\033[1m$$USAGE_OPTIONS\033[0m\n" +endef + +# Here are some examples of builds +define MAKEFILE_EXAMPLE +# make build BINS=imctl Only a single imctl binary is built. +# make -j $(nproc) all Run tidy gen add-copyright format lint cover build concurrently. +# make gen Generate all necessary files. +# make linux.arm64 imctl is compiled on arm64 platform. +# make verify-copyright Verify the license headers for all files. +# make install-deepcopy-gen Install deepcopy-gen tools if the license is missing. +# make build BINS=imctl V=1 DEBUG=1 Build debug binaries for only imctl. +# make build.multiarch PLATFORMS="linux_arm64 linux_amd64" V=1 Build binaries for both platforms. +endef +export MAKEFILE_EXAMPLE + +# Define all help functions @printf "\n\033[1mCurrent imctl version information: $(shell imctl version):\033[0m\n\n" +define makeallhelp + @printf "\n\033[1mMake example:\033[0m\n\n" + $(call MAKEFILE_EXAMPLE) + @printf "\n\033[1mAriables:\033[0m\n\n" + @echo " DEBUG: $(DEBUG)" + @echo " BINS: $(BINS)" + @echo " PLATFORMS: $(PLATFORMS)" + @echo " V: $(V)" +endef + +# Help information for other makefile packages +CUT_OFF?="---------------------------------------------------------------------------------" +HELP_NAME:=$(shell basename $(MAKEFILE_LIST)) +define smallhelp + @sed -n 's/^##//p' $< | awk -F':' '{printf "\033[36m%-35s\033[0m %s\n", $$1, $$2}' | sed -e 's/^/ /' + @echo $(CUT_OFF) +endef \ No newline at end of file diff --git a/scripts/make-rules/copyright.mk b/scripts/make-rules/copyright.mk new file mode 100644 index 000000000..00277ad48 --- /dev/null +++ b/scripts/make-rules/copyright.mk @@ -0,0 +1,59 @@ +# Copyright © 2023 OpenIMSDK. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ============================================================================== +# wget https://github.com/google/addlicense/releases/download/v1.0.0/addlicense_1.0.0_Linux_x86_64.tar.gz +# Makefile helper functions for copyright +# + +LICENSE_TEMPLATE ?= $(ROOT_DIR)/scripts/LICENSE_TEMPLATE + +# TODO: GOBIN -> TOOLS_DIR +# Questions about go mod instead of go path: https://github.com/kubernetes/kubernetes/issues/117181 +## copyright.verify: Validate boilerplate headers for assign files +.PHONY: copyright.verify +copyright.verify: tools.verify.addlicense + @echo "===========> Validate boilerplate headers for assign files starting in the $(ROOT_DIR) directory" + @$(GOBIN)/addlicense -v -check -ignore **/test/** -f $(LICENSE_TEMPLATE) $(CODE_DIRS) + @echo "===========> End of boilerplate headers check..." + +## copyright.add: Add the boilerplate headers for all files +.PHONY: copyright.add +copyright.add: tools.verify.addlicense + @echo "===========> Adding $(LICENSE_TEMPLATE) the boilerplate headers for all files" + @$(GOBIN)/addlicense -y $(shell date +"%Y") -v -c "Alibaba Group Holding Ltd." -f $(LICENSE_TEMPLATE) $(CODE_DIRS) + @echo "===========> End the copyright is added..." + +# Addlicense Flags: +# -c string +# copyright holder (default "Google LLC") +# -check +# check only mode: verify presence of license headers and exit with non-zero code if missing +# -f string +# license file +# -ignore value +# file patterns to ignore, for example: -ignore **/*.go -ignore vendor/** +# -l string +# license type: apache, bsd, mit, mpl (default "apache") +# -s Include SPDX identifier in license header. Set -s=only to only include SPDX identifier. +# -skip value +# [deprecated: see -ignore] file extensions to skip, for example: -skip rb -skip go +# -v verbose mode: print the name of the files that are modified or were skipped +# -y string +# copyright year(s) (default "2023") + +## copyright.help: Show copyright help +.PHONY: copyright.help +copyright.help: scripts/make-rules/copyright.mk + $(call smallhelp) \ No newline at end of file diff --git a/scripts/make-rules/dependencies.mk b/scripts/make-rules/dependencies.mk new file mode 100644 index 000000000..bd6568713 --- /dev/null +++ b/scripts/make-rules/dependencies.mk @@ -0,0 +1,17 @@ +# Copyright © 2023 OpenIMSDK. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ============================================================================== +# Makefile helper functions for dependencies +# \ No newline at end of file diff --git a/scripts/make-rules/gen.mk b/scripts/make-rules/gen.mk new file mode 100644 index 000000000..61489373b --- /dev/null +++ b/scripts/make-rules/gen.mk @@ -0,0 +1,19 @@ +# Copyright © 2023 OpenIMSDK. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ============================================================================== +# Makefile helper functions for generate necessary files and docs +# https://cloud.redhat.com/blog/kubernetes-deep-dive-code-generation-customresources +# ! The stock of code generated by `make gen` should be idempotent +# \ No newline at end of file diff --git a/scripts/make-rules/golang.mk b/scripts/make-rules/golang.mk new file mode 100644 index 000000000..d140e86f8 --- /dev/null +++ b/scripts/make-rules/golang.mk @@ -0,0 +1,17 @@ +# Copyright © 2023 OpenIMSDK. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ============================================================================== +# Build management helpers. These functions help to set, save and load the +# \ No newline at end of file diff --git a/scripts/make-rules/image.mk b/scripts/make-rules/image.mk new file mode 100644 index 000000000..0eb46137e --- /dev/null +++ b/scripts/make-rules/image.mk @@ -0,0 +1,21 @@ +# Copyright © 2023 OpenIMSDK. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ============================================================================== +# Makefile helper functions for docker image +# TODO: For the time being only used for compilation, it can be arm or amd, please do not delete it, it can be extended with new functions +# ============================================================================== +# Path: scripts/make-rules/image.mk +# docker registry: registry.example.com/namespace/image:tag as: registry.hub.docker.com/cubxxw/: +# \ No newline at end of file diff --git a/scripts/make-rules/tools.mk b/scripts/make-rules/tools.mk new file mode 100644 index 000000000..aea405ee6 --- /dev/null +++ b/scripts/make-rules/tools.mk @@ -0,0 +1,202 @@ +# Copyright © 2023 OpenIMSDK. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# ============================================================================== +# Makefile helper functions for tools(https://github.com/avelino/awesome-go) -> DIR: {TOOT_DIR}/tools | (go >= 1.19) +# Why download to the tools directory, thinking we might often switch Go versions using gvm. +# + +# sealer build use BUILD_TOOLS +BUILD_TOOLS ?= golangci-lint goimports addlicense deepcopy-gen conversion-gen ginkgo go-junit-report +# Code analysis tools +ANALYSIS_TOOLS = golangci-lint goimports golines go-callvis kube-score +# Code generation tools +GENERATION_TOOLS = deepcopy-gen conversion-gen protoc-gen-go cfssl rts codegen +# Testing tools +TEST_TOOLS = ginkgo go-junit-report gotests +# Version control tools +VERSION_CONTROL_TOOLS = addlicense go-gitlint git-chglog github-release gsemver +# Utility tools +UTILITY_TOOLS = go-mod-outdated mockgen gothanks richgo kubeconform +# All tools +ALL_TOOLS ?= $(ANALYSIS_TOOLS) $(GENERATION_TOOLS) $(TEST_TOOLS) $(VERSION_CONTROL_TOOLS) $(UTILITY_TOOLS) + +## tools.install: Install a must tools +.PHONY: tools.install +tools.install: $(addprefix tools.install., $(BUILD_TOOLS)) + +## tools.install-all: Install all tools +.PHONY: tools.install-all +tools.install-all: $(addprefix tools.install-all., $(ALL_TOOLS)) + +## tools.install.%: Install a single tool in $GOBIN/ +.PHONY: tools.install.% +tools.install.%: + @echo "===========> Installing $,The default installation path is $(GOBIN)/$*" + @$(MAKE) install.$* + +## tools.install-all.%: Parallelism install a single tool in ./tools/* +.PHONY: tools.install-all.% +tools.install-all.%: + @echo "===========> Installing $,The default installation path is $(TOOLS_DIR)/$*" + @$(MAKE) -j $(nproc) install.$* + +## tools.verify.%: Check if a tool is installed and install it +.PHONY: tools.verify.% +tools.verify.%: + @echo "===========> Verifying $* is installed" + @if [ ! -f $(TOOLS_DIR)/$* ]; then GOBIN=$(TOOLS_DIR) $(MAKE) tools.install.$*; fi + @echo "===========> $* is install in $(TOOLS_DIR)/$*" + +.PHONY: +## install.golangci-lint: Install golangci-lint +install.golangci-lint: + @$(GO) install github.com/golangci/golangci-lint/cmd/golangci-lint@latest + +## install.goimports: Install goimports, used to format go source files +.PHONY: install.goimports +install.goimports: + @$(GO) install golang.org/x/tools/cmd/goimports@latest + +# Actions path: https://github.com/sealerio/sealer/tree/main/.github/workflows/go.yml#L37-L50 +## install.addlicense: Install addlicense, used to add license header to source files +.PHONY: install.addlicense +install.addlicense: + @$(GO) install github.com/google/addlicense@latest + +## install.deepcopy-gen: Install deepcopy-gen, used to generate deep copy functions +.PHONY: install.deepcopy-gen +install.deepcopy-gen: + @$(GO) install k8s.io/code-generator/cmd/deepcopy-gen@latest + +## install.conversion-gen: Install conversion-gen, used to generate conversion functions +.PHONY: install.conversion-gen +install.conversion-gen: + @$(GO) install k8s.io/code-generator/cmd/conversion-gen@latest + +## install.ginkgo: Install ginkgo to run a single test or set of tests +.PHONY: install.ginkgo +install.ginkgo: + @$(GO) install github.com/onsi/ginkgo/ginkgo@v1.16.2 + +## install.go-junit-report: Install go-junit-report, used to convert go test output to junit xml +.PHONY: install.go-junit-report +install.go-junit-report: + @$(GO) install github.com/jstemmer/go-junit-report@latest + +# ============================================================================== +# Tools that might be used include go gvm +# + +## install.kube-score: Install kube-score, used to check kubernetes yaml files +.PHONY: install.kube-score +install.kube-score: + @$(GO) install github.com/zegl/kube-score/cmd/kube-score@latest + +## install.kubeconform: Install kubeconform, used to check kubernetes yaml files +.PHONY: install.kubeconform +install.kubeconform: + @$(GO) install github.com/yannh/kubeconform/cmd/kubeconform@latest + +## Install go-gitlint: Install go-gitlint, used to check git commit message +.PHONY: install.go-gitlint +install.go-gitlint: + @$(GO) install github.com/marmotedu/go-gitlint/cmd/go-gitlint@latest + +## install.gsemver: Install gsemver, used to generate semver +.PHONY: install.gsemver +install.gsemver: + @$(GO) install github.com/arnaud-deprez/gsemver@latest + +## install.git-chglog: Install git-chglog, used to generate changelog +.PHONY: install.git-chglog +install.git-chglog: + @$(GO) install github.com/git-chglog/git-chglog/cmd/git-chglog@latest + +## install.github-release: Install github-release, used to create github release +.PHONY: install.github-release +install.github-release: + @$(GO) install github.com/github-release/github-release@latest + +## install.gvm: Install gvm, gvm is a Go version manager, built on top of the official go tool. +.PHONY: install.gvm +install.gvm: + @echo "===========> Installing gvm,The default installation path is ~/.gvm/scripts/gvm" + @bash < <(curl -s -S -L https://raw.gitee.com/moovweb/gvm/master/binscripts/gvm-installer) + @$(shell source /root/.gvm/scripts/gvm) + +## install.golines: Install golines, used to format long lines +.PHONY: install.golines +install.golines: + @$(GO) install github.com/segmentio/golines@latest + +## install.go-mod-outdated: Install go-mod-outdated, used to check outdated dependencies +.PHONY: install.go-mod-outdated +install.go-mod-outdated: + @$(GO) install github.com/psampaz/go-mod-outdated@latest + +## install.mockgen: Install mockgen, used to generate mock functions +.PHONY: install.mockgen +install.mockgen: + @$(GO) install github.com/golang/mock/mockgen@latest + +## install.gotests: Install gotests, used to generate test functions +.PHONY: install.gotests +install.gotests: + @$(GO) install github.com/cweill/gotests/gotests@latest + +## install.protoc-gen-go: Install protoc-gen-go, used to generate go source files from protobuf files +.PHONY: install.protoc-gen-go +install.protoc-gen-go: + @$(GO) install github.com/golang/protobuf/protoc-gen-go@latest + +## install.cfssl: Install cfssl, used to generate certificates +.PHONY: install.cfssl +install.cfssl: + @$(ROOT_DIR)/scripts/install/install.sh iam::install::install_cfssl + +## install.depth: Install depth, used to check dependency tree +.PHONY: install.depth +install.depth: + @$(GO) install github.com/KyleBanks/depth/cmd/depth@latest + +## install.go-callvis: Install go-callvis, used to visualize call graph +.PHONY: install.go-callvis +install.go-callvis: + @$(GO) install github.com/ofabry/go-callvis@latest + +## install.gothanks: Install gothanks, used to thank go dependencies +.PHONY: install.gothanks +install.gothanks: + @$(GO) install github.com/psampaz/gothanks@latest + +## install.richgo: Install richgo +.PHONY: install.richgo +install.richgo: + @$(GO) install github.com/kyoh86/richgo@latest + +## install.rts: Install rts +.PHONY: install.rts +install.rts: + @$(GO) install github.com/galeone/rts/cmd/rts@latest + +## install.codegen: Install code generator, used to generate code +.PHONY: install.codegen +install.codegen: + @$(GO) install ${ROOT_DIR}/tools/codegen/codegen.go + +## tools.help: Display help information about the tools package +.PHONY: tools.help +tools.help: scripts/make-rules/tools.mk + $(call smallhelp) diff --git a/scripts/mongo-init.sh b/scripts/mongo-init.sh new file mode 100644 index 000000000..3d1faa60b --- /dev/null +++ b/scripts/mongo-init.sh @@ -0,0 +1,12 @@ +mongo -- "$MONGO_INITDB_DATABASE" <>../logs/openIM.log 2>&1 & +done + +#Check launched service process +sleep 3 +check=$(ps aux | grep -w ./${msg_gateway_name} | grep -v grep | wc -l) +allPorts="" +if [ $check -ge 1 ]; then + allNewPid=$(ps aux | grep -w ./${msg_gateway_name} | grep -v grep | awk '{print $2}') + for i in $allNewPid; do + ports=$(netstat -netulp | grep -w ${i} | awk '{print $4}' | awk -F '[:]' '{print $NF}') + allPorts=${allPorts}"$ports " + done + echo -e ${SKY_BLUE_PREFIX}"SERVICE START SUCCESS"${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"SERVICE_NAME: "${COLOR_SUFFIX}${YELLOW_PREFIX}${msg_gateway_name}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"PID: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allNewPid}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"LISTENING_PORT: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allPorts}${COLOR_SUFFIX} +else + echo -e ${YELLOW_PREFIX}${msg_gateway_name}${COLOR_SUFFIX}${RED_PREFIX}"SERVICE START ERROR, PLEASE CHECK openIM.log"${COLOR_SUFFIX} +fi diff --git a/scripts/msg_transfer_start.sh b/scripts/msg_transfer_start.sh new file mode 100755 index 000000000..746cf3342 --- /dev/null +++ b/scripts/msg_transfer_start.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +#Include shell font styles and some basic information +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh + +list1=$(cat $config_path | grep messageTransferPrometheusPort | awk -F '[:]' '{print $NF}') +list_to_string $list1 +prome_ports=($ports_array) + + +#Check if the service exists +#If it is exists,kill this process +check=`ps aux | grep -w ./${msg_transfer_name} | grep -v grep| wc -l` +if [ $check -ge 1 ] +then +oldPid=`ps aux | grep -w ./${msg_transfer_name} | grep -v grep|awk '{print $2}'` + kill -9 $oldPid +fi +#Waiting port recycling +sleep 1 + +cd ${msg_transfer_binary_root} +for ((i = 0; i < ${msg_transfer_service_num}; i++)); do + prome_port=${prome_ports[$i]} + cmd="nohup ./${msg_transfer_name}" + if [ $prome_port != "" ]; then + cmd="$cmd -prometheus_port $prome_port" + fi + $cmd >>../logs/openIM.log 2>&1 & +done + +#Check launched service process +check=`ps aux | grep -w ./${msg_transfer_name} | grep -v grep| wc -l` +if [ $check -ge 1 ] +then +newPid=`ps aux | grep -w ./${msg_transfer_name} | grep -v grep|awk '{print $2}'` +allPorts="" + echo -e ${SKY_BLUE_PREFIX}"SERVICE START SUCCESS "${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"SERVICE_NAME: "${COLOR_SUFFIX}${YELLOW_PREFIX}${msg_transfer_name}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"PID: "${COLOR_SUFFIX}${YELLOW_PREFIX}${newPid}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"LISTENING_PORT: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allPorts}${COLOR_SUFFIX} +else + echo -e ${YELLOW_PREFIX}${msg_transfer_name}${COLOR_SUFFIX}${RED_PREFIX}"SERVICE START ERROR, PLEASE CHECK openIM.log"${COLOR_SUFFIX} +fi diff --git a/scripts/path_info.cfg b/scripts/path_info.cfg new file mode 100644 index 000000000..4c77b4ec5 --- /dev/null +++ b/scripts/path_info.cfg @@ -0,0 +1,88 @@ +#Don't put the space between "=" +msg_gateway_name="open_im_msg_gateway" +msg_gateway_binary_root="../bin/" +msg_gateway_source_root="../cmd/open_im_msg_gateway/" + +msg_name="open_im_msg" +msg_binary_root="../bin/" +msg_source_root="../cmd/rpc/open_im_msg/" + +push_name="open_im_push" +push_binary_root="../bin/" +push_source_root="../cmd/open_im_push/" + + + +msg_transfer_name="open_im_msg_transfer" +msg_transfer_binary_root="../bin/" +msg_transfer_source_root="../cmd/open_im_msg_transfer/" +msg_transfer_service_num=4 + + +sdk_server_name="open_im_sdk_server" +sdk_server_binary_root="../bin/" +sdk_server_source_root="../cmd/Open-IM-SDK-Core/" + +demo_server_name="open_im_demo" +demo_server_binary_root="../bin/" +demo_server_source_root="../cmd/open_im_demo/" + +cron_task_name="open_im_cron_task" +cron_task_binary_root="../bin/" +cron_task_source_root="../cmd/open_im_cron_task/" + + +#Global configuration file default dir +config_path="../config/config.yaml" + +#servicefile dir path +service_source_root=( + #api service file + ../cmd/open_im_api/ + ../cmd/open_im_cms_api/ + #rpc service file + ../cmd/rpc/open_im_user/ + ../cmd/rpc/open_im_friend/ + ../cmd/rpc/open_im_group/ + ../cmd/rpc/open_im_auth/ + ../cmd/rpc/open_im_admin_cms/ + ../cmd/rpc/open_im_office/ + ../cmd/rpc/open_im_organization/ + ../cmd/rpc/open_im_conversation/ + ../cmd/rpc/open_im_cache/ + ../cmd/open_im_cron_task + ${msg_gateway_source_root} + ${msg_transfer_source_root} + ${msg_source_root} + ${push_source_root} + ${sdk_server_source_root} + ${demo_server_source_root} +) +#service filename +service_names=( + #api service filename + open_im_api + open_im_cms_api + #rpc service filename + open_im_user + open_im_friend + open_im_group + open_im_auth + open_im_admin_cms + open_im_office + open_im_organization + open_im_conversation + open_im_cache + open_im_cron_task + ${msg_gateway_name} + ${msg_transfer_name} + ${msg_name} + ${push_name} + ${sdk_server_name} + ${demo_server_name} +) +goos=linux +goarch=amd64 + + + diff --git a/scripts/push_start.sh b/scripts/push_start.sh new file mode 100644 index 000000000..cbaffe7be --- /dev/null +++ b/scripts/push_start.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +#Include shell font styles and some basic information +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh + + + +list1=$(cat $config_path | grep openImPushPort | awk -F '[:]' '{print $NF}') +list2=$(cat $config_path | grep pushPrometheusPort | awk -F '[:]' '{print $NF}') +list_to_string $list1 +rpc_ports=($ports_array) +list_to_string $list2 +prome_ports=($ports_array) + +#Check if the service exists +#If it is exists,kill this process +check=$(ps aux | grep -w ./${push_name} | grep -v grep | wc -l) +if [ $check -ge 1 ]; then + oldPid=$(ps aux | grep -w ./${push_name} | grep -v grep | awk '{print $2}') + kill -9 $oldPid +fi +#Waiting port recycling +sleep 1 +cd ${push_binary_root} + +for ((i = 0; i < ${#rpc_ports[@]}; i++)); do + nohup ./${push_name} -port ${rpc_ports[$i]} -prometheus_port ${prome_ports[$i]} >>../logs/openIM.log 2>&1 & +done + +sleep 3 +#Check launched service process +check=$(ps aux | grep -w ./${push_name} | grep -v grep | wc -l) +if [ $check -ge 1 ]; then + newPid=$(ps aux | grep -w ./${push_name} | grep -v grep | awk '{print $2}') + ports=$(netstat -netulp | grep -w ${newPid} | awk '{print $4}' | awk -F '[:]' '{print $NF}') + allPorts="" + + for i in $ports; do + allPorts=${allPorts}"$i " + done + echo -e ${SKY_BLUE_PREFIX}"SERVICE START SUCCESS "${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"SERVICE_NAME: "${COLOR_SUFFIX}${YELLOW_PREFIX}${push_name}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"PID: "${COLOR_SUFFIX}${YELLOW_PREFIX}${newPid}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"LISTENING_PORT: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allPorts}${COLOR_SUFFIX} +else + echo -e ${YELLOW_PREFIX}${push_name}${COLOR_SUFFIX}${RED_PREFIX}"SERVICE START ERROR, PLEASE CHECK openIM.log"${COLOR_SUFFIX} +fi diff --git a/scripts/sdk_svr_start.sh b/scripts/sdk_svr_start.sh new file mode 100644 index 000000000..115ceff82 --- /dev/null +++ b/scripts/sdk_svr_start.sh @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +#Include shell font styles and some basic information +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh +ulimit -n 200000 + +ws_address=$(cat $config_path | grep openImWsAddress | awk -F '[ ]' '{print $NF}') +api_address=$(cat $config_path | grep openImApiAddress | awk -F '[ ]' '{print $NF}') +list3=$(cat $config_path | grep openImSdkWsPort | awk -F '[:]' '{print $NF}') +logLevel=$(cat $config_path | grep remainLogLevel | awk -F '[:]' '{print $NF}') +list_to_string $list3 +sdk_ws_ports=($ports_array) + + + +#Check if the service exists +#If it is exists,kill this process +check=$(ps aux | grep -w ./${sdk_server_name} | grep -v grep | wc -l) +if [ $check -ge 1 ]; then + oldPid=$(ps aux | grep -w ./${sdk_server_name} | grep -v grep | awk '{print $2}') + kill -9 ${oldPid} +fi +#Waiting port recycling +sleep 1 +cd ${sdk_server_binary_root} + nohup ./${sdk_server_name} -openIM_ws_address ${ws_address} -sdk_ws_port ${sdk_ws_ports[0]} -openIM_api_address ${api_address} -openIM_log_level ${logLevel} >>../logs/openIM.log 2>&1 & + +#Check launched service process +sleep 3 +check=$(ps aux | grep -w ./${sdk_server_name} | grep -v grep | wc -l) +allPorts="" +if [ $check -ge 1 ]; then + allNewPid=$(ps aux | grep -w ./${sdk_server_name} | grep -v grep | awk '{print $2}') + for i in $allNewPid; do + ports=$(netstat -netulp | grep -w ${i} | awk '{print $4}' | awk -F '[:]' '{print $NF}') + allPorts=${allPorts}"$ports " + done + echo -e ${SKY_BLUE_PREFIX}"SERVICE START SUCCESS "${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"SERVICE_NAME: "${COLOR_SUFFIX}${YELLOW_PREFIX}${sdk_server_name}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"PID: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allNewPid}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"LISTENING_PORT: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allPorts}${COLOR_SUFFIX} +else + echo -e ${YELLOW_PREFIX}${sdk_server_name}${COLOR_SUFFIX}${RED_PREFIX}"SERVICE START ERROR PLEASE CHECK openIM.log"${COLOR_SUFFIX} +fi diff --git a/scripts/start_all.sh b/scripts/start_all.sh new file mode 100644 index 000000000..4a5f7d65e --- /dev/null +++ b/scripts/start_all.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +#fixme This script is the total startup script +#fixme The full name of the shell script that needs to be started is placed in the need_to_start_server_shell array + +#fixme Put the shell script name here +need_to_start_server_shell=( + start_rpc_service.sh + push_start.sh + msg_transfer_start.sh + sdk_svr_start.sh + msg_gateway_start.sh + demo_svr_start.sh + start_cron.sh +) +time=`date +"%Y-%m-%d %H:%M:%S"` +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========server start time:${time}===========">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & +echo "==========================================================">>../logs/openIM.log 2>&1 & + +for i in ${need_to_start_server_shell[*]}; do + chmod +x $i + ./$i + if [ $? -ne 0 ]; then + exit -1 + fi +done diff --git a/scripts/start_cron.sh b/scripts/start_cron.sh new file mode 100644 index 000000000..9c33478de --- /dev/null +++ b/scripts/start_cron.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +#Include shell font styles and some basic information +source ./style_info.cfg +source ./path_info.cfg + + + +#Check if the service exists +#If it is exists,kill this process +check=`ps aux | grep -w ./${cron_task_name} | grep -v grep| wc -l` +if [ $check -ge 1 ] +then +oldPid=`ps aux | grep -w ./${cron_task_name} | grep -v grep|awk '{print $2}'` + kill -9 $oldPid +fi +#Waiting port recycling +sleep 1 + +cd ${cron_task_binary_root} +#for ((i = 0; i < ${cron_task_service_num}; i++)); do + nohup ./${cron_task_name} >>../logs/openIM.log 2>&1 & +#done + +#Check launched service process +check=`ps aux | grep -w ./${cron_task_name} | grep -v grep| wc -l` +if [ $check -ge 1 ] +then +newPid=`ps aux | grep -w ./${cron_task_name} | grep -v grep|awk '{print $2}'` +allPorts="" + echo -e ${SKY_BLUE_PREFIX}"SERVICE START SUCCESS "${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"SERVICE_NAME: "${COLOR_SUFFIX}${YELLOW_PREFIX}${cron_task_name}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"PID: "${COLOR_SUFFIX}${YELLOW_PREFIX}${newPid}${COLOR_SUFFIX} + echo -e ${SKY_BLUE_PREFIX}"LISTENING_PORT: "${COLOR_SUFFIX}${YELLOW_PREFIX}${allPorts}${COLOR_SUFFIX} +else + echo -e ${YELLOW_PREFIX}${cron_task_name}${COLOR_SUFFIX}${RED_PREFIX}"SERVICE START ERROR, PLEASE CHECK openIM.log"${COLOR_SUFFIX} +fi diff --git a/scripts/start_rpc_service.sh b/scripts/start_rpc_service.sh new file mode 100644 index 000000000..8abfde5ed --- /dev/null +++ b/scripts/start_rpc_service.sh @@ -0,0 +1,95 @@ +#!/usr/bin/env bash + +source ./style_info.cfg +source ./path_info.cfg +source ./function.sh + +#service filename +service_filename=( + #api + open_im_api + open_im_cms_api + #rpc + open_im_user + open_im_friend + open_im_group + open_im_auth + open_im_admin_cms + ${msg_name} + open_im_office + open_im_organization + open_im_conversation + open_im_cache +) + +#service config port name +service_port_name=( + #api port name + openImApiPort + openImCmsApiPort + #rpc port name + openImUserPort + openImFriendPort + openImGroupPort + openImAuthPort + openImAdminCmsPort + openImMessagePort + openImOfficePort + openImOrganizationPort + openImConversationPort + openImCachePort +) + +service_prometheus_port_name=( + #api port name + openImApiPort + openImCmsApiPort + #rpc port name + userPrometheusPort + friendPrometheusPort + groupPrometheusPort + authPrometheusPort + adminCmsPrometheusPort + messagePrometheusPort + officePrometheusPort + organizationPrometheusPort + conversationPrometheusPort + cachePrometheusPort +) + +for ((i = 0; i < ${#service_filename[*]}; i++)); do + #Check whether the service exists + service_name="ps -aux |grep -w ${service_filename[$i]} |grep -v grep" + count="${service_name}| wc -l" + + if [ $(eval ${count}) -gt 0 ]; then + pid="${service_name}| awk '{print \$2}'" + echo "${service_filename[$i]} service has been started,pid:$(eval $pid)" + echo "killing the service ${service_filename[$i]} pid:$(eval $pid)" + #kill the service that existed + kill -9 $(eval $pid) + sleep 0.5 + fi + cd ../bin + #Get the rpc port in the configuration file + portList=$(cat $config_path | grep ${service_port_name[$i]} | awk -F '[:]' '{print $NF}') + list_to_string ${portList} + service_ports=($ports_array) + + portList2=$(cat $config_path | grep ${service_prometheus_port_name[$i]} | awk -F '[:]' '{print $NF}') + list_to_string $portList2 + prome_ports=($ports_array) + #Start related rpc services based on the number of ports + for ((j = 0; j < ${#service_ports[*]}; j++)); do + #Start the service in the background + cmd="./${service_filename[$i]} -port ${service_ports[$j]} -prometheus_port ${prome_ports[$j]}" + if [ $i -eq 0 -o $i -eq 1 ]; then + cmd="./${service_filename[$i]} -port ${service_ports[$j]}" + fi + echo $cmd + nohup $cmd >>../logs/openIM.log 2>&1 & + sleep 1 + pid="netstat -ntlp|grep $j |awk '{printf \$7}'|cut -d/ -f1" + echo -e "${GREEN_PREFIX}${service_filename[$i]} start success,port number:${service_ports[$j]} pid:$(eval $pid)$COLOR_SUFFIX" + done +done diff --git a/scripts/stop_all.sh b/scripts/stop_all.sh new file mode 100644 index 000000000..2e1e119c1 --- /dev/null +++ b/scripts/stop_all.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +#fixme This script is to stop the service + +source ./style_info.cfg +source ./path_info.cfg + + +for i in ${service_names[*]}; do + #Check whether the service exists + name="ps -aux |grep -w $i |grep -v grep" + count="${name}| wc -l" + if [ $(eval ${count}) -gt 0 ]; then + pid="${name}| awk '{print \$2}'" + echo -e "${SKY_BLUE_PREFIX}Killing service:$i pid:$(eval $pid)${COLOR_SUFFIX}" + #kill the service that existed + kill -9 $(eval $pid) + echo -e "${SKY_BLUE_PREFIX}service:$i was killed ${COLOR_SUFFIX}" + fi +done diff --git a/scripts/style_info.cfg b/scripts/style_info.cfg new file mode 100644 index 000000000..ff28dcb88 --- /dev/null +++ b/scripts/style_info.cfg @@ -0,0 +1,9 @@ +#Shell font formatting information +COLOR_SUFFIX="\033[0m" +BLACK_PREFIX="\033[30m" +RED_PREFIX="\033[31m" +GREEN_PREFIX="\033[32m" +YELLOW_PREFIX="\033[33m" +BLUE_PREFIX="\033[34m" +PURPLE_PREFIX="\033[35m" +SKY_BLUE_PREFIX="\033[36m" diff --git a/scripts/win_build_all_service.cmd b/scripts/win_build_all_service.cmd new file mode 100644 index 000000000..9ec7313ae --- /dev/null +++ b/scripts/win_build_all_service.cmd @@ -0,0 +1,22 @@ +SET ROOT=%cd% +mkdir %ROOT%\..\bin\ +cd ..\cmd\open_im_api\ && go build -ldflags="-w -s" && move open_im_api.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_cms_api\ && go build -ldflags="-w -s" && move open_im_cms_api.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_demo\ && go build -ldflags="-w -s" && move open_im_demo.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_msg_gateway\ && go build -ldflags="-w -s" && move open_im_msg_gateway.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_msg_transfer\ && go build -ldflags="-w -s" && move open_im_msg_transfer.exe %ROOT%\..\bin\ +cd ..\..\cmd\open_im_push\ && go build -ldflags="-w -s" && move open_im_push.exe %ROOT%\..\bin\ +cd ..\..\cmd\rpc\open_im_admin_cms\&& go build -ldflags="-w -s" && move open_im_admin_cms.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_auth\&& go build -ldflags="-w -s" && move open_im_auth.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_cache\&& go build -ldflags="-w -s" && move open_im_cache.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_conversation\&& go build -ldflags="-w -s" && move open_im_conversation.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_friend\&& go build -ldflags="-w -s" && move open_im_friend.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_group\&& go build -ldflags="-w -s" && move open_im_group.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_message_cms\&& go build -ldflags="-w -s" && move open_im_message_cms.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_msg\&& go build -ldflags="-w -s" && move open_im_msg.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_office\&& go build -ldflags="-w -s" && move open_im_office.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_organization\&& go build -ldflags="-w -s" && move open_im_organization.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_statistics\&& go build -ldflags="-w -s" && move open_im_statistics.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\rpc\open_im_user\&& go build -ldflags="-w -s" && move open_im_user.exe %ROOT%\..\bin\ +cd ..\..\..\cmd\Open-IM-SDK-Core\ws_wrapper\cmd\&& go build -ldflags="-w -s" open_im_sdk_server.go && move open_im_sdk_server.exe %ROOT%\..\bin\ +cd %ROOT% \ No newline at end of file diff --git a/scripts/win_start_all_service.cmd b/scripts/win_start_all_service.cmd new file mode 100644 index 000000000..e7b1c819e --- /dev/null +++ b/scripts/win_start_all_service.cmd @@ -0,0 +1,22 @@ +SET ROOT=%cd% +cd %ROOT%\..\bin\ +start cmd /C .\open_im_api.exe -port 10002 +start cmd /C .\open_im_cms_api.exe -port 10006 +start cmd /C .\open_im_user.exe -port 10110 +start cmd /C .\open_im_friend.exe -port 10120 +start cmd /C .\open_im_group.exe -port 10150 +start cmd /C .\open_im_auth.exe -port 10160 +start cmd /C .\open_im_admin_cms.exe -port 10200 +start cmd /C .\open_im_message_cms.exe -port 10190 +start cmd /C .\open_im_statistics.exe -port 10180 +start cmd /C .\open_im_msg.exe -port 10130 +start cmd /C .\open_im_office.exe -port 10210 +start cmd /C .\open_im_organization.exe -port 10220 +start cmd /C .\open_im_conversation.exe -port 10230 +start cmd /C .\open_im_cache.exe -port 10240 +start cmd /C .\open_im_push.exe -port 10170 +start cmd /C .\open_im_msg_transfer.exe +start cmd /C .\open_im_sdk_server.exe -openIM_api_port 10002 -openIM_ws_port 10001 -sdk_ws_port 10003 -openIM_log_level 6 +start cmd /C .\open_im_msg_gateway.exe -rpc_port 10140 -ws_port 10001 +start cmd /C .\open_im_demo.exe -port 10004 +cd %ROOT% \ No newline at end of file