Script Bash per Avvio e Visualizzazione dati Seti@home

Gio, 16/09/2004 - 00:04

Script Bash per Avvio e Visualizzazione dati Seti@home

Inviato da Anonimo 0 commenti

Script in bash per l'utilizzazione di seti@home , visalizzazione unita e gestione parametri.

#!/bin/bash
#===============================================
# SETI@home start/status displayer
# ----------------------------------------------
# Released under the GNU General Public License
#===============================================
 
#---------------------------------------------
#---------------------------------------------
# Parametri da settare prima di avviare lo script
 
# Path dove e' installato seti
SETI_PATH=/usr/local/setiathome
 
# pathsenza il nome dell eseguibile
 SETI_BIN_PATH=/usr/bin
SETI_BIN_PATH=.
 
# Opzioni da passare a seti ( es -graphics )
SETI_OPTION="-stop_after_process"
 
# Priorita' (nice) di seti (da 0 a 19)
SETI_NICE=18
 
# Non Modificare dopo queste linee
#---------------------------------------------
#---------------------------------------------
 
#***********
# VARIABILI
#***********
VERSION="2.1"
DATE="14/05/2004"
AUTHOR="Crash-Override alias ^debian^"
EMAIL="neo-zaionnet@email.it"
 
SETI_EXEC=setiathome
 
STATE_FILE=$SETI_PATH/state.sah
USER_FILE=$SETI_PATH/user_info.sah
PID_CMD=/sbin/pidof
 
SETI_PID=`$PID_CMD $SETI_EXEC`
 
SETI_USER=`ps h -o user -C $SETI_EXEC`
 
SETI_DATE_FORMAT="%c"
 
