Adding syslog script
authorBrian Flowers <git-admn@bsflowers.net>
Fri, 19 Mar 2021 00:18:02 +0000 (20:18 -0400)
committerBrian Flowers <git-admn@bsflowers.net>
Fri, 19 Mar 2021 00:18:02 +0000 (20:18 -0400)
syslog.sh [new file with mode: 0644]

diff --git a/syslog.sh b/syslog.sh
new file mode 100644 (file)
index 0000000..64480b0
--- /dev/null
+++ b/syslog.sh
@@ -0,0 +1,104 @@
+#!/bin/bash
+INFLUX_HOST="http://cns-master:8086"
+HOSTNAME="`hostname`"
+LOCATION="bedroom"
+AUDIODEVICE=hw:1
+
+echo "Started at: `date`"
+
+log_audio()
+{
+  if [ ! -z "`ps -ef | grep rec | grep -v grep`" ]; then
+    return
+  fi
+  now="`date +%s`"
+  end="`expr $now + 55`"
+  export AUDIODRIVER=alsa
+  export AUDIODEV=${AUDIODEVICE}
+  while [ "`date +%s`" -le "$end" ]; do
+    line="`rec -n stat trim 0 1 2>&1 | awk '{print $1"_"$2 $3}' | grep ":" | tail -15 | tr '\n' ',' | sed 's/,$//g' | tr ':' '='`"
+    curl --silent -i -XPOST ${INFLUX_HOST}/write?db=motion --data-binary "motion,hostname=${HOSTNAME},type=audio $line" >/dev/null
+  done
+  echo "AUDIO DONE"
+  date +%s
+}
+
+log_bme()
+{
+#set -x
+  bme="`/home/pi/monitoring/bme680 | awk \
+    'BEGIN { count=0; tmp=0; prs=0; hum=0; voc=0; }
+     /^[0-9]/ {count++; tmp+=$4; prs+=$7; hum+=$10; vocs+=$13} 
+     END {print "temperature="(tmp/count)",pressure="(prs/count)",humidity="(hum/count)",vocs="(vocs/count)}' |\
+     sed 's/temperature=0.00,//g'`"
+
+  echo "bme: $bme"
+  curl --silent -i -XPOST ${INFLUX_HOST}/write?db=environment --data-binary "atmosphere,hostname=${HOSTNAME},sensor=bme680 $bme" 2>/dev/null
+}
+
+log_scd()
+{
+  ppmco2="`cat /run/sensors/scd30/last | grep CO2 | cut -d' ' -f2`"
+  temp="`cat /run/sensors/scd30/last | grep degC | cut -d' ' -f2`"
+  hum="`cat /run/sensors/scd30/last | grep humidity | cut -d' ' -f2`"
+
+  curl --silent -i -XPOST ${INFLUX_HOST}/write?db=environment --data-binary "atmosphere,hostname=${HOSTNAME},sensor=scd30 ppmco2=$ppmco2,temperature=$temp,humidity=$hum" 2>/dev/null
+}
+
+log_df()
+{
+  df | sed 's/%//g' | awk '{if(a[1] == "") {for(i=1;i<NF;i++){a[i]=$i}} else {printf a[NF]"="$NF",";for(i=1;i<NF;i++){printf a[i]"="$i","} print ""}}' | sed 's/,$//g' | sed 's/\(,[^,]*\),/\1 /' | while read line; do
+    curl --silent -i -XPOST ${INFLUX_HOST}/write?db=sysmon --data-binary "sysmon,hostname=${HOSTNAME},$line" >/dev/null
+  done
+}
+
+log_vm()
+{
+  line="`vmstat | grep -v '-' | awk '{if(a[1] == "") {for(i=1;i<NF;i++){a[i]=$i}} else {for(i=1;i<NF;i++){printf a[i]"="$i","} print ""}}' | sed 's/,$//g'`"
+  mempct="`free | grep "^Mem" | awk '{printf "%0.2f",(\$3/\$2)}'`"
+  curl --silent -i -XPOST ${INFLUX_HOST}/write?db=sysmon --data-binary "sysmon,hostname=${HOSTNAME} $line,mempct=$mempct" >/dev/null
+}
+
+log_sess()
+{
+  who -uH | \
+    sed 's/\([0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]\) /\1@/g' | \
+    awk 'BEGIN{a[1]=""}{if(a[1]==""){for(i=1;i<=NF;i++){a[i]=$i}}else{for(i=1;i<=NF;i++){printf a[i] "=" $i ","}}print"\n"}' | \
+    grep -v '^$' | sed 's/IDLE=[.]/IDLE=0:0/g' | \
+    sed 's/COMMENT=(/COMMENT=/g' | sed 's/),$//g' | \
+    sed 's/IDLE=old/IDLE=99:00/g' | sed 's/TIME=/LOGIN_TIME=/g' | \
+    while read line; do
+      # Convert time field to seconds
+      time="`echo "$line" | tr '@' ' ' | cut -d',' -f3 | cut -d'=' -f2`"
+      seconds=`date -d "$time" +%s`
+      line="`echo "$line" | sed "s/TIME=[^,]*,/TIME=${seconds},/g"`"
+
+      # Quote string fields
+      #line="`echo "$line" | sed 's/=\([^,]*\),/="\1",/g' | sed 's/="\([0-9.-]*\)",/=\1,/g'`"
+
+      # Make EVERYTHING a tag so we can group on it...
+      line="`echo "$line" | sed 's/\(.*\)\(LOGIN_TIME=[^,]*\),\(.*\)/\1\3 \2/g'`"
+
+      curl --silent -i -XPOST ${INFLUX_HOST}/write?db=sysmon --data-binary "users,hostname=${HOSTNAME},$line" >/dev/null
+  done
+}
+
+log_pir()
+{
+  pir=`cat /sys/class/gpio/gpio12/value`
+  curl --silent -i -XPOST ${INFLUX_HOST}/write?db=security --data-binary "sensors,type=pir,location=${LOCATION},hostname=${HOSTNAME} value=$pir"
+}
+
+start=`date +%s`
+stop="`expr $start + 50`"
+date +%s
+log_audio &
+while [ "`date +%s`" -lt "$stop" ]; do
+  log_scd
+  log_bme
+  log_df
+  log_vm
+  log_sess
+  log_pir
+  sleep 25
+done