#!/bin/bash
#
# (c) 2005-2012 Instituto Superior Técnico
# 
# Author: Jose M Calhariz <jose.calhariz@ist.utl.pt>
#
# License: GPL-2
#
BRANCH="cal-scripts"
VERSION='v0.9.12'



# Main vars for configuration
DIARIO=${HOME}/diario/
PROG=$0

echo "$PROG" "$VERSION" "$BRANCH"

# Define VARS to call commands
WHICH=`which which`
if test ! -x ${WHICH} ; then
    echo "Which not found in system, using builtin bash version"
    WHICH=which
fi

function usage () {
    echo "$0: [all | fast | slow | parallel]"
    echo "The options select what kind of tasks for collecting information"
    echo "    all  - do all the tasks sequencially, default action"
    echo "    fast - do fasts tasks for collecting information"
    echo "    slow - do slow and demanding tasks"
    echo "    parallel - do fast and slow tasks in parallel"
}

function set-command () {
    #echo "$1" "$2"
    x=`eval "expr \"$VAR1\" "`
    CMD=`eval "$WHICH $2"`
    #echo "$CMD"
    if test ! -x "$CMD" ; then
	echo -n "$2 not found. "
	CMD=$2
	if test $# -gt 2; then
	    echo "$3"
	fi
	echo
	if test $# -gt 3; then
	    echo "Aborting"
	    exit 1
	fi
    fi

    eval "$1=$CMD"
}

# Define VAR for the used commands
set-command GREP grep abort

set-command CMKTEMP mktemp abort
MKTEMP="${CMKTEMP} /tmp/tmp.XXXXXXXXXXXX"
MKTEMPDIR="${CMKTEMP} -d /tmp/tmp.XXXXXXXXXXXX"

set-command MOUNT mount
set-command LSPCI lspci
set-command CAT cat
set-command RPM rpm
set-command FDISK fdisk
set-command PARTED parted
set-command GDISK gdisk "Temporarely on sid"
set-command CP cp
set-command DF df
set-command DMSETUP dmsetup
set-command VGDISPLAY vgdisplay
set-command LVDISPLAY lvdisplay
set-command PVDISPLAY pvdisplay
set-command MDADM mdadm
set-command LSMOD lsmod
set-command FREE free
set-command VMSTAT vmstat
set-command DMESG dmesg
set-command HEAD head
set-command CUT cut
set-command LSUSB lsusb
set-command HDPARM hdparm
set-command SDPARM sdparm
set-command SMARTCTL smartctl "For collecting S.M.A.R.T. information"
set-command HPADUCLI hpaducli "For SCSI from HP/Compaq"
set-command HPACUCLI hpacucli "For SCSI from HP/Compaq"
set-command HPASMCLI hpasmcli "For Hardware from HP/Compaq"
set-command HPONCFG hponcfg "For iLO Hardware from HP/Compaq"
set-command PRTCONF prtconf "For SPARC Machines"
set-command EEPROM eeprom "For SPARC Machines"
set-command HWINFO hwinfo
set-command DDCPROBE ddcprobe
set-command GETEDID get-edid
set-command PARSEEDID parse-edid
set-command IPMITOOL ipmitool
set-command TWCLI tw_cli "For 3ware/LSI Controlers"
set-command IFCONFIG ifconfig
set-command ROUTE route
set-command IP ip
set-command NETSTAT netstat
set-command NTPQ ntpq
set-command HWCLOCK hwclock

# $1 - procfile
# $2 - File to log
function cat-file () {
    echo $1 >> $2
    if [ -e $1 ] ; then
	${CAT} $1 >> $2
    else
	echo "$1 don't exist" >> $2
    fi
    echo >> $2
}

# $1 - output file
# $2 - command to execute
# $3 - options to the command
function echo_execute () {
    OUTPUT=$1
    shift
    NAME=`basename $1`
    COMMAND="$1"
    shift
    echo $NAME $* >> ${OUTPUT}
    if test -x "$COMMAND" ; then
	$COMMAND $* >> ${OUTPUT} 2>&1
    else
	echo "$COMMAND is not executable" >> ${OUTPUT}
    fi
    echo >> ${OUTPUT}
}

function packages-list-update () {
    FILE="${DIARIO}/packages-list"

    if [ -d "${DIARIO}" ] ; then
	echo -n "."
	> "${FILE}"
	echo "$PROG" "$VERSION" "$BRANCH" >> "${FILE}"

	echo                              >> "${FILE}"
	cat-file /etc/debian_version "${FILE}"
	cat-file /etc/issue          "${FILE}"
	cat-file /etc/issue.net      "${FILE}"
	echo "deb packages installed" >> "${FILE}"
	COLUMNS=256 dpkg --list | cut -f 1-3 -d ' ' >> "${FILE}"
	COLUMNS=175 dpkg --list >> "${FILE}"
	echo >> "${FILE}"
	echo "rpm packages installed" >> "${FILE}"
	${RPM} -q -a >> "${FILE}" 2>&1
	echo >> "${FILE}"
	echo "Java alternatives" >> "${FILE}"
	update-java-alternatives -l >> "${FILE}"
	echo >> "${FILE}"
	echo "Contents of /etc/alternatives" >> "${FILE}"
	ls -alF --time-style=+ /etc/alternatives >> "${FILE}"
    fi

}

function partition-update () {
#     FDISK=/sbin/fdisk
#     PARTED=/sbin/parted
#     GDISK=/sbin/gdisk
#     CP=/bin/cp
#     DF=/bin/df
    FILEPART=${DIARIO}/part-list

    echo -n "."
    > ${FILEPART}
    for disk in /dev/hd? /dev/sd? /dev/vd? /dev/xvd? /dev/cciss/c?d? /dev/cciss/c?d?? /dev/cciss/disc?/disc ; do
	echo -n "${disk} "
	if test -r ${disk} ; then
	echo -n "${disk} "
	    echo_execute ${FILEPART} ${FDISK} -l ${disk} 2> /dev/null
	    echo_execute ${FILEPART} ${GDISK} -l ${disk}
	    echo_execute ${FILEPART} ${PARTED} ${disk} print unit s print
	fi
    done
    echo -n "."
    if test -x ${PARTED} ; then
	echo "${PARTED} -l" >> ${FILEPART}
	time ${PARTED} -l >> ${FILEPART}
	echo "parted -l"
    else
	echo 
	echo "${PARTED} not found, please check or install parted"
    fi
    cat-file /proc/partitions ${FILEPART}
}

function fslist-update () {
    FILEFS=${DIARIO}/fs-list

    echo -n "."
    > ${FILEFS}
    echo "mounted partitions"           >> ${FILEFS}
    case $OSTYPE in
	linux-gnu)
	    cat-file /proc/mounts                  ${FILEFS}
	    echo_execute ${FILEFS} ${MOUNT} -l
	    ;;
	darwin8.0)
	    echo_execute ${FILEFS} ${MOUNT}
	    ;;
	*)
	    echo_execute ${FILEFS} ${MOUNT}
    esac
    echo "size of filesystems df -h"    >> ${FILEFS}
    echo_execute ${FILEFS} ${DF} -h
    echo "inodes of filesystems df -iH" >> ${FILEFS}
    echo_execute ${FILEFS} ${DF} -iH
}

