#!/usr/bin/env bash # Copyright © 2023 OpenIM. 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. # Common utilities, variables and checks for all build scripts. set -o errexit set +o nounset set -o pipefail # Sourced flag COMMON_SOURCED=true # The root of the build/dist directory OPENIM_ROOT=$(cd "$(dirname "${BASH_SOURCE[0]}")"/../.. && pwd -P) source "${OPENIM_ROOT}/scripts/lib/init.sh" # Make sure the environment is only called via common to avoid too much nesting source "${OPENIM_ROOT}/scripts/install/environment.sh" # This function returns a list of Prometheus ports for various services # based on the provided configuration. Each service has its own dedicated # port for monitoring purposes. openim::common::prometheus_port() { # Declare an array to hold all the Prometheus ports for different services local targets=( ${USER_PROM_PORT} # Prometheus port for user service ${FRIEND_PROM_PORT} # Prometheus port for friend service ${MESSAGE_PROM_PORT} # Prometheus port for message service ${MSG_GATEWAY_PROM_PORT} # Prometheus port for message gateway service ${GROUP_PROM_PORT} # Prometheus port for group service ${AUTH_PROM_PORT} # Prometheus port for authentication service ${PUSH_PROM_PORT} # Prometheus port for push notification service ${CONVERSATION_PROM_PORT} # Prometheus port for conversation service ${RTC_PROM_PORT} # Prometheus port for real-time communication service ${THIRD_PROM_PORT} # Prometheus port for third-party integrations service ${MSG_TRANSFER_PROM_PORT} # Prometheus port for message transfer service ) # Print the list of ports echo "${targets[@]}" } IFS=" " read -ra OPENIM_PROM_PORT_TARGETS <<< "$(openim::common::prometheus_port)" readonly OPENIM_PROM_PORT_TARGETS readonly OPENIM_PROM_PORT_LISTARIES=("${OPENIM_PROM_PORT_TARGETS[@]##*/}") openim::common::service_name() { local targets=( openim-user openim-friend openim-msg openim-msg-gateway openim-group openim-auth openim-push openim-conversation openim-third # openim-msg-transfer # api openim-api openim-ws ) echo "${targets[@]}" } IFS=" " read -ra OPENIM_SERVER_NAME_TARGETS <<< "$(openim::common::service_name)" readonly OPENIM_SERVER_NAME_TARGETS # Storing all the defined ports in an array for easy management and access. # This array consolidates the port numbers for all the services defined above. openim::common::service_port() { local targets=( ${OPENIM_USER_PORT} # User service ${OPENIM_FRIEND_PORT} # Friend service ${OPENIM_MESSAGE_PORT} # Message service ${OPENIM_MESSAGE_GATEWAY_PORT} # Message gateway ${OPENIM_GROUP_PORT} # Group service ${OPENIM_AUTH_PORT} # Authorization service ${OPENIM_PUSH_PORT} # Push service ${OPENIM_CONVERSATION_PORT} # Conversation service ${OPENIM_THIRD_PORT} # Third-party service # API PORT ${API_OPENIM_PORT} # API service ${OPENIM_WS_PORT} # WebSocket service ) echo "${targets[@]}" } IFS=" " read -ra OPENIM_SERVER_PORT_TARGETS <<< "$(openim::common::service_port)" readonly OPENIM_SERVER_PORT_TARGETS readonly OPENIM_SERVER_PORT_LISTARIES=("${OPENIM_SERVER_PORT_TARGETS[@]##*/}") openim::common::dependency_name() { local targets=( mysql redis zookeeper kafka mongodb minio ) echo "${targets[@]}" } IFS=" " read -ra OPENIM_DEPENDENCY_TARGETS <<< "$(openim::common::dependency_name)" readonly OPENIM_DEPENDENCY_TARGETS # This function returns a list of ports for various services # - zookeeper # - kafka # - mysql # - mongodb # - redis # - minio openim::common::dependency_port() { local targets=( ${MYSQL_PORT} # MySQL port ${REDIS_PORT} # Redis port ${ZOOKEEPER_PORT} # Zookeeper port ${KAFKA_PORT} # Kafka port ${MONGO_PORT} # MongoDB port ${MINIO_PORT} # MinIO port ) echo "${targets[@]}" } IFS=" " read -ra OPENIM_DEPENDENCY_PORT_TARGETS <<< "$(openim::common::dependency_port)" readonly OPENIM_DEPENDENCY_PORT_TARGETS readonly OPENIM_DEPENDENCY_PORT_LISTARIES=("${OPENIM_DEPENDENCY_PORT_TARGETS[@]##*/}") # Execute commands that require root permission without entering a password function openim::common::sudo { echo ${LINUX_PASSWORD} | sudo -S $1 }