#!/bin/bash
#保存日志目录
LOGPATh=/tmp/log
DATE=$(date +"%F %T")
#保存日志时长
last_date=`date -d "1 day ago" +"%FT%T"`

if [ ! -d $LOGPATh ]; then
    mkdir -p $LOGPATh
fi

function log_save() {
    docker ps | awk NR!=1'{print $1,$NF}' | awk -F "." '{print $1}' | while read ID NAME
    do
    timeout 20s docker logs $ID --since "$last_date" > $LOGPATh/$NAME.log 2>&1
    if [ $? == 124 ]; then
       echo "请求超时!"         
       exit
    fi
    done

}

function log_exted_save() {
    docker service ls | awk NR!=1'{print $2 }' | cut -d "_" -f 2 | while read Name
    do
    RQID=$(docker ps -a | grep "_$Name." | grep -i exited | head -n 1 | awk '{print $1}')
    timeout 20s docker logs $RQID --since  "$last_date" > $LOGPATh/$Name_exitd.log 2>&1 
    if [ $? == 124 ]; then
       echo "请求超时!"
       exit
    fi
    done   
}

function men_stats() {
    mem_total=$(free -m | grep Mem| awk -F " " '{print $2}')
    mem_free=$(free -m | grep "Mem" | awk '{print $4}')
    mem_use=$(free -m | grep Mem| awk -F " " '{print $2-$4-$6}')
    men_use_persent=$( awk -v t=$mem_total -v u=$mem_use 'BEGIN{print int(u/t*100)"%"}')
    cat >> $LOGPATh/system.log 2>&1  << EOF
内存使用情况：
时间：${DATE}
内存总数: ${mem_total}MB
可用内存：${mem_free}MB
内存使用数: ${mem_use}MB
内存使用率: ${men_use_persent}
EOF
    if [ $? == 0 ]; then
    echo "内存占用TOP10:" >> $LOGPATh/system.log 
    ps -e --sort -rss -o comm,args,rss,pmem,pid,ppid | head -n 11  >> $LOGPATh/system.log 2>&1   
    echo "-----------------------------" >> $LOGPATh/system.log
    fi
}

function cpu_stats() {
    load=`uptime | awk -F 'load average: ' '{print $2}'`
    disk_bi=`vmstat | awk '{if(NR==3)print $9 }'`
    disk_bo=`vmstat | awk '{if(NR==3)print $10 }'`
    free=`vmstat | awk '{if(NR==3)print $15"%"}'`
    user=`vmstat | awk '{if(NR==3)print $13"%"}'`
    sys=`vmstat | awk '{if(NR==3)print $14"%"}'`
    iowait=`vmstat | awk '{if(NR==3)print $16"%"}'`
    use_persent=`vmstat | awk '{if(NR==3)print 100-$15"%"}'`
    cat >> $LOGPATh/system.log 2>&1  <<EOF
cpu使用情况：
时间：${DATE}
系统负载情况：${load}
磁盘读：${disk_bi}
磁盘写：${disk_bo}
cpu空闲：${free}
非系统使用cpu：${user}
系统使用cpu：${sys}
等待I/O消耗cpu：${iowait}
cpu使用率：${use_persent}
EOF
   if [ $? == 0 ]; then
   echo "CPU占用TOP10:"  >> $LOGPATh/system.log
   ps -e --sort=-%cpu -o comm,args,pcpu,pid,ppid | head -n 11 >> $LOGPATh/system.log 2>&1
   echo "-----------------------------" >> $LOGPATh/system.log
   fi
} 

function disk_stats() {
    root_disk=`df -h | grep "root" | awk '{print $5}'`
    docker_root_disk=`df -h | grep overlay | head -n 1 | awk '{print $5}'`
    cat  >> $LOGPATh/system.log 2>&1  <<EOF
磁盘使用情况：
根目录：${root_disk}
docker家目录：${docker_root_disk}
EOF
  
}

log_save
log_exted_save
men_stats
cpu_stats
disk_stats