function fstab-update () {
    FILEFSTAB=${DIARIO}/fstab
    
    ${CP} /etc/fstab ${FILEFSTAB}
}

function lvm-update () {
#     DMSETUP=/sbin/dmsetup
#     VGDISPLAY=/sbin/vgdisplay
#     LVDISPLAY=/sbin/lvdisplay
#     PVDISPLAY=/sbin/pvdisplay
    FILELVM=${DIARIO}/lvm-list
    > ${FILELVM}

    echo -n "."
    if [ -x ${DMSETUP} ] ; then
	echo_execute ${FILELVM} ${DMSETUP} targets
	echo_execute ${FILELVM} ${DMSETUP} ls
	echo_execute ${FILELVM} ${DMSETUP} info
	echo_execute ${FILELVM} ${DMSETUP} deps
	echo_execute ${FILELVM} ${DMSETUP} table
    fi
    if [ -x ${VGDISPLAY} ] ; then
	${VGDISPLAY} --short   >> ${FILELVM} 2>&1
    fi

    if [ ! -x ${LVDISPLAY} -o ! -x ${PVDISPLAY} ] ; then
	echo "$LVDISPLAY or $PVDISPLAY not available"
    else
	${VGDISPLAY} -A >> ${FILELVM} 2>&1
	${LVDISPLAY} -v -m >> ${FILELVM} 2>&1
	${PVDISPLAY} -v -m >> ${FILELVM} 2>&1
    fi
}

function md-update () {
#    MDADM=/sbin/mdadm
    FILEMD=${DIARIO}/md-list
    > ${FILEMD}

    echo -n "."
    if [ ! -x ${MDADM} ] ; then
	return
    fi
    ${MDADM} mdadm --detail /dev/md* >> ${FILEMD} 2>&1
    cat-file /proc/mdstat      ${FILEMD}
    cat-file /proc/sys/dev/raid/speed_limit_max ${FILEMD}
    cat-file /proc/sys/dev/raid/speed_limit_min ${FILEMD}
}