SETI_RED="\033[0;31m"
SETI_BLUE="\033[0;36m"
SETI_NORMAL="\033[0m"
 
 
#***********
# FUNZIONI
#***********
set_messages ()
{
	if [ -z "$LC_ALL" ]; then
		SETI_LANG=$LANG
	else
		SETI_LANG=`expr substr "$LC_ALL" 1 2`
	fi
 
	I=0
	MESS_TIME_Y=$((I++))
	MESS_TIME_D=$((I++))
	MESS_TIME_H=$((I++))
	MESS_TIME_M=$((I++))
	MESS_FLOAT=$((I++))
 
	MESS_USER_INFO=$((I++))
	MESS_N_RESULTS_L=$((I++))
	MESS_N_RESULTS_R=$((I++))
	MESS_CPU_TIME_L=$((I++))
	MESS_CPU_AVERAGE_L=$((I++))
	MESS_REGISTER_L=$((I++))
	MESS_RESULT_L=$((I++))
 
	MESS_CURRENT=$((I++))
	MESS_CURRENT_STOPPED=$((I++))
	MESS_CURRENT_CPU_L=$((I++))
	MESS_CURRENT_PROGRESS=$((I++))
	MESS_CURRENT_STARTED=$((I++))
	MESS_CURRENT_DOWNLOAD=$((I++))
 
	MESS_CLIENT=$((I++))
	MESS_CLIENT_PID=$((I++))
	MESS_CLIENT_START=$((I++))
	MESS_CLIENT_TIME=$((I++))
	MESS_CLIENT_NICE=$((I++))
 
	MESS_RUN_STATUS=$((I++))
	MESS_RUN_STOP_L=$((I++))
	MESS_RUN_STOP_R=$((I++))
	MESS_RUN_STOP_ERR=$((I++))
	MESS_RUN_START=$((I++))
	MESS_RUN_START_ERR=$((I++))
	MESS_RUN_NOT=$((I++))
 
	MESS_HELP_TITLE=$((I++))
	MESS_HELP_AUTHOR=$((I++))
	MESS_HELP_VERSION=$((I++))
	MESS_HELP_USAGE=$((I++))
	MESS_HELP_SUMUP=$((I++))
	MESS_HELP_OPTIONS=$((I++))
	MESS_HELP_OPT_HELP=$((I++)) 
	MESS_HELP_OPT_VERSION=$((I++))
	MESS_HELP_OPT_START=$((I++))
	MESS_HELP_OPT_STOP=$((I++))
 
	if [ "$SETI_LANG" = "fr" -o "$SETI_LANG" = "french" -o "$SETI_LANG" = "French" ]; then
		MESSAGE[$MESS_TIME_Y]="an "
		MESSAGE[$MESS_TIME_D]="j "
		MESSAGE[$MESS_TIME_H]="h "
		MESSAGE[$MESS_TIME_M]="min "
 
		MESSAGE[$MESS_FLOAT]=","
 
		MESSAGE[$MESS_USER_INFO]="Informazioni Utilizzatore"
		MESSAGE[$MESS_N_RESULTS_L]="Numero di unita'calcolate="
		MESSAGE[$MESS_N_RESULTS_R]="" 
		MESSAGE[$MESS_CPU_TIME_L]="Tempo totale macchina       = "
		MESSAGE[$MESS_CPU_AVERAGE_L]="Tempo per unita'     = "
		MESSAGE[$MESS_REGISTER_L]="Data di registrazione     = "
		MESSAGE[$MESS_RESULT_L]="Ultimo risultato inviato  = "
 
		MESSAGE[$MESS_CURRENT]="Unita' in corso"
		MESSAGE[$MESS_CURRENT_STOPPED]="STOP !"
		MESSAGE[$MESS_CURRENT_CPU_L]="Tempo macchina = "
		MESSAGE[$MESS_CURRENT_PROGRESS]="Progresso   = "
		MESSAGE[$MESS_CURRENT_STARTED]="Una nuova unita' sta per essere iniziata"
		MESSAGE[$MESS_CURRENT_DOWNLOAD]="Scaricamento di una nuova unita' in corso."
 
		MESSAGE[$MESS_CLIENT]="Processo in corso"
		MESSAGE[$MESS_CLIENT_PID]="Identifiant (PID) ="
		MESSAGE[$MESS_CLIENT_START]="Arresto         ="
		MESSAGE[$MESS_CLIENT_TIME]="Tempo macchina     ="
		MESSAGE[$MESS_CLIENT_NICE]="Priorita' (nice)   ="
 
		MESSAGE[$MESS_RUN_STATUS]="Stat d'avanzamento di SETI@home"
		MESSAGE[$MESS_RUN_STOP_L]="Processo di  SETI@home (PID " 
		MESSAGE[$MESS_RUN_STOP_R]=") e' stato arrestato." 
		MESSAGE[$MESS_RUN_STOP_ERR]="SETI@home non puo' essere arrestato per l'utente"
		MESSAGE[$MESS_RUN_START]="SETI@home e' fermo"
		MESSAGE[$MESS_RUN_START_ERR]="SETI@home"
		MESSAGE[$MESS_RUN_NOT]="SETI@home"
 
		MESSAGE[$MESS_HELP_TITLE]=""
		MESSAGE[$MESS_HELP_AUTHOR]="Autore"
		MESSAGE[$MESS_HELP_VERSION]="Versione"
		MESSAGE[$MESS_HELP_SUMUP]="Versione"
		MESSAGE[$MESS_HELP_USAGE]="Help : seti OPTIONS"
		MESSAGE[$MESS_HELP_OPTIONS]="OPZIONI disponibili :"
		MESSAGE[$MESS_HELP_OPT_HELP]=""
		MESSAGE[$MESS_HELP_OPT_VERSION]="2.1"
		MESSAGE[$MESS_HELP_OPT_START]=""
		MESSAGE[$MESS_HELP_OPT_STOP]=""
	else
		MESSAGE[$MESS_TIME_Y]="yr "
		MESSAGE[$MESS_TIME_D]="d "
		MESSAGE[$MESS_TIME_H]="h "
		MESSAGE[$MESS_TIME_M]="min "
 
		MESSAGE[$MESS_FLOAT]="."
 
		MESSAGE[$MESS_USER_INFO]="User Info"
		MESSAGE[$MESS_N_RESULTS_L]="Working Units   = "
		MESSAGE[$MESS_N_RESULTS_R]=" completed" 
		MESSAGE[$MESS_CPU_TIME_L]="Total CPU Time  = "
		MESSAGE[$MESS_CPU_AVERAGE_L]="Average Time/WU = "
		MESSAGE[$MESS_REGISTER_L]="Register Time   = "
		MESSAGE[$MESS_RESULT_L]="Last WU Sent On = "
 
		MESSAGE[$MESS_CURRENT]="Current Working Unit"
		MESSAGE[$MESS_CURRENT_STOPPED]="STOPPED !"
		MESSAGE[$MESS_CURRENT_CPU_L]="CPU Time = "
		MESSAGE[$MESS_CURRENT_PROGRESS]="Progress = "
		MESSAGE[$MESS_CURRENT_STARTED]="New Working Unit just started."
		MESSAGE[$MESS_CURRENT_DOWNLOAD]="Downloading a new Working Unit..."
 
		MESSAGE[$MESS_CLIENT]="Current Client Process"
		MESSAGE[$MESS_CLIENT_PID]="Process ID      ="
		MESSAGE[$MESS_CLIENT_START]="Starting Time   ="
		MESSAGE[$MESS_CLIENT_TIME]="CPU Time        ="
		MESSAGE[$MESS_CLIENT_NICE]="Priority (nice) ="
 
		MESSAGE[$MESS_RUN_STATUS]="SETI@home status"
		MESSAGE[$MESS_RUN_STOP_L]="SETI@home process (PID " 
		MESSAGE[$MESS_RUN_STOP_R]=") stopped." 
		MESSAGE[$MESS_RUN_STOP_ERR]="SETI@home can only be stopped by user"
		MESSAGE[$MESS_RUN_START]="SETI@home started"
		MESSAGE[$MESS_RUN_START_ERR]="SETI@home could not be started !"
		MESSAGE[$MESS_RUN_NOT]="SETI@home is not running !"
 
		MESSAGE[$MESS_HELP_TITLE]="SETI@home starter and status displayer"
		MESSAGE[$MESS_HELP_AUTHOR]="Author"
		MESSAGE[$MESS_HELP_VERSION]="Version"
		MESSAGE[$MESS_HELP_SUMUP]="Displays information about the SETI@home client."
		MESSAGE[$MESS_HELP_USAGE]="Usage : seti OPTIONS"
		MESSAGE[$MESS_HELP_OPTIONS]="Available OPTIONS :"
		MESSAGE[$MESS_HELP_OPT_HELP]="prints this text"
		MESSAGE[$MESS_HELP_OPT_VERSION]="prints the version"
		MESSAGE[$MESS_HELP_OPT_START]="starts the SETI@home client"
		MESSAGE[$MESS_HELP_OPT_STOP]="sends the TERM signal to the client"
	fi
}
 
 
format_date ()
{
	TIME_DAY=`expr substr "$EXTRACTED_TIME" 1 3`
	TIME_MONTH=`expr substr "$EXTRACTED_TIME" 5 3`
	TIME_DATE=`expr substr "$EXTRACTED_TIME" 9 2`
	TIME_TIME=`expr substr "$EXTRACTED_TIME" 12 8`
	TIME_YEAR=`expr substr "$EXTRACTED_TIME" 21 4`
 
	FORMATED_DATE=`date "+$SETI_DATE_FORMAT" -d "${TIME_DATE} ${TIME_MONTH} ${TIME_YEAR} ${TIME_TIME}"`
}
 
 
time_int_to_string ()
{
	if [ $TIME_INT -gt 31557384 ];  then
		TIME_YEAR=$(($TIME_INT / 31557384))
		TIME_STRING="${TIME_YEAR}${MESSAGE[$MESS_TIME_Y]}"
	else
		TIME_STRING=""
	fi
 
	if [ $TIME_INT -gt 86400 ];  then
		TIME_DAY=$(($TIME_INT % 31557384 / 86400))
		TIME_STRING="${TIME_STRING}${TIME_DAY}${MESSAGE[$MESS_TIME_D]}"
	fi
 
	TIME_HOUR=$(($TIME_INT % 86400 / 3600))
	TIME_MINUTE=$(($TIME_INT % 3600 / 60))
 
	TIME_STRING="${TIME_STRING}${TIME_HOUR}${MESSAGE[$MESS_TIME_H]}${TIME_MINUTE}${MESSAGE[$MESS_TIME_M]}"
}
 
 
display_user_info ()
{
	if [ -f $USER_FILE ]; then
		echo -e "\n  ${MESSAGE[$MESS_USER_INFO]}"
 
		N_RESULTS=`grep nresults $USER_FILE | sed "s/nresults=//"`
		echo "    ${MESSAGE[$MESS_N_RESULTS_L]}${N_RESULTS}${MESSAGE[$MESS_N_RESULTS_R]}"
 
		CPU_TIME=`grep total_cpu $USER_FILE | sed "s/total_cpu=//"`
		TIME_INT=`expr substr $CPU_TIME 1 \( index $CPU_TIME . - 1 \)`
		time_int_to_string
		echo "    ${MESSAGE[$MESS_CPU_TIME_L]}${TIME_STRING}"
 
		TIME_INT=$(($TIME_INT / $N_RESULTS))
		time_int_to_string
		echo "    ${MESSAGE[$MESS_CPU_AVERAGE_L]}${TIME_STRING}"
 
		EXTRACTED_TIME=`grep register_time $USER_FILE | sed "s/^register.*(//;s/)//"`
		format_date
		echo "    ${MESSAGE[$MESS_REGISTER_L]}${FORMATED_DATE}"
 
		EXTRACTED_TIME=`grep last_result_time $USER_FILE | sed "s/^last.*(//;s/)//"`
		format_date
		echo "    ${MESSAGE[$MESS_RESULT_L]}${FORMATED_DATE}"
	fi
}
 
 
display_progress ()
{
	if [ "$1" == "0" ]; then
		PROG_INFO="${SETI_RED}${MESSAGE[$MESS_CURRENT_STOPPED]}${SETI_NORMAL}"
	fi
 
	if [ -s $STATE_FILE ]; then
		echo -e "\n  ${MESSAGE[$MESS_CURRENT]}"
 
		CPU_TIME=`grep cpu $STATE_FILE | sed "s/cpu=//"`
		TIME_INT=`expr substr $CPU_TIME 1 \( index $CPU_TIME . - 1 \)`
		time_int_to_string
		echo "    ${MESSAGE[$MESS_CURRENT_CPU_L]}${TIME_STRING}"
 
		PROGRESS=`grep prog $STATE_FILE | sed "s/prog=//"`
		PROG_PERCENT_100=`expr substr $PROGRESS 1 1`
 
		if [ $PROG_PERCENT_100 -eq 1 ]; then
			PROG_PERCENT_INT="100"
			PROG_PERCENT_FLOAT=""
		else
			PROG_PERCENT_INT=`expr substr $PROGRESS 3 2`
			PROG_PERCENT_FLOAT="${MESSAGE[$MESS_FLOAT]}`expr substr $PROGRESS 5 2`"
		fi
 
		echo -e "    ${MESSAGE[$MESS_CURRENT_PROGRESS]}${PROG_PERCENT_INT}${PROG_PERCENT_FLOAT}%  ${PROG_INFO}"
 
	elif [ -f $STATE_FILE ]; then
		echo -e "\n  ${MESSAGE[$MESS_CURRENT_STARTED]}"
	else
		echo -e "\n  ${MESSAGE[$MESS_CURRENT_DOWNLOAD]}"
	fi
}
 
