Difference between revisions of "Home Assistant"
From My Wiki
| (4 intermediate revisions by the same user not shown) | |||
| Line 11: | Line 11: | ||
apiurl="sensor.$apihost" | apiurl="sensor.$apihost" | ||
| − | disk="/dev/ | + | diskname="vda" |
| + | disk="/dev/$diskname" | ||
srvuptime=`uptime -p` | srvuptime=`uptime -p` | ||
srvmem=`free -m |grep "Mem"|awk '{print ($4+$7)"M"}'` | srvmem=`free -m |grep "Mem"|awk '{print ($4+$7)"M"}'` | ||
srvprocs=`ps -ef|wc -l` | srvprocs=`ps -ef|wc -l` | ||
| − | diskuse=`df -h $disk |grep "/$"|awk '{print $5}'` | + | diskuse=`df -h $disk |grep "/$"|awk '{print $5}'|tr -d '%'` |
| − | diskio=`df -ih $disk |grep "/$"|awk '{print $5}'` | + | diskio=`df -ih $disk |grep "/$"|awk '{print $5}'|tr -d '%'` |
netcons=`netstat -ant|grep ESTA|wc -l` | netcons=`netstat -ant|grep ESTA|wc -l` | ||
| − | mailqu=`exim -bpc` | + | mailqu=`/usr/sbin/exim -bpc` |
| + | srvaccounts=`cat /etc/domainusers |wc -l` | ||
srvtmp=`cat /proc/loadavg` | srvtmp=`cat /proc/loadavg` | ||
read -r -a srvla <<< "$srvtmp" | read -r -a srvla <<< "$srvtmp" | ||
| − | apidata=" -d '{\"state\":\"$srvuptime\", \"attributes\": {\"friendly_name\":\"$apihost\",\"uptime\":\"$srvuptime\",\"freemem\":\"$srvmem\",\"load\":${srvla[0]},\"procs\":$srvprocs,\"disk_use_$ | + | apidata=" -d '{\"state\":\"$srvuptime\", \"attributes\": {\"friendly_name\":\"$apihost\",\"uptime\":\"$srvuptime\",\"freemem\":\"$srvmem\",\"load\":${srvla[0]},\"procs\":$srvprocs,\"disk_use_$diskname\":\"$diskuse\",\"disk_io_use_$diskname\":\"$diskio\",\"connections\":$netcons,\"mail_queue\":$mailqu,\"accounts\":$srvaccounts}}'" |
bash -c "curl $apiaddr$apiurl $apiheaders -X POST $apidata -k" | bash -c "curl $apiaddr$apiurl $apiheaders -X POST $apidata -k" | ||
| + | |||
| + | daybefore=`date +%d/%b/%Y --date="last day"` | ||
| + | IFS=$'\n'; for i in `cat /etc/domainusers`; do | ||
| + | IFS=":"; read -r -a arr <<< "$i" | ||
| + | domacc=${arr[0]} | ||
| + | domdom=`echo ${arr[1]}|xargs` | ||
| + | domtotal=`zgrep "$daybefore" /home/$domacc/logs/* 2>/dev/null |wc -l` | ||
| + | domres=`zgrep "$daybefore" /home/$domacc/logs/* 2>/dev/null |cut -d"[" -f2-|awk '{print $6}'|sort|uniq -c|sort -h|awk '{print $2 " " $1}'` | ||
| + | apiurl="sensor.${apihost}_${domacc}" | ||
| + | sensordata="'{\"state\":\"$domdom\", \"attributes\": {\"friendly_name\":\"$domdom\",\"total_yesterday\":\"$domtotal\"" | ||
| + | |||
| + | IFS=$'\n'; for q in $domres; do | ||
| + | IFS=" "; read -r -a res <<< "$q" | ||
| + | sensordata="${sensordata},\"responsecode_${res[0]}\":${res[1]}" | ||
| + | done | ||
| + | sensordata="${sensordata}}}'" | ||
| + | apidata=" -d $sensordata" | ||
| + | bash -c "curl $apiaddr$apiurl $apiheaders -X POST $apidata -k" | ||
| + | done | ||
Latest revision as of 18:18, 21 June 2020
Send VPS statistics to HA
Update token ($apitoken), address ($apiaddr) and disk device ($disk)
#!/bin/bash apitoken="xxxxxx" apiaddr="https://ha.myhome:8123/api/states/" apiheaders=" -H \"Authorization: Bearer $apitoken\" -H \"Content-Type: application/json\" " apihost=`hostname|sed "s/\./_/g"` apiurl="sensor.$apihost" diskname="vda" disk="/dev/$diskname" srvuptime=`uptime -p` srvmem=`free -m |grep "Mem"|awk '{print ($4+$7)"M"}'` srvprocs=`ps -ef|wc -l` diskuse=`df -h $disk |grep "/$"|awk '{print $5}'|tr -d '%'` diskio=`df -ih $disk |grep "/$"|awk '{print $5}'|tr -d '%'` netcons=`netstat -ant|grep ESTA|wc -l` mailqu=`/usr/sbin/exim -bpc` srvaccounts=`cat /etc/domainusers |wc -l` srvtmp=`cat /proc/loadavg` read -r -a srvla <<< "$srvtmp" apidata=" -d '{\"state\":\"$srvuptime\", \"attributes\": {\"friendly_name\":\"$apihost\",\"uptime\":\"$srvuptime\",\"freemem\":\"$srvmem\",\"load\":${srvla[0]},\"procs\":$srvprocs,\"disk_use_$diskname\":\"$diskuse\",\"disk_io_use_$diskname\":\"$diskio\",\"connections\":$netcons,\"mail_queue\":$mailqu,\"accounts\":$srvaccounts}}'" bash -c "curl $apiaddr$apiurl $apiheaders -X POST $apidata -k" daybefore=`date +%d/%b/%Y --date="last day"` IFS=$'\n'; for i in `cat /etc/domainusers`; do IFS=":"; read -r -a arr <<< "$i" domacc=${arr[0]} domdom=`echo ${arr[1]}|xargs` domtotal=`zgrep "$daybefore" /home/$domacc/logs/* 2>/dev/null |wc -l` domres=`zgrep "$daybefore" /home/$domacc/logs/* 2>/dev/null |cut -d"[" -f2-|awk '{print $6}'|sort|uniq -c|sort -h|awk '{print $2 " " $1}'` apiurl="sensor.${apihost}_${domacc}" sensordata="'{\"state\":\"$domdom\", \"attributes\": {\"friendly_name\":\"$domdom\",\"total_yesterday\":\"$domtotal\"" IFS=$'\n'; for q in $domres; do IFS=" "; read -r -a res <<< "$q" sensordata="${sensordata},\"responsecode_${res[0]}\":${res[1]}" done sensordata="${sensordata}}}'" apidata=" -d $sensordata" bash -c "curl $apiaddr$apiurl $apiheaders -X POST $apidata -k" done