blob: 23be903854269e96f49c6ab40805b6aed741734b [file] [log] [blame]
#
# 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"