#!/bin/bash
#
###############################################################################################
#
# Project : Beabloo - Device Checker
#
# Script : Takes screenshots
#
# Author : Fabien Bouquelet
# Date : 2010-09-30
# Last Modif : 2010-10-06
# Change Log : 2010-09-30 - First version
# : 2010-10-01 - Add some checks
# : 2010-10-04 - Change SSH Tunnel check + add start=12 in 2nd ol definition (Deprecated)
# - New style
# : 2010-10-05 - Multiple GW bug fix
# : 2010-10-06 - Better ss checks & sudo -n & xargs -q
# : 2017-03-22 - Use HTTPS for hotspotserver connections
#
# SUDO NEEDED FOR : /usr/bin/xrandr, /usr/java/bin/jps, /sbin/ss
#
# Copyright (C) 2008 - 2010 Beabloo. All rights reserved.
#
###############################################################################################
#
## VERSION
NAME=`echo "$0" | sed 's/.*\/\(.*\)\.sh/\1/' | sed 's/.*\/\(.*\)/\1/'`
SCRIPT_UNIX_TIME=`ls -lrt --full-time $0 | awk '{print $6,$7}' | cut -d"." -f1`
SCRIPT_TIMESTAMP=`date "+%y.%m.%d" -d"${SCRIPT_UNIX_TIME}"`
RELEASE="Beabloo ${NAME} v${SCRIPT_TIMESTAMP}"
# PRINT VERSION
# echo "${RELEASE}"
# --------------------------------------------------------------------------------------------
# Properties
# --------------------------------------------------------------------------------------------
# HTML COLORS
RED_HTML=""
GREEN_HTML=""
BLUE_HTML=""
YELLOW_HTML=""
ORANGE_HTML=""
NOCOLOR_HTML=""
HTML_STYLE="
"
# --------------------------------------------------------------------------------------------
# Functions
# --------------------------------------------------------------------------------------------
printHeader(){
echo "Content-type: text/html"
echo ""
echo ""
echo ""
echo ""
echo "Beabloo Device Checker"
echo "${HTML_STYLE}"
echo ""
echo ""
echo ""
echo "
"
# echo -e "${RELEASE} launched at: `date '+%H:%M:%S'`
CHECKS SUMMARY:
"
B_TIME=`date "+%s"`
}
addCheckMarkIcon(){
if ${1} ; then
# echo "
"
echo "${GREEN_HTML}[OK]${NOCOLOR_HTML}"
else
# echo "
"
echo "${RED_HTML}[KO]${NOCOLOR_HTML}"
fi
}
addHorizontalLine(){
# echo "
"
# echo "
"
# echo "
"
echo ""
}
printFooter(){
E_TIME=`date "+%s"`
ELAPSED_TIME=$((${E_TIME}-${B_TIME}))
echo -e "
"
echo -e "
"
#echo -e "
Check finished at: `date '+%H:%M:%S'` - Elapsed time: ${ELAPSED_TIME}secs"
echo -e ""
echo ""
}
# --------------------------------------------------------------------------------------------
# Checks Functions
# --------------------------------------------------------------------------------------------
getNumInterfaces(){
NUM_INTERFACES=`/sbin/ifconfig | egrep -v "^ |^$|^lo" | awk '{print $1}' | wc -l`
if [ ${NUM_INTERFACES} -lt 1 ] ; then
echo "NUM NET INT: ${NUM_INTERFACES} `addCheckMarkIcon false`
"
else
echo "NUM NET INT: ${NUM_INTERFACES} `addCheckMarkIcon true`
"
fi
}
getNetworkConfiguration(){
echo "NET INT:"
for INTERFACE in `/sbin/ifconfig | egrep -v "^ |^$|^lo" | awk '{print $1}'`; do
INTERFACE_INFO=`/sbin/ifconfig ${INTERFACE} | grep "inet "`
ADDRESS=`echo "${INTERFACE_INFO}" | cut -d ":" -f 2 | awk '{print $1}'`
# TEST IF LINK IS UP OR DOWN
if [ -z "${ADDRESS}" ] ; then
echo "- ${INTERFACE} DOWN `addCheckMarkIcon false`
"
else
NETWORK=`echo "${INTERFACE_INFO}" | cut -d ":" -f 3 | awk '{print $1}'`
NETMASK=`echo "${INTERFACE_INFO}" | cut -d ":" -f 4 | awk '{print $1}'`
FIRST_BYTES_IP=`echo "${ADDRESS}" | sed 's/^\(.*\..*\)\..*\..*/\1/'`
GATEWAY=`route -n | grep "^[0-9]" | grep UG | awk '{print $2}' | sort | uniq | grep -m 1 ${FIRST_BYTES_IP}`
echo "- ${INTERFACE} UP: `addCheckMarkIcon true`
- ip:${ADDRESS}/mask:${NETMASK}
net:${NETWORK}/gw:${GATEWAY}
"
if [ -n "${GATEWAY}" ] ; then
# PING GATEWAY
ping -c 1 -n -W 1 ${GATEWAY} > /dev/null 2>&1
STATUS=$?
if [ ${STATUS} -eq 0 ] ; then
echo "- GW ${GATEWAY} `addCheckMarkIcon true`
"
else
echo "- GW ${GATEWAY} `addCheckMarkIcon false`
"
fi
fi
fi
done
echo "
"
}
checkLocaldevice(){
ping -c 1 -n -W 1 localdevice.beabloo.com > /dev/null 2>&1
STATUS=$?
if [ ${STATUS} -eq 0 ] ; then
echo "LO `addCheckMarkIcon true`
"
else
echo "LO `addCheckMarkIcon false`
"
fi
ping -c 1 -n -W 1 screenserver.beabloo.com > /dev/null 2>&1
STATUS=$?
if [ ${STATUS} -eq 0 ] ; then
echo "SS `addCheckMarkIcon true`
"
else
echo "SS `addCheckMarkIcon false`
"
fi
}
checkDNS(){
NAMESERVERS=`cat /etc/resolv.conf | grep "^nameserver" | awk '{print $2}' | sed 's/^/\/' | sed 's/$/\<\/li\>/'`
echo "DNS: "
DNS_BEABLOO=`/usr/bin/dig www.beabloo.com | grep ^www.beabloo.com | awk '{print $5}'`
if [ -z "${DNS_BEABLOO}" ] ; then
echo "www DNS FAILED `addCheckMarkIcon false`
"
else
echo "www DNS SUCCESS `addCheckMarkIcon true`
"
fi
DNS_HOTSPOT_SERVER=`/usr/bin/dig hotspotserver.beabloo.com | grep ^hotspotserver.beabloo.com | awk '{print $5}'`
if [ -z "${DNS_HOTSPOT_SERVER}" ] ; then
echo "SYNC DNS FAILED `addCheckMarkIcon false`
"
else
echo "SYNC DNS SUCCESS `addCheckMarkIcon true`
"
fi
}
determineProxy(){
grep --silent "http.proxyEnabled=true" /opt/beabloo/data/conf/Global.properties && HTTPPROXYENABLE="true"
if ${HTTPPROXYENABLE} ; then
REMOTEPROXYHOST=`grep "^proxyhost=" /opt/beabloo/data/proxy/rabbit.conf | cut -d "=" -f 2`
if [ -n "${REMOTEPROXYHOST}" ] ; then
REMOTEPROXYPORT=`grep "^proxyport=" /opt/beabloo/data/proxy/rabbit.conf | cut -d "=" -f 2`
export http_proxy="http://${REMOTEPROXYHOST}:${REMOTEPROXYPORT}"
export https_proxy="http://${REMOTEPROXYHOST}:${REMOTEPROXYPORT}"
else
LOCALPROXYHOST=`grep "http.proxyHost" /opt/beabloo/data/conf/Global.properties | cut -d "=" -f 2`
LOCALPROXYPORT=`grep "http.proxyPort" /opt/beabloo/data/conf/Global.properties | cut -d "=" -f 2`
export http_proxy="http://${LOCALPROXYHOST}:${LOCALPROXYPORT}"
export https_proxy="http://${LOCALPROXYHOST}:${LOCALPROXYPORT}"
fi
fi
}
checkHTTP(){
if [ -n "${LOCALPROXYHOST}" ] ; then
THROUGH=""
else
THROUGH="THROUGH ${http_proxy}"
fi
/usr/bin/wget --user-agent=[HOTSPOT-${HOSTNAME}] --tries=1 --timeout=5 --spider --no-check-certificate -q -O /dev/null "http://www.beabloo.com"
STATUS=$?
if [ ${STATUS} -eq 0 ] ; then
echo "www `addCheckMarkIcon true`
"
else
echo "www `addCheckMarkIcon false`
"
fi
/usr/bin/wget --user-agent=[HOTSPOT-${HOSTNAME}] --tries=1 --timeout=5 --spider --no-check-certificate -q -O /dev/null "https://www.beabloo.com"
STATUS=$?
if [ ${STATUS} -eq 0 ] ; then
echo "SECURE `addCheckMarkIcon true`
"
else
echo "SECURE `addCheckMarkIcon false`
"
fi
/usr/bin/wget --user-agent=[HOTSPOT-${HOSTNAME}] --tries=1 --timeout=5 --spider --no-check-certificate -q -O /dev/null "https://hotspotserver.beabloo.com"
STATUS=$?
if [ ${STATUS} -eq 0 ] ; then
echo "SYNC `addCheckMarkIcon true`
"
else
echo "SYNC `addCheckMarkIcon false`
"
fi
}
checkRemote(){
REMOTEONDEMANDSERVER=`grep "REMOTEONDEMANDSERVERS" /opt/beabloo/data/conf/Global.properties | cut -d "=" -f 2 | cut -d "," -f 1`
REMOTEONDEMANDPORT=`grep "REMOTEONDEMANDPORT" /opt/beabloo/data/conf/Global.properties | cut -d "=" -f 2`
SOCKETS=`sudo -n ss -n -o state established "( dport = :${REMOTEONDEMANDPORT} )" | grep "${REMOTEONDEMANDSERVER}:${REMOTEONDEMANDPORT}" | wc -l`
if [ ${SOCKETS} -ge 1 ] ; then
echo "ROD `addCheckMarkIcon true`
"
else
echo "ROD `addCheckMarkIcon false`
"
fi
}
checkBluetooth(){
NUM_BLUETOOTH=`hcitool dev | grep hci | wc -l`
if [ ${NUM_BLUETOOTH} -lt 3 ] ; then
echo "BT (${NUM_BLUETOOTH}<3) `addCheckMarkIcon false`
"
else
echo "BT `addCheckMarkIcon true`
"
fi
}
getVGAController(){
VGA_CONTROLLER=`lspci | grep VGA | cut -d ":" -f 3 | awk '{print $1}'`
echo "VGA: ${VGA_CONTROLLER}
"
}
getScreenResolution(){
export DISPLAY=:0
echo "SCREENS STATUS:"
OLD_IFS="${IFS}"
export IFS='
'
for SCREEN_INFO in `sudo -n /usr/bin/xrandr -q | grep connected`; do
SCREEN_NAME=`echo "${SCREEN_INFO}" | awk '{print $1}'`
SCREEN_RESOLUTION=`echo "${SCREEN_INFO}" | awk '{print $3}' | cut -d "+" -f 1`
SCREEN_STATUS=`echo "${SCREEN_INFO}" | awk '{print $2}'`
if [ "${SCREEN_STATUS}" = "connected" ] ; then
X=`echo ${SCREEN_RESOLUTION} | cut -d x -f 1`
Y=`echo ${SCREEN_RESOLUTION} | cut -d x -f 2`
X_DIV_BY_16=$((${X}/16))
Y_DIV_BY_9=$((${Y}/9))
if [ ${X_DIV_BY_16} -eq ${Y_DIV_BY_9} ] ; then
echo "- ${SCREEN_NAME}: ${X}x${Y} `addCheckMarkIcon true`
"
else
echo "- ${SCREEN_NAME}: ${X}x${Y} `addCheckMarkIcon false`
"
fi
else
echo "- ${SCREEN_NAME} DISCONNECTED
"
fi
done
echo "
"
export IFS="${OLD_IFS}"
}
checkSSHTunnel(){
echo "ADMIN CONSOLE:"
HOTSPOT_ID=`echo ${HOSTNAME} | cut -d "-" -f 2`
SSH_TUNNEL=`ps aux | grep ssh | grep "${HOTSPOT_ID}:" | wc -l`
if [ ${SSH_TUNNEL} -eq 1 ] ; then
echo "- ADMIN CONSOLE `addCheckMarkIcon true`
"
else
echo "- ADMIN CONSOLE `addCheckMarkIcon false`
"
fi
SSH_ESTABLISHED_TUNNEL=`sudo -n ss -np -o state established '( dport = :ssh )' | grep ":22" | awk '{print $6}' | cut -d "," -f 2 | xargs -n 1 pstree -a | grep -m 1 "^ssh -v -n -N -T -i /opt/beabloo/keys/id_beabloo -R ${HOTSPOT_ID}:localhost:22 hotspotserver.beabloo.com" | wc -l`
if [ ${SSH_ESTABLISHED_TUNNEL} -eq 1 ] ; then
echo "- ADMIN CONSOLE ESTAB `addCheckMarkIcon true`
"
else
echo "- ADMIN CONSOLE ESTAB `addCheckMarkIcon false`
"
fi
echo "
"
}
checkWebAdminPort(){
WEB_ADMINISTRATIVE_PORT=`sudo -n ss -ln | grep "10.10.10.10:17777" | wc -l`
if [ ${WEB_ADMINISTRATIVE_PORT} -eq 1 ] ; then
echo "WEB ADMIN CONSOLE `addCheckMarkIcon true`
"
else
echo "WEB ADMIN CONSOLE `addCheckMarkIcon false`
"
fi
}
checkJavaProcesses(){
JAVA_PROCESSES_LIST=`sudo -n /usr/java/bin/jps -v`
TCPBRIDGES=`echo "${JAVA_PROCESSES_LIST}" | grep "BluetoothToTCPBridge" | wc -l`
if [ ${TCPBRIDGES} -ge 2 ] ; then
echo "${TCPBRIDGES} BT: (${TCPBRIDGES}>=2) `addCheckMarkIcon true`
"
else
echo "${TCPBRIDGES} BT: (${TCPBRIDGES}<2) `addCheckMarkIcon false`
"
fi
VIRAL=`echo "${JAVA_PROCESSES_LIST}" | grep "BeablooViralServer" | wc -l`
if [ ${VIRAL} -ge 1 ] ; then
echo "${VIRAL} VIRAL `addCheckMarkIcon true`
"
else
echo "${VIRAL} VIRAL `addCheckMarkIcon false`
"
fi
DEVICESERVER=`echo "${JAVA_PROCESSES_LIST}" | grep "BeablooDeviceServer" | wc -l`
if [ ${DEVICESERVER} -eq 1 ] ; then
echo "DS `addCheckMarkIcon true`
"
else
echo "DS `addCheckMarkIcon false`
"
fi
PROXY=`echo "${JAVA_PROCESSES_LIST}" | grep "BeablooProxy" | wc -l`
if [ ${PROXY} -eq 1 ] ; then
echo "LO PROXY `addCheckMarkIcon true`
"
else
echo "LO PROXY `addCheckMarkIcon false`
"
fi
}
checkHD(){
echo "HD PARTS:"
for PARTITION in `df | grep "^/dev" | awk '{print $1}'`; do
USED=`df | grep "^${PARTITION}" | awk '{print $5}' | cut -d "%" -f 1`
if [ ${USED} -gt 90 ] ; then
echo "- ${PARTITION}: ${USED}% `addCheckMarkIcon false`
"
else
echo "- ${PARTITION}: ${USED}% `addCheckMarkIcon true`
"
fi
done
echo "
"
}
getTemperature(){
TEMPERATURE_FILE=`find /proc/acpi -type f -name "temperature"`
if [ -n "${TEMPERATURE_FILE}" ] && [ -f ${TEMPERATURE_FILE} ] ; then
TEMPERATURE=`cat ${TEMPERATURE_FILE} | awk '{print $2}'`
UNIT=`cat ${TEMPERATURE_FILE} | awk '{print $3}'`
echo "CPU TEMP: ${TEMPERATURE}°${UNIT}
"
else
echo "CPU TEMP: UNKN
"
fi
}
# --------------------------------------------------------------------------------------------
# Main
# --------------------------------------------------------------------------------------------
printHeader
echo ""
getNumInterfaces
getNetworkConfiguration
checkLocaldevice
checkDNS
determineProxy
checkHTTP
checkRemote
addHorizontalLine
echo " | "
echo ""
getVGAController
getScreenResolution
addHorizontalLine
checkSSHTunnel
checkWebAdminPort
addHorizontalLine
checkBluetooth
checkJavaProcesses
addHorizontalLine
checkHD
addHorizontalLine
getTemperature
echo " | "
printFooter