#!/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 "\"OK\"" echo "${GREEN_HTML}[OK]${NOCOLOR_HTML}" else # echo "\"KO\"" 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:
      ${NAMESERVERS}
  • " 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