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