Difference between revisions of "Home Assistant"

From My Wiki
Jump to: navigation, search
 
(5 intermediate revisions by the same user not shown)
Line 11: Line 11:
 
  apiurl="sensor.$apihost"
 
  apiurl="sensor.$apihost"
 
   
 
   
  disk="/dev/vda"
+
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_$disk\":\"$diskuse\",\"disk_io_use_$disk\":\"$diskio\",\"connections\":$netcons,\"mail_queue\":$mailqu}}'"
+
  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