function kernel-update () {
    FILEKERNEL=${DIARIO}/kernel-list
    FILEPROCSYS=${DIARIO}/procsys-list
#     CAT=/bin/cat
#     LSMOD=/sbin/lsmod
#     FREE=/usr/bin/free
#     VMSTAT=/usr/bin/vmstat
    AFSD1=/usr/sbin/afsd
    AFSD2=/sbin/afsd

    echo -n "."
    >${FILEKERNEL}
    cat-file /proc/version     ${FILEKERNEL}
    cat-file /proc/cmdline     ${FILEKERNEL}
    cat-file /proc/crypto      ${FILEKERNEL}
    cat-file /proc/devices     ${FILEKERNEL}
    cat-file /proc/cgroups     ${FILEKERNEL}

    printf "%20s   %s\n" "Modules" "Used by"		 >> ${FILEKERNEL}
    if [ -r /proc/modules ] ; then
	cat /proc/modules | awk '{ printf "%20s   %s\n",$1,$4 }' >> ${FILEKERNEL}
    fi
    echo 			>> ${FILEKERNEL}
    if [ -x ${LSMOD} ] ; then
	${LSMOD}             >>    ${FILEKERNEL}
    fi
    echo                 >>    ${FILEKERNEL}
    cat-file /proc/fb          ${FILEKERNEL}
    cat-file /proc/locks       ${FILEKERNEL}
    cat-file /proc/execdomains ${FILEKERNEL}

    echo "IRQ CPU Affinity"                    >> ${FILEKERNEL}
    for irq in /proc/irq/* ; do
	cat-file $irq/smp_affinity                ${FILEKERNEL}
    done
    
    echo_execute ${FILEKERNEL} ${FREE}
    echo_execute ${FILEKERNEL} ${VMSTAT} -m
    echo_execute ${FILEKERNEL} ${VMSTAT} -s

    cat-file /proc/meminfo     ${FILEKERNEL}
    cat-file /proc/mtrr        ${FILEKERNEL}
    cat-file /proc/pagetypeinfo                    ${FILEKERNEL}
    cat-file /proc/lvm/global  ${FILEKERNEL}
    cat-file /proc/swaps       ${FILEKERNEL}
    cat-file /proc/filesystems ${FILEKERNEL}
    cat-file /proc/sys/fs/nr_open          ${FILEKERNEL}

    echo "/proc/sys"                            >> ${FILEKERNEL}
    cat-file /proc/sys/dev/cdrom/info              ${FILEKERNEL}
    cat-file /proc/sys/dev/mac_hid/mouse_button_emulation        ${FILEKERNEL}
    cat-file /proc/sys/kernel/core_pattern         ${FILEKERNEL}
    cat-file /proc/sys/kernel/core_uses_pid        ${FILEKERNEL}
    cat-file /proc/sys/kernel/randomize_va_space   ${FILEKERNEL}
    cat-file /proc/sys/kernel/tainted              ${FILEKERNEL}
    cat-file /proc/sys/kernel/random/entropy_avail ${FILEKERNEL}
    cat-file /proc/sys/kernel/random/poolsize      ${FILEKERNEL}
    cat-file /proc/sys/kernel/nmi_watchdog         ${FILEKERNEL}
    cat-file /proc/sys/kernel/panic_on_unrecovered_nmi ${FILEKERNEL}
    cat-file /proc/sys/kernel/kstack_depth_to_print ${FILEKERNEL}
    cat-file /proc/sys/kernel/poweroff_cmd         ${FILEKERNEL}
    cat-file /proc/sys/kernel/hung_task_timeout_secs            ${FILEKERNEL}
    cat-file /proc/sys/kernel/print-fatal-signals  ${FILEKERNEL}
    cat-file /proc/sys/kernel/softlockup_thresh    ${FILEKERNEL}
    cat-file /proc/sys/vm/laptop_mode              ${FILEKERNEL}
    cat-file /proc/sys/vm/panic_on_oom             ${FILEKERNEL}
    cat-file /proc/sys/vm/vdso_enabled             ${FILEKERNEL}
    cat-file /proc/sys/vm/nr_hugepages             ${FILEKERNEL}
    cat-file /proc/sys/vm/nr_overcommit_hugepages  ${FILEKERNEL}
    cat-file /proc/sys/vm/stat_interval            ${FILEKERNEL}
    cat-file /proc/sys/vm/mmap_min_addr            ${FILEKERNEL}
    cat-file /proc/sys/vm/highmem_is_dirtyable     ${FILEKERNEL}

    echo "OpenAFS client"               >> ${FILEKERNEL}
    if [ -x ${AFSD1} ] ; then
	strings ${AFSD1} | grep built   >> ${FILEKERNEL}
    fi
    if [ -x ${AFSD2} ] ; then
	strings ${AFSD2} | grep built   >> ${FILEKERNEL}
    fi
    echo "OpenAFS modules"              >> ${FILEKERNEL}
    if rxdebug > /dev/null 2>&1; then
	rxdebug localhost 7001 -version >> ${FILEKERNEL}
    fi
    echo "OpenAFS cache settings"       >> ${FILEKERNEL}
    if cmdebug > /dev/null 2>&1; then
	cmdebug localhost -cache        >> ${FILEKERNEL}
	cmdebug localhost -addrs        >> ${FILEKERNEL}
    fi

    > ${FILEPROCSYS}
    cat-file /proc/version                                  ${FILEPROCSYS}
    find /proc/ -print | grep -v "^/proc/[0-9]" | sort   >> ${FILEPROCSYS}
    ls -lAFR --time-style=+ /proc/[a-zA-Z]*            >> ${FILEPROCSYS}
    find /sys/ -print  | grep -v "^/sys/[0-9]" | sort    >> ${FILEPROCSYS}
    ls -lAFR --time-style=+ /sys/[a-zA-Z]*             >> ${FILEPROCSYS}
    
}

function kernel-boot () {
    FILEKERNELBOOT=${DIARIO}/kernel-boot
    DMESGLOG=/var/log/dmesg
    KERNELLOG=/var/log/kern.log
#     DMESG=/bin/dmesg
#     HEAD=/usr/bin/head
#     CP=/bin/cp
#     CUT=/usr/bin/cut

    echo -n "."
    case $OSTYPE in
	linux-gnu)
	    TMPFILE=`${MKTEMP}`
	    ${DMESG} > ${TMPFILE}
	    if $HEAD ${TMPFILE} | ${GREP} "Linux version" > /dev/null ; then
		${CP} ${TMPFILE} ${FILEKERNELBOOT}
	    else
		if ${GREP} "Linux version" ${KERNELLOG}> /dev/null ; then
		    LMATCH=`grep -n "Linux version" /var/log/kern.log | tail -1 | cut -d: -f 1`
		    FSIZE=`wc -l /var/log/kern.log | cut -f 1 -d ' '`
		    tail --lines=$(( FSIZE - LMATCH + 1)) /var/log/kern.log | cut -d : -f 4- | cut -b 2- > ${FILEKERNELBOOT}
		else
		    if $HEAD /var/log/dmesg | ${GREP} "Linux version" > /dev/null ; then
			${CP} /var/log/dmesg ${FILEKERNELBOOT}
		    else
			echo "Could not find initial kernel boot message, ${DMESG} ${KERNELLOG} and ${DMESGLOG} did not help."
			echo 
			echo "See if exist an alternative."
			echo
			echo "If kernel boot messages are to big to fit in /proc/kmsg ring buffer, considerar to change runlevels of sysklogd, klogd and bootmisc.sh.  Sugestion: /etc/rcS.d/S40sysklog /etc/rcS.d/S41klogd /etc/rcS.d/S41bootmisc.sh"
		    fi
		fi
	    fi
	    ;;
	darwin8.0)
	    DMESG > ${FILEKERNELBOOT}
	    ;;
	*)
	    
    esac
    
    if [ -e /var/log/boot ] ; then
	${CUT}  -d : -f 4- /var/log/boot | ${CUT} -b2- > ${DIARIO}/boot-log 
    fi
}

function hardware-update () {
#     LSUSB=/usr/bin/lsusb
#     SDPARM=/usr/bin/sdparm
    FILEPCI=${DIARIO}/pci-list
    FILEUSB=${DIARIO}/usb-list
    FILEALSA=${DIARIO}/alsa-list
    FILEHARDWARE=${DIARIO}/hardware-list
#     PRTCONF=/usr/sbin/prtconf
#     EEPROM=/usr/sbin/eeprom

    echo -n "."
    > ${FILEPCI}
    echo "#################### lspci "      >> ${FILEPCI}
    ${LSPCI}                                >> ${FILEPCI}
    echo "#################### lspci -tv"   >> ${FILEPCI}
    ${LSPCI} -tv                            >> ${FILEPCI}
    echo "#################### lspci -v"    >> ${FILEPCI}
    ${LSPCI} -v                             >> ${FILEPCI}
    echo "#################### lspci -vv"   >> ${FILEPCI}
    ${LSPCI} -vv                            >> ${FILEPCI}
    cat-file /proc/pci                         ${FILEPCI}
    ${LSPCI} -x                              > ${FILEPCI}-x
    cat-file /proc/bus/pci/devices             ${FILEPCI}-x

    > ${FILEUSB}
    if [ -x ${LSUSB} ] ; then
	${LSUSB}                            >> ${FILEUSB}
	${LSUSB} -t                         >> ${FILEUSB} 2>&1
	${LSUSB} -v                         >> ${FILEUSB}
    fi

    > ${FILEALSA}
    for file in /proc/asound/* /proc/asound/*/* /proc/asound/*/*/* /proc/asound/*/*/*/* /proc/asound/*/*/*/*/*  ; do
	if test -f "${file}" ; then 
	    cat-file "${file}" ${FILEALSA}
	else
	    echo "${file} is not a file" >> ${FILEALSA}
	fi
    done

    > ${FILEHARDWARE}
    cat-file /proc/cpuinfo                    ${FILEHARDWARE}
    cat-file /proc/dma                        ${FILEHARDWARE}
    cat-file /proc/interrupts                 ${FILEHARDWARE}
    cat-file /proc/iomem                      ${FILEHARDWARE}
    cat-file /proc/ioports                    ${FILEHARDWARE}
    cat-file /proc/device-tree/compatible     ${FILEHARDWARE}
    echo                                   >> ${FILEHARDWARE}
    cat-file /proc/device-tree/model          ${FILEHARDWARE}
    echo                                   >> ${FILEHARDWARE}
    cat-file /proc/device-tree/serial-number  ${FILEHARDWARE}
    echo                                   >> ${FILEHARDWARE}
    cat-file /proc/bus/input/devices          ${FILEHARDWARE}
    cat-file /proc/bus/input/handlers         ${FILEHARDWARE}
    cat-file /proc/bus/ieee1394/devices       ${FILEHARDWARE}
    cat-file /proc/bus/pccard/drivers         ${FILEHARDWARE}
    cat-file /proc/bus/usb/devices            ${FILEHARDWARE}
    cat-file /proc/bus/usb/drivers            ${FILEHARDWARE}
    cat-file /proc/ide/drivers                ${FILEHARDWARE}
    cat-file /proc/ide/amd74xx                ${FILEHARDWARE}
    cat-file /proc/ide/via                    ${FILEHARDWARE}
    cat-file /proc/ide/piix                   ${FILEHARDWARE}
    cat-file /proc/ide/svwks                  ${FILEHARDWARE}
    cat-file /proc/ide/ide0/channel           ${FILEHARDWARE}
    cat-file /proc/ide/ide0/mate              ${FILEHARDWARE}
    cat-file /proc/ide/ide0/model             ${FILEHARDWARE}
    cat-file /proc/ide/ide1/channel           ${FILEHARDWARE}
    cat-file /proc/ide/ide1/mate              ${FILEHARDWARE}
    cat-file /proc/ide/ide1/model             ${FILEHARDWARE}
    for ide in /proc/ide/hd? ; do
	if [ -d "${ide}" ] ; then
	    for file in "${ide}"/* ; do
		if [ -f "${file}" ] ; then
		    cat-file "${file}"        ${FILEHARDWARE}
		fi
	    done
	fi
    done
    cat-file /proc/scsi/scsi                  ${FILEHARDWARE}
    cat-file /proc/scsi/sg/version            ${FILEHARDWARE}
    cat-file /proc/scsi/sg/devices            ${FILEHARDWARE}
    cat-file /proc/scsi/sg/device_strs        ${FILEHARDWARE}
    cat-file /proc/driver/cciss/cciss0        ${FILEHARDWARE}
    cat-file /proc/driver/cciss/cciss1        ${FILEHARDWARE}
    cat-file /proc/scsi/3w-xxxx/0             ${FILEHARDWARE}
    cat-file /proc/pmu/info                   ${FILEHARDWARE}
    cat-file /proc/pmu/interrupts             ${FILEHARDWARE}
    cat-file /proc/pmu/options                ${FILEHARDWARE}
    cat-file /proc/driver/rtc                 ${FILEHARDWARE}
    cat-file /proc/driver/snd-page-alloc      ${FILEHARDWARE}
    cat-file /proc/dri/0/name                 ${FILEHARDWARE}
    cat-file /proc/dri/0/mem                  ${FILEHARDWARE}
    cat-file /proc/mpt/version                ${FILEHARDWARE}
    cat-file /proc/mpt/summary                ${FILEHARDWARE}
    cat-file /proc/mpt/ioc0/info              ${FILEHARDWARE}
    cat-file /proc/mpt/ioc0/summary           ${FILEHARDWARE}

    echo "Power management"                >> ${FILEHARDWARE}
    cat-file /proc/apm				${FILEHARDWARE}
    cat-file /proc/pmu/battery_0              ${FILEHARDWARE}
    cat-file /proc/pmu/info                   ${FILEHARDWARE}
    cat-file /proc/pmu/options                ${FILEHARDWARE}

    cat-file /proc/acpi/alarm			${FILEHARDWARE}
    cat-file /proc/acpi/fan/FAN/state           ${FILEHARDWARE}
    cat-file /proc/acpi/info			${FILEHARDWARE}
#   Not a usefull sourve for information
#    cat-file /proc/acpi/event			${FILEHARDWARE}
    cat-file /proc/acpi/sleep			${FILEHARDWARE}
    cat-file /proc/acpi/wakeup			${FILEHARDWARE}
    cat-file /proc/acpi/button/power/PWRB/info	${FILEHARDWARE}
    cat-file /proc/acpi/button/power/PWRF/info	${FILEHARDWARE}
    
    if [ -d /proc/acpi/ac_adapter/ADP* ] ; then
       for adp in /proc/acpi/ac_adapter/ADP* ; do
           if [ -d ${adp} ] ; then
               pushd ${adp} > /dev/null
               for file in ${adp}/* ; do
                   if [ -f "${file}" ] ; then
                       cat-file "${file}"      ${FILEHARDWARE}
                   fi
               done
           fi
       done
    fi

    if [ -d /proc/acpi/battery/BAT* ] ; then
       for bat in /proc/acpi/battery/BAT* ; do
           if [ -d ${bat} ] ; then
               pushd ${bat} > /dev/null
               for file in ${bat}/* ; do
                   if [ -f "${file}" ] ; then
                       cat-file "${file}"      ${FILEHARDWARE}
                   fi
               done
           fi
       done
    fi

    if [ -d /proc/acpi/processor/CPU0 ] ; then
       pushd /proc/acpi/processor > /dev/null 
       for cpu in /proc/acpi/processor/CPU* ; do
           if [ -d ${cpu} ] ; then
               pushd ${cpu} > /dev/null
               for file in ${cpu}/* ; do
                   if [ -f "${file}" ] ; then
                       cat-file "${file}"      ${FILEHARDWARE}
                   fi
               done
           fi
       done
    fi

    if [ -d /proc/acpi/thermal_zone ] ; then
	for file in /proc/acpi/thermal_zone/* /proc/acpi/thermal_zone/*/* ; do
	    if [ -f "${file}" ] ; then
		cat-file "${file}"             ${FILEHARDWARE}
	    else 
		if [ -d "${file}" ] ; then
		    echo "${file}"          >> ${FILEHARDWARE}
		fi
	    fi
	done
    fi

    if [ -d /sys/devices/system/cpu ] ; then
       for cpu in /sys/devices/system/cpu/cpu* ; do
           if [ -d ${cpu}/cpufreq ] ; then
               for file in ${cpu}/cpufreq/* ; do
                   if [ -f "${file}" ] ; then
                       cat-file "${file}"      ${FILEHARDWARE}
                   fi
               done
           fi
       done
    fi

    echo "IO Scheduler"                             >> ${FILEHARDWARE}
    for file in /sys/block/*/queue/* ; do
       if [ -f $file -a -r $file ] ; then
           cat-file $file                      ${FILEHARDWARE}
       fi
    done

    if [ -x $PRTCONF ] ; then
	echo_execute ${FILEHARDWARE} $PRTCONF ""
	echo                        >> ${FILEHARDWARE}
	echo_execute ${FILEHARDWARE} $PRTCONF -p 
    fi

    if [ -x $EEPROM ] ; then
	echo_execute ${FILEHARDWARE} $EEPROM ""
    fi

}

function hdparm-update () {
#     HDPARM=/sbin/hdparm
    FILEHDPARM=${DIARIO}/hdparm-list
    FILESDPARM=${DIARIO}/sdparm-list

    HDPARMSPEED="${HDPARM} -tT"
    if test -x /usr/bin/nice ; then
	HDPARMSPEED="/usr/bin/nice --20 $HDPARMSPEED"
    fi
    if test -x /usr/bin/ionice ; then
	HDPARMSPEED="/usr/bin/ionice -c 1 $HDPARMSPEED"
    fi

    #set -x
    > ${FILEHDPARM}
    for disk in /dev/hd? /dev/sd? /dev/vd? /dev/xvd? /dev/sr? /dev/cciss/c?d? /dev/cciss/c?d?? /dev/cciss/disc?/disc ; do
	if test -r ${disk} ; then
	    echo -n " " ${disk} " "
 	    echo_execute ${FILEHDPARM} ${HDPARM}    ${disk}
 	    echo_execute ${FILEHDPARM} ${HDPARM} -i ${disk}
 	    echo_execute ${FILEHDPARM} ${HDPARM} -I ${disk}
	    sleep 1
 	    echo_execute ${FILEHDPARM} ${HDPARMSPEED} ${disk}
	fi
    done

    > ${FILESDPARM}
    for disk in /dev/hd? /dev/sd? /dev/vd? /dev/xvd? /dev/sr? /dev/cciss/c?d? /dev/cciss/c?d?? /dev/cciss/disc?/disc ; do
	if test -r ${disk} ; then
	    echo -n " " ${disk} " "
 	    echo_execute ${FILESDPARM} ${SDPARM} --all                  ${disk}
 	    echo_execute ${FILESDPARM} ${SDPARM} --all --long           ${disk}
 	    echo_execute ${FILESDPARM} ${SDPARM} --all --long --verbose ${disk}
	fi
    done
    #set +x
}

function smart-update () {
#     HDPARM=/sbin/hdparm
    FILESMART=${DIARIO}/smart-list
    CONFSMART=/etc/smartd.conf

    > ${FILESMART}

    egrep -v "^#" "$CONFSMART" | sed -e :a -e '$b;N;s/\\\n//;ba' | while read -a a ; do 
        unset DEV
        unset TYPE
        for (( i = 0 ;  i < ${#a} ; i ++ )); do
            # echo ${a[ $(( i )) ] }
	    case ${a[ $(( i )) ] } in
	        /dev/*)
		    DEV="${a[ $(( i )) ] }"
		    ;;
	        -d)
		    TYPE="${a[ $(( ++ i  )) ] }"
		    ;;
	        *)
		    
	    esac
        done
        if test $(( i )) -ge 1 ; then
            echo "$DEV -d $TYPE"
            echo_execute ${FILESMART} ${SMARTCTL} -a "$DEV" -d "$TYPE"
            echo >> ${FILESMART}
        fi
    done
    #set -x

    for disk in /dev/hd? /dev/sd? /dev/vd? /dev/sr? /dev/cciss/c?d? /dev/cciss/c?d?? /dev/cciss/disc?/disc ; do
	if test -r ${disk} ; then
	    echo -n " " ${disk} " "
 	    echo_execute ${FILESMART} ${SMARTCTL} -a ${disk}
	fi
    done
}


function hpaducli-update () {
    if [ ! -x ${HPADUCLI} ] ; then
        return 1
    fi
    local V=`${HPADUCLI} |& head -1 | cut -f 10 -d ' ' | cut -f 1 -d .`
    if [ 0$V -eq 9 ] ; then
        ${HPADUCLI} -f ${DIARIO}/hpadu-report -txt
    else
        ${HPADUCLI} -f ${DIARIO}/hpadu-report
    fi
}

function hp-hardware-update () {
#     HPADUCLI=/usr/sbin/hpaducli
#     HPASMCLI=/sbin/hpasmcli

    hpaducli-update

    if [ -x ${HPASMCLI} ] ;then
	${HPASMCLI} -s "SHOW ASR; SHOW BOOT; SHOW DIMM ; SHOW F1 ; SHOW FANS ; SHOW HT ; SHOW IML ; SHOW IPL ; SHOW NAME ; SHOW POWERSUPPLY ; SHOW PXE ; SHOW SERIAL  BIOS ;  SHOW SERIAL EMBEDDED ; SHOW SERIAL VIRTUAL ; SHOW SERVER ; SHOW TEMP ; ; SHOW WOL ;" > ${DIARIO}/hpasmcli-report < /dev/null
    fi
}

function hwinfo-update () {
    FILEHWINFO=${DIARIO}/hwinfo-list
#     HWINFO=/usr/sbin/hwinfo

    echo -n "."
    > ${FILEHWINFO}
    echo_execute ${FILEHWINFO}  ${HWINFO} "--short"
    echo_execute ${FILEHWINFO}  ${HWINFO} ""
}

function video-update () {
    FILEVIDEO=${DIARIO}/video-list
#     DDCPROBE=/usr/sbin/ddcprobe
#     GETEDID=/usr/bin/get-edid
#     PARSEEDID=/usr/bin/parse-edid
#     HWINFO=/usr/sbin/hwinfo

    > ${FILEVIDEO}
    
    echo -n "."
    if test -r /var/log/Xorg.0.log ; then
	cp /var/log/Xorg.0.log ${DIARIO}
    fi

    test -x ${DDCPROBE} || echo_execute ${FILEVIDEO} ${DDCPROBE}

    if test -x ${HWINFO} ; then
	echo_execute ${FILEVIDEO} ${HWINFO} --gfxcard --monitor --vbe --tv --zip
    fi

    echo -n "."
    if test  -x ${GETEDID}  -a  -x ${PARSEEDID}  ; then
	echo "#################### get-edid | parse-edid "   >> ${FILEVIDEO}
	${GETEDID} | ${PARSEEDID}                            >> ${FILEVIDEO}
    fi

}


function ipmi-update () {
#     IPMITOOL=/usr/bin/ipmitool
    FILEIPMI=${DIARIO}/ipmi-report

    if test ! -e /dev/ipmi0 ; then
	return
    fi

    > ${FILEIPMI}
    
    echo_execute ${FILEIPMI} ${IPMITOOL} "chassis status"
    echo_execute ${FILEIPMI} ${IPMITOOL} "chassis selftest"
    echo_execute ${FILEIPMI} ${IPMITOOL} "channel info"
    echo_execute ${FILEIPMI} ${IPMITOOL} "channel info 0"
    echo_execute ${FILEIPMI} ${IPMITOOL} "channel info 1"
    echo_execute ${FILEIPMI} ${IPMITOOL} "channel info 2"
    echo_execute ${FILEIPMI} ${IPMITOOL} "channel info 3"
    echo_execute ${FILEIPMI} ${IPMITOOL} "mc guid"
    echo_execute ${FILEIPMI} ${IPMITOOL} "mc info"
    echo_execute ${FILEIPMI} ${IPMITOOL} "fru print"
    echo_execute ${FILEIPMI} ${IPMITOOL} "mc getenables"
    echo_execute ${FILEIPMI} ${IPMITOOL} "mc selftest"
    echo_execute ${FILEIPMI} ${IPMITOOL} "lan print"
    echo_execute ${FILEIPMI} ${IPMITOOL} "pef info"
    echo_execute ${FILEIPMI} ${IPMITOOL} "pef status"
    echo -n "."
    echo_execute ${FILEIPMI} ${IPMITOOL} "sdr info"
    echo -n "."
    echo_execute ${FILEIPMI} ${IPMITOOL} "sdr list all"
    echo -n "."
    echo_execute ${FILEIPMI} ${IPMITOOL} "sensor list"
    echo -n "."
    echo_execute ${FILEIPMI} ${IPMITOOL} "session info all"
    echo_execute ${FILEIPMI} ${IPMITOOL} "sol info 0"
    echo_execute ${FILEIPMI} ${IPMITOOL} "sol info 1"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user summary 0"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user summary 1"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user summary 2"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user summary 3"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user list 0"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user list 1"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user list 2"
    echo_execute ${FILEIPMI} ${IPMITOOL} "user list 3"
    echo_execute ${FILEIPMI} ${IPMITOOL} "sel time get"
    echo_execute ${FILEIPMI} ${IPMITOOL} "sel info"
    echo_execute ${FILEIPMI} ${IPMITOOL} "sel list"
    echo -n "."
}

function hpacucli-update-8.0 () {
    hpacucli-update-generic
}

function hpacucli-update-7.85 () {
#     HPACUCLI=/usr/sbin/hpacucli
    FILEHPACUCLI=${DIARIO}/hpacucli-report
    TMPDIR=`${MKTEMPDIR}`

    echo -n "."
    if [ ! -x ${HPACUCLI} ] ; then
	return
    fi
    > ${FILEHPACUCLI}
    echo "Controllers" >> ${FILEHPACUCLI}
    ${HPACUCLI} controller all show | tee -a ${FILEHPACUCLI} > ${TMPDIR}/hpacucli-controller


    echo -n "."
    cat ${TMPDIR}/hpacucli-controller | grep " at " | cut -f 3 -d ' ' | xargs -n 1 -i ${HPACUCLI} controller ch=\{\} show  >> ${FILEHPACUCLI}
    cat ${TMPDIR}/hpacucli-controller | grep " in Slot " | cut -f 6 -d ' ' | xargs -n 1 -i ${HPACUCLI} controller slot=\{\} show  >> ${FILEHPACUCLI}
	    

    for target in `cat ${TMPDIR}/hpacucli-controller | grep " at " | cut -f 3 -d ' '` ; do
	echo -n "."
	echo "Discs of controller at $target" >> ${FILEHPACUCLI}
	${HPACUCLI} controller ch=${target} array all show | tee ${TMPDIR}/hpacucli-controller-at-${target}-array >> ${FILEHPACUCLI}
	${HPACUCLI} controller ch=${target} ld all show | tee ${TMPDIR}/hpacucli-controller-at-${target}-ld >> ${FILEHPACUCLI}
	${HPACUCLI} controller ch=${target} pd all show | tee ${TMPDIR}/hpacucli-controller-at-${target}-pd >> ${FILEHPACUCLI}
    done

    for target in `cat ${TMPDIR}/hpacucli-controller | grep " in Slot " | cut -f 6 -d ' '` ; do
	echo -n "."
	echo "Discs of controller in Slot $target" >> ${FILEHPACUCLI}
	${HPACUCLI} controller slot=${target} array all show | tee ${TMPDIR}/hpacucli-controller-slot-${target}-array >> ${FILEHPACUCLI}
	${HPACUCLI} controller slot=${target} ld all show | tee ${TMPDIR}/hpacucli-controller-slot-${target}-ld >> ${FILEHPACUCLI}
	${HPACUCLI} controller slot=${target} pd all show | tee ${TMPDIR}/hpacucli-controller-slot-${target}-pd >> ${FILEHPACUCLI}
    done


    for target in `cat ${TMPDIR}/hpacucli-controller | grep " at " | cut -f 3 -d ' '` ; do
	echo -n "."
 	echo "Detail of discs at $target" >> ${FILEHPACUCLI}
	for array in `grep -h array ${TMPDIR}/hpacucli-controller-at-${target}-array | awk '{print $2}'` ; do
	    #echo $ld
	    ${HPACUCLI} controller ch=${target} array $array show >> ${FILEHPACUCLI}
	done
	echo -n "."
	for ld in `grep -h logicaldrive ${TMPDIR}/hpacucli-controller-at-${target}-ld | awk '{print $2}'` ; do
	    #echo $ld
	    ${HPACUCLI} controller ch=${target} ld $ld show >> ${FILEHPACUCLI}
	done
	echo -n "."
	for pd in `grep -h physicaldrive ${TMPDIR}/hpacucli-controller-at-${target}-pd | awk '{print $2}'` ; do
	    #echo $pd
	    ${HPACUCLI} controller ch=${target} pd $pd show >> ${FILEHPACUCLI}
	done
    done

    for target in `cat ${TMPDIR}/hpacucli-controller | grep " in Slot " | cut -f 6 -d ' '` ; do
	echo -n "."
 	echo "Detail of discs in Slot $target" >> ${FILEHPACUCLI}
	for array in `grep -h "  array " ${TMPDIR}/hpacucli-controller-slot-${target}-array | awk '{print $2}'` ; do
	    #echo $ld
	    ${HPACUCLI} controller slot=${target} array $array show >> ${FILEHPACUCLI}
	done
	echo -n "."
	for ld in `grep -h "  logicaldrive " ${TMPDIR}/hpacucli-controller-slot-${target}-ld | awk '{print $2}'` ; do
	    #echo $ld
	    ${HPACUCLI} controller slot=${target} ld $ld show >> ${FILEHPACUCLI}
	done
	echo -n "."
	for pd in `grep -h "  physicaldrive " ${TMPDIR}/hpacucli-controller-slot-${target}-pd | awk '{print $2}'` ; do
	    #echo $pd
	    ${HPACUCLI} controller slot=${target} pd $pd show >> ${FILEHPACUCLI}
	done
    done
}

function hpacucli-update-generic () {
#     HPACUCLI=/usr/sbin/hpacucli
    FILEHPACUCLI=${DIARIO}/hpacucli-report
    FILEHPACUCLIDIAG=${DIARIO}/hpacucli-diag-report
    TMPDIR=`${MKTEMPDIR}`

    echo -n "."
    if [ ! -x ${HPACUCLI} ] ; then
	return
    fi
    
    VER=`echo "exit" | ${HPACUCLI} | grep CLI | cut -d ' ' -f 6`
    V=`echo $VER | cut -d - -f 1`
    V1=`echo $V | cut -d . -f 1`
    V2=`echo $V | cut -d . -f 2`
    V3=`echo $V | cut -d . -f 3`

    > ${FILEHPACUCLIDIAG}
    ${HPACUCLI} controller all diag file=${FILEHPACUCLIDIAG}

    > ${FILEHPACUCLI}
    echo "upacucli version detected $V => $V1 $V2 $V3" >> ${FILEHPACUCLI}
    echo "Controllers" >> ${FILEHPACUCLI}
    echo "${HPACUCLI} controller all show" >> ${FILEHPACUCLI}
    ${HPACUCLI} controller all show | tee -a ${FILEHPACUCLI} > ${TMPDIR}/hpacucli-controller

    echo -n "."
    echo "${HPACUCLI} controller all show status" >> ${FILEHPACUCLI} 
    ${HPACUCLI} controller all show status >> ${FILEHPACUCLI} 

    echo -n "."
    echo "${HPACUCLI} controller all show detail" >> ${FILEHPACUCLI} 
    ${HPACUCLI} controller all show detail >> ${FILEHPACUCLI} 

    echo -n "."
    echo "${HPACUCLI} controller all show config" >> ${FILEHPACUCLI}
    ${HPACUCLI} controller all show config >> ${FILEHPACUCLI} 
    
    echo -n "."
    echo "${HPACUCLI} controller all show config detail" >> ${FILEHPACUCLI}
    ${HPACUCLI} controller all show config detail >> ${FILEHPACUCLI} 
    
    echo -n "."
    echo "${HPACUCLI} controller all show ssp" >> ${FILEHPACUCLI} 
    ${HPACUCLI} controller all show ssp >> ${FILEHPACUCLI} 

    rm -rf ${TMPDIR}
}


function hpacucli-update () {
#     HPACUCLI=/usr/sbin/hpacucli
    FILEHPACUCLI=${DIARIO}/hpacucli-report
    TMPDIR=`${MKTEMPDIR}`

    echo -n "."
    if [ ! -x ${HPACUCLI} ] ; then
	return
    fi
    
    VER=`echo "exit" | ${HPACUCLI} | grep CLI | cut -d ' ' -f 6`
    V=`echo $VER | cut -d - -f 1`
    V1=`echo $V | cut -d . -f 1`
    V2=`echo $V | cut -d . -f 2`
    V3=`echo $V | cut -d . -f 3`

    if [ $V1 -gt 8 ] ; then
	hpacucli-update-generic
	return
    fi

    if [ $V1 -eq 8 ] ; then
	hpacucli-update-8.0
	return
    fi

    if [ $V1 -eq 7 -a $V1 -gt 84 ] ; then
	hpacucli-update-7.85
	return
    fi

    if [ $V1 -lt 7 ] ; then
	hpacucli-update-generic
	return
    fi

    if [ $V2 -lt 60 ] ; then
	hpacucli-update-generic
	return
    fi

    hpacucli-update-generic
}

function ilo-update () {
    FILEHPONCFG=${DIARIO}/hponcfg-xml

    if ! which ${HPONCFG} > /dev/null ; then
	return
    fi
    
    ${HPONCFG} -a -w ${FILEHPONCFG}
}

function twcli-update () {
    FILETWCLI=${DIARIO}/twcli-report
    

#     if test -x /usr/sbin/tw_cli ; then
# 	TWCLI=/usr/sbin/tw_cli
#     else
# 	TWCLI=twcli
#     fi

    if ! which ${TWCLI} > /dev/null ; then
	return
    fi

    > ${FILETWCLI}
    echo "tw_cli show ver"                          >> ${FILETWCLI}
    ${TWCLI} show ver                               >> ${FILETWCLI}
    echo "tw_cli show"                              >> ${FILETWCLI}
    ${TWCLI} show                                   >> ${FILETWCLI}
    echo "tw_cli show alarms"                       >> ${FILETWCLI}
    ${TWCLI} show alarms                            >> ${FILETWCLI}
    echo "tw_cli show rebuild"                      >> ${FILETWCLI}
    ${TWCLI} show rebuild                           >> ${FILETWCLI}
    echo "tw_cli show verify"                       >> ${FILETWCLI}
    ${TWCLI} show verify                            >> ${FILETWCLI}
    echo "tw_cli show selftest"                     >> ${FILETWCLI}
    ${TWCLI} show selftest                          >> ${FILETWCLI}
    for ctrl in `tw_cli show | egrep "^c[0-9] " | cut -f 1 -d ' '` ; do
	echo "tw_cli /$ctrl show all"               >> ${FILETWCLI}
	${TWCLI} /$ctrl show all                    >> ${FILETWCLI}
    done

    echo "tw_cli show diag"                         >> ${FILETWCLI}
    ${TWCLI} show diag                              >> ${FILETWCLI}
    echo -n "."
}


function net-update () {
    FILENET=${DIARIO}/net-list
#     IFCONFIG=/sbin/ifconfig
#     ROUTE=/sbin/route
#     IP=/sbin/ip
#     NETSTAT=/bin/netstat
    
    echo -n "."
    > ${FILENET}
    echo                                        >> ${FILENET}
    echo "ifconfig cleaned     $RANDOM"		>> ${FILENET}
    ${IFCONFIG} | grep -v TX | grep -v RX	>> ${FILENET}
    echo >> ${FILENET}
    echo "Pay attention that the following section," >> ${FILENET}
    echo "the counters produces false positives"               >> ${FILENET}
    echo >> ${FILENET}
    echo "ifconfig             $RANDOM"         >> ${FILENET}
    ${IFCONFIG}            >> ${FILENET}
    # Get routing tables
    if [ $OSTYPE == "darwin8.0" ] ; then
	netstat -nr            >> ${FILENET}
    else
	echo "route"           >> ${FILENET}
	${ROUTE}               >> ${FILENET}
	echo                                       >> ${FILENET}
	echo "route -A inet6 cleaned     $RANDOM"  >> ${FILENET}
	printf "%45s %40s %8s %8s %4s %4s %10s\n" "Destination" \
	    "Next Hop" "Flags" "Metric" "Ref" "Use" "Iface" \
	    >> ${FILENET}
	${ROUTE} -A inet6 \
	    | awk '{printf "%45s %40s %8s %8s XXXX XXXX %10s\n",$1,$2,$3,$4,$7}' \
	    >> ${FILENET}
	echo >> ${FILENET}
	echo "Pay attention that the following section," >> ${FILENET}
	echo "the counters produces false positives"               >> ${FILENET}
	echo >> ${FILENET}
	echo "route -A inet6             $RANDOM"  >> ${FILENET}
	${ROUTE} -A inet6      >> ${FILENET}
    fi

    # Get all info using iproute software
    if [ -x ${IP} ] ; then
	echo "ip link"         >> ${FILENET}
	${IP} link             >> ${FILENET}
	echo "ip addr"         >> ${FILENET}
	${IP} addr             >> ${FILENET}
	echo "ip addr"         >> ${FILENET}
	${IP} route            >> ${FILENET}
	echo                                      >> ${FILENET}
	echo "ip -6 route cleaned up $RANDOM"     >> ${FILENET}
	# Updated for gisela on sarge 20070328
        # Updated for atena on 20070326 on etch
	# Updated for afs06-unstable on 20070328 on etch
	${IP} -6 route \
	    | awk '\
/^[0-9a-fA-F\/:]+ dev [.[:alnum:]]+  proto kernel  metric.*/ \
    { print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " " $7" " $8 " XXXX " $10 " " $11 " " $12 " " $13 " " $14 " " $15 " " $16 } \
/^[0-9a-fA-F\/:]+ dev [.[:alnum:]]+  metric/ \
    { print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " XXXX " $8 " " $9 " " $10 " " $11 " " $12 " " $13 " " $14 " " $15 " " $16 } \
/^unreachable.*expires/ { print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " XXXX " $9 " " $10 " " $11 " " $12 " " $13 " " $14 " " $15 " " $16 " " $17 } \
/^unreachable.+dev [.[:alnum:]]+  proto/ { print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8" " $9 " " $10 " " $11 " " $12 " " $13 " " $14 " " $15 " " $16 " " $17 } \
/^default.*dev [.[:alnum:]]+  proto kernel  metric.*/ { print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " " $9 " " $10 " XXXX " $12 " " $13 " " $14 " " $15 " " $16 " " $17 " " $18 " " $19 " " $20 " " $21 " " $22}\
/^default.*dev [.[:alnum:]]+  metric/ { print $1 " " $2 " " $3 " " $4 " " $5 " " $6 " " $7 " " $8 " XXXX " $10 " " $11 " " $12 " " $13 " " $14 " " $15 " " $16 " " $17 " " $18 " " $19 " " $20 " " $21 " " $22}\
'\
	    >> ${FILENET}
	echo >> ${FILENET}
	echo "Pay attention that the following section," >> ${FILENET}
	echo "the counters produces false positives"               >> ${FILENET}
	echo >> ${FILENET}
	echo "ip -6 route            $RANDOM"     >> ${FILENET}
	${IP} -6 route         >> ${FILENET}
	echo "ip tunnel"       >> ${FILENET}
	${IP} tunnel           >> ${FILENET}
    fi
    echo >> ${FILENET}
    echo "${NETSTAT} information" >> ${FILENET}
    echo_execute ${FILENET} ${NETSTAT} -nap
    echo_execute ${FILENET} ${NETSTAT} -nap -e -e -o
    echo_execute ${FILENET} ${NETSTAT} -ng
    echo_execute ${FILENET} ${NETSTAT} -i
    echo_execute ${FILENET} ${NETSTAT} -i -a
    echo_execute ${FILENET} ${NETSTAT} -M
    echo_execute ${FILENET} ${NETSTAT} -s
    cat-file /proc/net/dev         ${FILENET}
    cat-file /proc/net/dev_mcast   ${FILENET}
    cat-file /proc/net/protocols   ${FILENET}
    cat-file /proc/sys/net/core/warnings                    ${FILENET}
    cat-file /proc/sys/net/ipv4/tcp_available_congestion_control   ${FILENET}
    cat-file /proc/sys/net/ipv4/tcp_allowed_congestion_control     ${FILENET}
    cat-file /proc/sys/net/ipv4/ip_forward                  ${FILENET}
    cat-file /proc/sys/net/ipv4/conf/all/forwarding         ${FILENET}
    cat-file /proc/sys/net/ipv4/conf/all/rp_filter          ${FILENET}
    cat-file /proc/sys/net/ipv4/neigh/default/gc_interval   ${FILENET}
    cat-file /proc/sys/net/ipv4/neigh/default/gc_stale_time ${FILENET} 
    cat-file /proc/sys/net/ipv4/neigh/default/gc_thresh1    ${FILENET}
    cat-file /proc/sys/net/ipv4/neigh/default/gc_thresh2    ${FILENET}
    cat-file /proc/sys/net/ipv4/neigh/default/gc_thresh3    ${FILENET}
    cat-file /proc/sys/net/ipv4/route/min_delay             ${FILENET}
    cat-file /proc/sys/net/ipv4/route/max_delay             ${FILENET}
    cat-file /proc/sys/net/ipv6/conf/all/forwarding         ${FILENET}
    cat-file /proc/sys/net/ipv6/conf/all/mtu                ${FILENET}
    cat-file /proc/sys/net/ipv6/neigh/default/gc_interval   ${FILENET}
    cat-file /proc/sys/net/ipv6/neigh/default/gc_stale_time ${FILENET} 
    cat-file /proc/sys/net/ipv6/neigh/default/gc_thresh1    ${FILENET}
    cat-file /proc/sys/net/ipv6/neigh/default/gc_thresh2    ${FILENET}
    cat-file /proc/sys/net/ipv6/neigh/default/gc_thresh3    ${FILENET}

    echo "Should reduce netfilter variables to record"   >> ${FILENET}
    for file in /proc/sys/net/ipv4/netfilter/* ; do
	cat-file "${file}" ${FILENET}
    done
    echo "Should reduce conf variables to record from all interfaces"
    for file in /proc/sys/net/ipv4/conf/*/* ; do
	cat-file "${file}" ${FILENET}
    done


}

