#!/bin/bash
#
###############################################################################################
#
# Project : Beabloo - Device Checker
#
# Script : Takes screenshots
#
# Author : Fabien Bouquelet
# Date : 2010-09-30
# Last Modif : 2011-04-15
# Change Log : 2010-09-30 - First version
# : 2010-10-01 - Add some checks
# : 2010-10-04 - Change SSH Tunnel check
# : 2010-10-05 - Multiple GW bug fix
# : 2010-10-06 - Some design changes & better ss checks & sudo -n & xargs -q
# : 2011-04-15 - Add 9/16 resolution check
# : 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 -e "
${RELEASE} launched at: `date '+%H:%M:%S'`
"
# echo -e "
CHECKS SUMMARY:
"
echo -e ""
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 "
"
}
printFooter(){
E_TIME=`date "+%s"`
ELAPSED_TIME=$((${E_TIME}-${B_TIME}))
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 "NUMBER OF NETWORK INTERFACES FOUND: ${NUM_INTERFACES} `addCheckMarkIcon false`
"
else
echo "NUMBER OF NETWORK INTERFACES FOUND: ${NUM_INTERFACES} `addCheckMarkIcon true`
"
fi
}
getNetworkConfiguration(){
echo "NETWORK INTERFACE(S):"
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 "- NETWORK INTERFACE ${INTERFACE} IS 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 "- NETWORK INTERFACE ${INTERFACE} IS UP AND CURRENT CONFIGURATION IS: `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 "- GATEWAY ${GATEWAY} IS REACHABLE `addCheckMarkIcon true`
"
else
echo "- GATEWAY ${GATEWAY} IS NOT REACHABLE `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 "LOCALDEVICE IS REACHABLE `addCheckMarkIcon true`
"
else
echo "LOCALDEVICE IS NOT REACHABLE `addCheckMarkIcon false`
"
fi
ping -c 1 -n -W 1 screenserver.beabloo.com > /dev/null 2>&1
STATUS=$?
if [ ${STATUS} -eq 0 ] ; then
echo "SCREENSERVER IS REACHABLE `addCheckMarkIcon true`
"
else
echo "SCREENSERVER IS NOT REACHABLE `addCheckMarkIcon false`
"
fi
}
checkDNS(){
NAMESERVERS=`cat /etc/resolv.conf | grep "^nameserver" | awk '{print $2}' | sed 's/^/\/' | sed 's/$/\<\/li\>/'`
echo "DNS SERVERS FOUND: "
DNS_BEABLOO=`/usr/bin/dig www.beabloo.com | grep ^www.beabloo.com | awk '{print $5}'`
if [ -z "${DNS_BEABLOO}" ] ; then
echo "www.beabloo.com NAME RESOLUTION FAILED `addCheckMarkIcon false`
"
else
echo "www.beabloo.com NAME RESOLUTION SUCCESSFUL `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 "SYNCRONIZATION SERVER NAME RESOLUTION FAILED `addCheckMarkIcon false`
"
else
echo "SYNCRONIZATION SERVER NAME RESOLUTION SUCCESSFUL `addCheckMarkIcon true`
"
fi
}
determineProxy(){
grep --silent "http.proxyEnabled=true" /opt/beabloo/data/conf/Global.properties && HTTPPROXYENABLE=true || HTTPPROXYENABLE=false
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.beabloo.com IS REACHABLE ${THROUGH} `addCheckMarkIcon true`
"
else
echo "www.beabloo.com IS NOT REACHABLE ${THROUGH} `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 SERVER IS REACHABLE ${THROUGH} `addCheckMarkIcon true`
"
else
echo "SECURE SERVER IS NOT REACHABLE ${THROUGH} `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 "SYNCRONIZATION SERVER IS REACHABLE ${THROUGH} `addCheckMarkIcon true`
"
else
echo "SYNCRONIZATION SERVER IS NOT REACHABLE ${THROUGH} `addCheckMarkIcon false`
"
fi
}
checkRemote(){
if [ -f /opt/beabloo/data/conf/Global.properties ] ; then
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 "REMOTE ON DEMAND SERVER IS REACHABLE `addCheckMarkIcon true`
"
else
echo "REMOTE ON DEMAND SERVER IS NOT REACHABLE `addCheckMarkIcon false`
"
fi
else
echo "REMOTE ON DEMAND SERVER IS NOT REACHABLE `addCheckMarkIcon false`
"
fi
}
checkBluetooth(){
NUM_BLUETOOTH=`hcitool dev | grep hci | wc -l`
if [ ${NUM_BLUETOOTH} -lt 3 ] ; then
echo "THERE ARE LESS BLUETOOTH ANTENNAS THAN NEEDED (${NUM_BLUETOOTH}<3) `addCheckMarkIcon false`
"
else
echo "BLUETOOTH ANTENNAS: OK `addCheckMarkIcon true`
"
fi
}
getVGAController(){
VGA_CONTROLLER=`lspci | grep VGA | cut -d ":" -f 3`
echo "VGA CONTROLLER: ${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 ${SCREEN_NAME} RESOLUTION: ${X}x${Y} (16/9) `addCheckMarkIcon true`
"
else
X_DIV_BY_9=$((${X}/9))
Y_DIV_BY_16=$((${Y}/16))
if [ ${X_DIV_BY_9} -eq ${Y_DIV_BY_16} ] ; then
echo "- SCREEN ${SCREEN_NAME} RESOLUTION: ${X}x${Y} (9/16) `addCheckMarkIcon true`
"
else
echo "- SCREEN ${SCREEN_NAME} RESOLUTION: ${X}x${Y} - IT IS NOT A 16/9 NOT 9/16 RESOLUTION `addCheckMarkIcon false`
"
fi
fi
else
echo "- SCREEN ${SCREEN_NAME} IS DISCONNECTED
"
fi
done
echo "
"
export IFS="${OLD_IFS}"
}
checkSSHTunnel(){
echo "ADMINISTRATION CONSOLE STATUS:"
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 "- ADMINISTRATION CONSOLE RUNNING `addCheckMarkIcon true`
"
else
echo "- ADMINISTRATION CONSOLE NOT RUNNING `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 "- ADMINISTRATION CONSOLE ESTABLISHED `addCheckMarkIcon true`
"
else
echo "- ADMINISTRATION CONSOLE NOT ESTABLISHED `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 ADMINISTRATION CONSOLE ACTIVATED `addCheckMarkIcon true`
"
else
echo "WEB ADMINISTRATION CONSOLE NOT ACTIVATED `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} BLUETOOTH WRAPPERS FOUND (${TCPBRIDGES}>=2) `addCheckMarkIcon true`
"
else
echo "${TCPBRIDGES} BLUETOOTH WRAPPER FOUND (${TCPBRIDGES}<2) `addCheckMarkIcon false`
"
fi
VIRAL=`echo "${JAVA_PROCESSES_LIST}" | grep "BeablooViralServer" | wc -l`
if [ ${VIRAL} -ge 1 ] ; then
echo "${VIRAL} VIRAL SERVERS FOUND `addCheckMarkIcon true`
"
else
echo "${VIRAL} VIRAL SERVER FOUND `addCheckMarkIcon false`
"
fi
DEVICESERVER=`echo "${JAVA_PROCESSES_LIST}" | grep "BeablooDeviceServer" | wc -l`
if [ ${DEVICESERVER} -eq 1 ] ; then
echo "DEVICE SERVER FOUND `addCheckMarkIcon true`
"
else
echo "DEVICE SERVER NOT FOUND `addCheckMarkIcon false`
"
fi
PROXY=`echo "${JAVA_PROCESSES_LIST}" | grep "BeablooProxy" | wc -l`
if [ ${PROXY} -eq 1 ] ; then
echo "LOCAL PROXY FOUND `addCheckMarkIcon true`
"
else
echo "LOCAL PROXY NOT FOUND `addCheckMarkIcon false`
"
fi
}
checkHD(){
echo "HARD DISKS PARTITIONS STATUS:"
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 ${PARTITION} IS ${USED}% USED `addCheckMarkIcon false`
"
else
echo "- PARTITION ${PARTITION} IS ${USED}% 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 TEMPERATURE: ${TEMPERATURE}°${UNIT}
"
else
echo "CPU TEMPERATURE: UNKNOWN
"
fi
}
# --------------------------------------------------------------------------------------------
# Main
# --------------------------------------------------------------------------------------------
printHeader
getNumInterfaces
getNetworkConfiguration
checkLocaldevice
checkDNS
determineProxy
checkHTTP
checkRemote
addHorizontalLine
getVGAController
getScreenResolution
addHorizontalLine
checkSSHTunnel
checkWebAdminPort
addHorizontalLine
checkBluetooth
checkJavaProcesses
addHorizontalLine
checkHD
addHorizontalLine
getTemperature
printFooter