display_client_info ()
{
	echo -e "\n  ${MESSAGE[$MESS_CLIENT]}"
	echo "    ${MESSAGE[$MESS_CLIENT_PID]} ${SETI_PID}"
 
	CLIENT_START=`ps h -o stime -C $SETI_EXEC`
	echo "    ${MESSAGE[$MESS_CLIENT_START]} $CLIENT_START"
 
	CLIENT_TIME=`ps h -o time -C $SETI_EXEC`
	echo "    ${MESSAGE[$MESS_CLIENT_TIME]} $CLIENT_TIME"
 
	CLIENT_NICE=`ps h -o nice -C $SETI_EXEC`
	echo "    ${MESSAGE[$MESS_CLIENT_NICE]}$CLIENT_NICE"
}
 
 
#********
# SCRIPT
#********
 
set_messages
 
if [ "$1" == "--help" -o "$1" == "-h" ]; then
	echo -e "\n${MESSAGE[$MESS_HELP_TITLE]}"
	echo
	echo "${MESSAGE[$MESS_HELP_AUTHOR]} : ${AUTHOR} - ${EMAIL}"
	echo "${MESSAGE[$MESS_HELP_VERSION]} ${VERSION} - ${DATE}"
	echo
	echo "${MESSAGE[$MESS_HELP_SUMUP]}"
	echo
	echo "${MESSAGE[$MESS_HELP_USAGE]}"
	echo
	echo "${MESSAGE[$MESS_HELP_OPTIONS]}"
	echo "    --help    : ${MESSAGE[$MESS_HELP_OPT_HELP]}"
	echo "    --version : ${MESSAGE[$MESS_HELP_OPT_VERSION]}"
	echo "    --start   : ${MESSAGE[$MESS_HELP_OPT_START]}"
	echo "    --stop    : ${MESSAGE[$MESS_HELP_OPT_STOP]}"
	echo
 
	exit 0
