| # | |
| # Licensed to the Apache Software Foundation (ASF) under one | |
| # or more contributor license agreements. See the NOTICE file | |
| # distributed with this work for additional information | |
| # regarding copyright ownership. The ASF licenses this file | |
| # to you 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. | |
| # | |
| #!/bin/bash | |
| echo --------------------- | |
| echo Start collecting info | |
| echo --------------------- | |
| if [ -z "${IOTDB_HOME}" ]; then | |
| export IOTDB_HOME="`dirname "$0"`/../.." | |
| fi | |
| COLLECTION_FILE="collection.txt" | |
| COLLECTION_DIR="iotdb-info" | |
| HELP="Usage: $0 [-h <ip>] [-p <port>] [-u <username>] [-pw <password>] [-jp <jdk_path>] [-dd <data_dir>]" | |
| user_param="root" | |
| passwd_param="root" | |
| host_param="127.0.0.1" | |
| port_param="6667" | |
| jdk_path_param="" | |
| data_dir_param="data/datanode/data" | |
| get_property_value() { | |
| local file="$1" # Properties path | |
| local key="$2" # key name | |
| local value="" | |
| if [ -f "$file" ]; then | |
| local line=$(grep "^$key=" "$file") | |
| value="${line#*=}" | |
| fi | |
| echo "$value" | |
| } | |
| convert_unit() { | |
| local size=$1 | |
| local target_unit=$2 | |
| local converted_size=$size | |
| if [ "$target_unit" == "M" ]; then | |
| converted_size=$(awk "BEGIN {printf \"%.2f\", $size / 1024}") | |
| elif [ "$target_unit" == "G" ]; then | |
| converted_size=$(awk "BEGIN {printf \"%.2f\", $size / (1024 * 1024)}") | |
| elif [ "$target_unit" == "T" ]; then | |
| converted_size=$(awk "BEGIN {printf \"%.2f\", $size / (1024 * 1024 * 1024)}") | |
| fi | |
| echo "$converted_size" | |
| } | |
| choose_unit() { | |
| local size=$1 | |
| local unit="" | |
| if [ "$size" -lt 1024 ]; then | |
| unit="K" | |
| elif [ "$size" -lt 1048576 ]; then | |
| unit="M" | |
| elif [ "$size" -lt 1073741824 ]; then | |
| unit="G" | |
| else | |
| unit="T" | |
| fi | |
| echo "$unit" | |
| } | |
| if [ -f "$IOTDB_HOME/conf/iotdb-system.properties" ]; then | |
| properties_file="$IOTDB_HOME/conf/iotdb-system.properties" | |
| else | |
| properties_file="$IOTDB_HOME/conf/iotdb-datanode.properties" | |
| fi | |
| data_dir_key="dn_data_dirs" | |
| value=$(get_property_value "$properties_file" "$data_dir_key") | |
| if [ -n "$value" ]; then | |
| data_dir_param=$value | |
| fi | |
| while true; do | |
| case "$1" in | |
| -u) | |
| user_param="$2" | |
| shift 2 | |
| ;; | |
| -pw) | |
| passwd_param="$2" | |
| shift 2 | |
| ;; | |
| -h) | |
| host_param="$2" | |
| shift 2 | |
| ;; | |
| -p) | |
| port_param="$2" | |
| shift 2 | |
| ;; | |
| -jp) | |
| jdk_path_param="$2" | |
| shift 2 | |
| ;; | |
| -dd) | |
| data_dir_param="$2" | |
| shift 2 | |
| ;; | |
| "") | |
| break | |
| ;; | |
| *) | |
| echo "Unrecognized options:$1" | |
| echo "${HELP}" | |
| exit 1 | |
| ;; | |
| esac | |
| done | |
| timestamp=$(date +"%Y%m%d%H%M%S") | |
| zip_name="collection-$timestamp.zip" | |
| zip_directory="$IOTDB_HOME/" | |
| files_to_zip="${COLLECTION_FILE} $IOTDB_HOME/conf" | |
| rm -rf $IOTDB_HOME/$COLLECTION_DIR | |
| mkdir -p $IOTDB_HOME/$COLLECTION_DIR/logs | |
| { | |
| echo '===================== System Info =====================' | |
| case "$(uname)" in | |
| Linux) | |
| read -r system_memory unused_memory <<< "$(free | awk '/Mem:/{print $2, $4}')" | |
| system_cpu_cores=$(grep -c 'processor' /proc/cpuinfo) | |
| system_cpu_name=$(grep 'model name' /proc/cpuinfo | head -n 1 | awk -F ':' '{$1=$1}1') | |
| system_os_info=$(get_property_value /etc/os-release PRETTY_NAME) | |
| ;; | |
| FreeBSD) | |
| read -r system_memory_in_bytes unused_memory <<< "$(sysctl -n hw.realmem vm.stats.vm.v_inactive_count)" | |
| system_memory=$((system_memory_in_bytes / 1024)) | |
| unused_memory=$(sysctl -n vm.stats.vm.v_inactive_count) | |
| system_cpu_cores=$(sysctl -n hw.ncpu) | |
| system_cpu_name=$(sysctl -n hw.model) | |
| system_os_info=$(uname -r) | |
| ;; | |
| SunOS) | |
| read -r system_memory unused_memory <<< "$(prtconf | awk '/Memory size:/ {print $3}') $(kstat -p unix:0:system_pages:pagestotal -s unix:0:system_pages:pagesfree | awk '{print $2}')" | |
| system_cpu_cores=$(psrinfo | wc -l) | |
| system_cpu_name=$(psrinfo -pv | grep "The" | awk -F':' '{print $2}' | awk '{$1=$1}1' | head -n 1) | |
| system_os_info=$(uname -v) | |
| ;; | |
| Darwin) | |
| read -r system_memory_in_bytes unused_memory <<< "$(sysctl -n hw.memsize) $(vm_stat | awk '/Pages free/ {print $3 * 4}')" | |
| system_memory=$((system_memory_in_bytes / 1024)) | |
| system_cpu_cores=$(sysctl -n hw.ncpu) | |
| system_cpu_name=$(sysctl -n machdep.cpu.brand_string) | |
| system_os_info=$(sw_vers -productName) | |
| ;; | |
| *) | |
| system_memory="Unknown" | |
| unused_memory="Unknown" | |
| system_cpu_cores="Unknown" | |
| system_cpu_name="Unknown" | |
| system_os_info="Unknown" | |
| ;; | |
| esac | |
| echo "Operating System: $system_os_info" | |
| echo "CPU Name: $system_cpu_name" | |
| echo "CPU Cores: $system_cpu_cores" | |
| total_unit=$(choose_unit "$system_memory") | |
| echo "System Memory Total: $(convert_unit "$system_memory" "$total_unit") $total_unit" | |
| unuse_unit=$(choose_unit "$unused_memory") | |
| echo "Unused Memory: $(convert_unit "$unused_memory" "$unuse_unit") $unuse_unit" | |
| } >> "$COLLECTION_FILE" | |
| { | |
| echo '===================== JDK Version=====================' | |
| if [ -n "$jdk_path_param" ]; then | |
| if [ -d "$jdk_path_param" ]; then | |
| $jdk_path_param/bin/java -version 2>&1 | |
| else | |
| echo "Invalid JDK path: $jdk_path_param" | |
| exit 1 | |
| fi | |
| else | |
| if [ -n "$JAVA_HOME" ]; then | |
| for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do | |
| if [ -x "$java" ]; then | |
| JAVA="$java" | |
| break | |
| fi | |
| done | |
| else | |
| JAVA=java | |
| fi | |
| if [ -z $JAVA ] ; then | |
| echo Unable to find java executable. Check JAVA_HOME and PATH environment variables. > /dev/stderr | |
| exit 1; | |
| fi | |
| java -version 2>&1 | |
| fi | |
| } >> "$COLLECTION_FILE" | |
| { | |
| echo '=================== Activation Info====================' | |
| if [ -d "$(dirname "$0")/$IOTDB_HOME/activation" ]; then | |
| if [ -f "$(dirname "$0")/$IOTDB_HOME/activation/license" ]; then | |
| echo "Active" | |
| else | |
| echo "Not active" | |
| fi | |
| else | |
| echo "Open source version" | |
| fi | |
| } >> "$COLLECTION_FILE" | |
| { | |
| if [[ -d "$IOTDB_HOME/logs/" ]]; then | |
| for file in $IOTDB_HOME/logs/*.log; do | |
| if [[ $file =~ \.log$ ]]; then | |
| cp "$file" "$IOTDB_HOME/$COLLECTION_DIR/logs" | |
| fi | |
| done | |
| else | |
| echo "Directory $IOTDB_HOME/logs/ does not exist." | |
| fi | |
| } | |
| calculate_directory_size() { | |
| local file_type="$1" | |
| local total_size=0 | |
| IFS=',' read -ra dirs <<< "$data_dir_param" | |
| for dir in "${dirs[@]}"; do | |
| if [[ $dir == /* ]]; then | |
| iotdb_data_dir="$dir/$file_type" | |
| else | |
| iotdb_data_dir="$IOTDB_HOME/$dir/$file_type" | |
| fi | |
| if [ -d "$iotdb_data_dir" ]; then | |
| local size=$(du -s "$iotdb_data_dir" | awk '{print $1}') | |
| total_size=$((total_size + size)) | |
| fi | |
| done | |
| echo "$total_size" | |
| } | |
| calculate_file_num() { | |
| local file_type="$1" | |
| local total_num=0 | |
| IFS=',' read -ra dirs <<< "$data_dir_param" | |
| for dir in "${dirs[@]}"; do | |
| if [[ $dir == /* ]]; then | |
| iotdb_data_dir="$dir/$file_type" | |
| else | |
| iotdb_data_dir="$IOTDB_HOME/$dir/$file_type" | |
| fi | |
| if [ -d "$iotdb_data_dir" ]; then | |
| local num=$(find "$iotdb_data_dir" -type f ! -name "*.tsfile.resource" | wc -l) | |
| total_num=$((total_num + num)) | |
| fi | |
| done | |
| echo "$total_num" | |
| } | |
| { | |
| echo '===================== TsFile Info=====================' | |
| sequence="sequence" | |
| unsequence="unsequence" | |
| echo "sequence(tsfile number): $(calculate_file_num "$sequence")" | |
| echo "unsequence(tsfile number): $(calculate_file_num "$unsequence")" | |
| total_size=$(calculate_directory_size "$sequence") | |
| unit=$(choose_unit "$total_size") | |
| total_size_in_unit=$(convert_unit "$total_size" "$unit") | |
| echo "sequence(tsfile size): $total_size_in_unit $unit" | |
| total_size=$(calculate_directory_size "$unsequence") | |
| unit=$(choose_unit "$total_size") | |
| total_size_in_unit=$(convert_unit "$total_size" "$unit") | |
| echo "unsequence(tsfile size): $total_size_in_unit $unit" | |
| } >> "$COLLECTION_FILE" | |
| execute_command_and_append_to_file() { | |
| local command=$1 | |
| { | |
| echo "=================== $command ====================" | |
| if [ -n "$jdk_path_param" ]; then | |
| export JAVA_HOME="$jdk_path_param";"$IOTDB_HOME"/sbin/start-cli.sh -h "$host_param" -p "$port_param" -u "$user_param" -pw "$passwd_param" -e "$command" | |
| else | |
| "$IOTDB_HOME"/sbin/start-cli.sh -h "$host_param" -p "$port_param" -u "$user_param" -pw "$passwd_param" -e "$command" | |
| fi | |
| } >> "$COLLECTION_FILE" | |
| } | |
| execute_command_and_append_to_file 'show version' | |
| execute_command_and_append_to_file 'show cluster details' | |
| execute_command_and_append_to_file 'show regions' | |
| execute_command_and_append_to_file 'show databases' | |
| execute_command_and_append_to_file 'count devices' | |
| execute_command_and_append_to_file 'count timeseries' | |
| mv $COLLECTION_FILE $IOTDB_HOME/$COLLECTION_DIR | |
| cp -r $IOTDB_HOME/conf $IOTDB_HOME/$COLLECTION_DIR | |
| zip -r "$IOTDB_HOME/$zip_name" $IOTDB_HOME/$COLLECTION_DIR | |
| echo "Program execution completed, file name is $zip_name" |