function services-update () {
    FILESERVICES=${DIARIO}/services
#     NTPQ=/usr/bin/ntpq
#     HWCLOCK=/sbin/hwclock

    echo -n "."
    > ${FILESERVICES}
    echo "clock services"                                    >> ${FILESERVICES}
    echo "Hardware Clock"                                    >> ${FILESERVICES}
    hwclock --show                                           >> ${FILESERVICES}
    echo -n "."
    echo "ntpq -p"                                           >> ${FILESERVICES}
    ntpq -p                                                  >> ${FILESERVICES}
    echo -n "."
    echo "ntpdc -p"                                          >> ${FILESERVICES}
    ntpdc -p                                                 >> ${FILESERVICES}
    echo -n "."
    echo "ntpdc -c loopinfo"                                 >> ${FILESERVICES}
    ntpdc -c loopinfo                                        >> ${FILESERVICES}
    echo "ntpdc -c kerninfo"                                 >> ${FILESERVICES}
    ntpdc -c kerninfo                                        >> ${FILESERVICES}
    echo "ntptime"                                           >> ${FILESERVICES}
    ntptime                                                  >> ${FILESERVICES}
    FRMT="%5s  %10s  %14s  %10s  %14s  %10s  %4s\n"
    if test -r /var/log/ntpstats/loopstats ; then
	printf "$FRMT"\
	    "day" "second" "offset" "drift comp" "est error" "stab"\
	    "polling interval"\
	    >> ${FILESERVICES}
	tail -n 40 /var/log/ntpstats/loopstats \
	    | awk '{printf "%5s  %10s  %14s  %10s  %14s  %10s  %4s\n",$1,$2,$3,$4,$5,$6,$7}' \
	    >> ${FILESERVICES}
    fi
    if test -r /var/log/ntpstats/peerstats ; then
	FRMT="%5s  %10s  %16s  %6s  %14s  %14s  %14s  %14s\n"
	printf "$FRMT"\
	    "day" "second" "address" "stat" "offset" "delay" "dispersion"\
	    "skew (variance)" >> ${FILESERVICES}
	tail -n 40 /var/log/ntpstats/peerstats \
	    | awk '{printf "%5s  %10s  %16s  %6s  %14s  %14s  %14s  %14s\n",$1,$2,$3,$4,$5,$6,$7,$8}' \
	    >> ${FILESERVICES}
    fi
    echo "Collect info about nsswitch" >> ${FILESERVICES}
    cat-file /etc/nsswitch.conf           ${FILESERVICES}
    cat-file /etc/defaultdomain           ${FILESERVICES}
}