fi
 
if [ "$1" == "--version" -o "$1" == "-V" ]; then
	echo "${MESSAGE[$MESS_HELP_VERSION]} ${VERSION} - ${DATE}"
 
	exit 0
fi
 
if [ "$SETI_PID" != "" ]; then
	if [ "$1" == "--stop" ]; then
		if [ "$SETI_USER" == "$USER" ]; then 
			kill $SETI_PID
			echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_STOP_L]}${SETI_PID}${MESSAGE[$MESS_RUN_STOP_R]}${SETI_NORMAL}"
		else
			echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_STOP_ERR]} ${SETI_USER} !${SETI_NORMAL}"
		fi
	else
		echo -e "\n${MESSAGE[$MESS_RUN_STATUS]}"
 
		display_client_info
		display_user_info
		display_progress 1
	fi
elif [ "$1" == "--start" ]; then
	cd $SETI_PATH
	$SETI_BIN_PATH/$SETI_EXEC $SETI_OPTION -nice $SETI_NICE &> /dev/null &
 
	SETI_PID=`$PID_CMD $SETI_EXEC`
 
	if [ "$SETI_PID" != "" ]; then
		echo -e "\n${SETI_BLUE}${MESSAGE[$MESS_RUN_START]}${SETI_NORMAL}"
		display_client_info
		display_user_info
		display_progress 1
	else
		echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_START_ERR]}${SETI_NORMAL}\n"
		exit 1
	fi
else
	echo -e "\n${SETI_RED}${MESSAGE[$MESS_RUN_NOT]}${SETI_NORMAL}"
	display_user_info
	display_progress 0
fi
 
echo

Beh buona ricerca con SETI@home Wink