#!/bin/bash

## execute command: ./ram_monitor.sh [mode] [target file]
### mode 0 - display static

#Running Mode
Mode=$1

#转储文件
TARGET_FILE=$2

#文件上传
MAC=$(cat /sys/class/net/eth0/address | tr -d ':')
DATE_CMD="date +%Y%m%d%H%M%S"
SERVER_IP="ubuntu@123.207.253.115:/home/ubuntu/html/Logs/RamMonitor/"
PUSH_CMD="sshpass -p 'Zwj123456' scp -o StrictHostKeyChecking=no /home/root/sdcard/dmesg.log $SERVER_IP/$MAC-$($DATE_CMD)-dmesg.log"
LAST_TRIGGER_DATE=""

if [ ! -z "$TARGET_FILE" ];then
	if [ ! -f "$TARGET_FILE" ];then
		echo "$TARGET_FILE isn't exist , touch it"
		touch $TARGET_FILE
	fi
fi

# 定义要查找的进程名或字段
PROCESS_NAME="gree_hc_*"

#周期
INTERVAL=30

# 使用ps命令获取指定字段的进程号
# 这里假设你要查找的进程名是唯一的，如果有多个进程，脚本会处理所有匹配的进程
PIDS=$(ps | grep "$PROCESS_NAME" | grep -v grep | awk '{print $1}')
APPS=$(ps | grep "$PROCESS_NAME" | grep -v grep | awk '{print $5}')


RAM_ALL=$(free)

CPU_ALL=$(top -n 1 | awk 'NR==2')
OUTPUT=""

#function
##上传文件至服务器
uploadFileFunc() {
        fileName="/home/root/$MAC-$($DATE_CMD)-ramRecord.tar.gz"
        echo "package $fileName "
        tar -czf  $fileName /home/root/ram_record.log
        sshpass -p 'Zwj123456' scp -o StrictHostKeyChecking=no $fileName  $SERVER_IP
        echo "upload done!"
        #rm $fileName
        rm /home/root/*-ramRecord.tar.gz
}




#正式程序
## 检查是否找到了进程
if [ -z "$PIDS" ]; then
	echo "没有找到进程: $PROCESS_NAME"
	exit 1
fi

clear


while true; do
if [ "$Mode" == "0" ];then
	tput cup 0 0
fi
PIDS=$(ps | grep "$PROCESS_NAME" | grep -v grep | awk '{print $1}')
APPS=$(ps | grep "$PROCESS_NAME" | grep -v grep | awk '{print $5}')
PIDS_ARRAY=($PIDS)
APPS_ARRAY=($APPS)
RAM_ALL=$(free)
OUTPUT=""
TOP=$(top -b -d 1 -n 5)
LAST_LINE=$(echo "$TOP" | grep -n "Mem:" | tail -1 | awk '{print $1}'| awk -F':' '{print $1}')
TOP=$(echo "$TOP" | sed -n "$LAST_LINE,\$p")
CPU_ALL=$(echo "$TOP"| awk 'NR==2')

echo ">>>>>>>>>"
echo "time is $(date)"

#CPU
echo "CPU监控结果："
echo "$CPU_ALL"

OUTPUT+="CPU监控结果：\n"
OUTPUT+="$CPU_ALL\n"

#RAM
echo "RAM监控结果："
echo "$RAM_ALL"

OUTPUT+="RAM监控结果：\n"
OUTPUT+="$RAM_ALL\n"

# 遍历每个进程号
#for PID in $PIDS; do
echo "进程监控："
for i in "${!APPS_ARRAY[@]}"; do
	ECHO_ITEM=$(echo "处理进程: ${APPS_ARRAY[i]} , 处理进程号: ${PIDS_ARRAY[i]}")
	echo "$ECHO_ITEM"
	OUTPUT+="$ECHO_ITEM\n"
	CPU_ITEM=$(echo "$TOP" | grep ${APPS_ARRAY[i]} | grep -v grep | awk '{print $7}')
	echo "CPU : $CPU_ITEM"
	ECHO_ITEM=$(echo "CPU : $CPU_ITEM")
	OUTPUT+="$ECHO_ITEM\n"
# 假设你要打开的文件路径是 /proc/$PID/fd/1（标准输出）
# 你可以根据需要修改文件路径
	FILE_PATH="/proc/${PIDS_ARRAY[i]}/status"

# 检查文件是否存在
	if [ -e "$FILE_PATH" ]; then
#		echo "打印文件内容: $FILE_PATH"
		ECHO_ITEM=$(cat "$FILE_PATH"|grep VmRSS)
		echo "$ECHO_ITEM"
		OUTPUT+="$ECHO_ITEM\n"
		echo ""
	else
		echo "文件不存在: $FILE_PATH"
	fi
done

if [ ! -z "$TARGET_FILE" ];then
	echo ">>>>>>>>>" >> $TARGET_FILE
	echo "time is $(date)" >> $TARGET_FILE
	echo -e "$OUTPUT" >> $TARGET_FILE
fi

if [ "$Mode" == "0" ];then
	tput ed
fi

#文件定时上传
# 获取当前日期和时间
    CURRENT_DATE=$(date '+%Y-%m-%d')
    CURRENT_HOUR=$(date '+%H')
    CURRENT_MINUTE=$(date '+%M')

    # 检查是否是9点左右（9:00-9:10之间）且当天未触发过
    if [[ "$CURRENT_HOUR" == "09" && "$CURRENT_MINUTE" -le 10 && "$LAST_TRIGGER_DATE" != "$CURRENT_DATE" ]]; then
        uploadFileFunc
	echo "文件上传完成"
        LAST_TRIGGER_DATE="$CURRENT_DATE"
    fi

sleep "$INTERVAL"

done