function update-fast-diario () {


    date
    echo -n "  lvm-update begin   "
    lvm-update
    date
    echo -n "  md-update begin   "
    md-update
    date
    echo -n "  fslist-update begin   "
    fslist-update
    date
    echo -n "  fstab-update begin   "
    fstab-update
    date
    echo -n "  kernel-boot begin   "
    kernel-boot
    date
    echo -n "  hardware begin   "
    hardware-update
    echo -n "  hardware finished  "
    date
    smart-update
    echo
    echo -n "smart-update finished   " 
    date
    packages-list-update 
    date
    net-update
    date
    services-update
    date
    echo -n "  kernel-update begin   "
    kernel-update
    echo -n "  kernel-update finished   "
    date
}

function update-slow-diario () {
    date
    echo -n "  hpacucli begin   "
    hpacucli-update &
    #echo -n "  hpacucli finished   "
    echo
    date
    echo -n "  ilo-update begin    "
    ilo-update &
    #echo -n "  ilo-update finished   "
    echo
    date
    echo -n "  partition-update begin   "
    partition-update &
    echo "   Waiting for slow tasks   "
    wait
    echo " Done "
    date
    echo "Doing demanding tasks"
    date
    hwinfo-update
    echo
    echo -n "hwinfo-update finished   " 
    hdparm-update
    echo
    echo -n "hdparm-update finished   " 
    date
    hp-hardware-update
    echo
    echo -n "hp-hardware-update finished   " 
    date
    video-update
    echo
    echo -n "video-update finished   "
    date
    ipmi-update
    echo
    echo -n "ipmi-update finished   "
    date
    twcli-update
    echo
    echo -n "twcli-update finished   "
    date
}

if [ -d ${DIARIO} ] ; then
    if test $# -eq 0 ; then
	update-slow-diario
	update-fast-diario
	wait
    else
	case $1 in
	    slow)
		update-slow-diario 
		;;
	    fast)
		update-fast-diario
		;;
	    all)
		update-slow-diario
		update-fast-diario
		wait
		;;
	    parallel)
		update-slow-diario &
		update-fast-diario &
		wait
		;;
	    *)
		usage
	esac
    fi
else
    echo "Don't exist ${DIARIO} directory, not running"
fi

