# hour_traffic.sh
#!/bin/bash
##### 记录每小时的流量 #####
# crontab 每小时执行
# 0 * * * * /bin/bash hour_traffic.sh 2>&1 >> err.log
# 定义日志文件和临时存储文件
TMP_HOUR="$HOME/traffic/.tmp_hour"
HOUR_LOG_FILE="$HOME/traffic/hour_traffic.log"

# 获取当前的 RX 和 TX 流量（以字节为单位）
INTERFACE="ens3"  # 替换为你需要监控的网络接口
RX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes)
TX_BYTES=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes)
TOTAL_BYTES=$((RX_BYTES + TX_BYTES))
# 判断.tmp_hour是否存在 或 是否为0
if [ ! -f "$TMP_HOUR" ] || [ "$(cat $TMP_HOUR)" -eq 0 ]; then
    # 如果不存在或为0，则获取当前流量，并写入.tmp_hour文件
    echo $TOTAL_BYTES > $TMP_HOUR
    echo "$(date +%Y%m%d%H) 0" >> $HOUR_LOG_FILE
    else
    # 如果.tmp_hour存在且不为0，则获取.tmp_hour文件中的流量，计算差值，更新.tmp_hour文件，差值写入log文件
    HOUR_BYTES=$(cat $TMP_HOUR)
    HOUR_DIFF=$((TOTAL_BYTES - HOUR_BYTES))
    echo $TOTAL_BYTES > $TMP_HOUR
    echo "$(date +%Y%m%d%H) $HOUR_DIFF" >> $HOUR_LOG_FILE
fi

##############################################
# day_traffic.sh
##### 记录每天的流量 #####
# crontab 每天凌晨0点执行,在执行完hour_traffic.sh后执行
# 1 0 * * * /bin/bash day_traffic.sh 2>&1 >> err.log
#!/bin/bash
# 定义日志文件和临时存储文件
DAY_LOG_FILE="$HOME/traffic/day_traffic.log"
TMP_HOUR="$HOME/traffic/.tmp_hour"
HOUR_LOG_FILE="$HOME/traffic/hour_traffic.log"

# 重置临时存储文件
echo 0 > $TMP_HOUR
# 累计HOUR_LOG_FILE中的流量
TOTAL_BYTES=$(awk '{sum+=$2} END {print sum}' $HOUR_LOG_FILE)
# 写入log文件
echo "$(date -d 'yesterday' +%Y%m%d) $TOTAL_BYTES" >> $DAY_LOG_FILE
# 归档HOUR_LOG_FILE
mv $HOUR_LOG_FILE $HOME/traffic/archive/hour_traffic_$(date -d "yesterday" +%Y%m%d).log

##################################################
# month_traffic.sh
##### 统计每月的流量 #####
# crontab 每月x日凌晨0点x执行,在执行完day_traffic.sh后执行
# 8 0 6 * * /bin/bash month_traffic.sh 2>&1 >> err.log
#!/bin/bash
MONTH_LOG_FILE="$HOME/traffic/month_traffic.log"
DAY_LOG_FILE="$HOME/traffic/day_traffic.log"
# 统计DAY_LOG_FILE
    TOTAL_BYTES=$(awk '{sum+=$2} END {print sum}' $DAY_LOG_FILE)
    # 写入log文件
    echo "$(date +%Y%m%d) $TOTAL_BYTES" >> $MONTH_LOG_FILE
    # 归档DAY_LOG_FILE
        mv $DAY_LOG_FILE $HOME/traffic/archive/day_traffic_$(date +%Y%m).log