#!/bin/bash
#
# lib/dstat
# Functions to start and stop dstat

# Dependencies:
#
# - ``functions`` file

# ``stack.sh`` calls the entry points in this order:
#
# - start_dstat
# - stop_dstat

# Save trace setting
XTRACE=$(set +o | grep xtrace)
set +o xtrace


# Defaults
# --------
# for DSTAT logging
DSTAT_FILE=${DSTAT_FILE:-"dstat.log"}


# start_dstat() - Start running processes, including screen
function start_dstat {
    # A better kind of sysstat, with the top process per time slice
    DSTAT_OPTS="-tcmndrylpg --top-cpu-adv --top-io-adv"
    if [[ -n ${LOGDIR} ]]; then
        screen_it dstat "cd $TOP_DIR; dstat $DSTAT_OPTS | tee $LOGDIR/$DSTAT_FILE"
        if [[ -n ${SCREEN_LOGDIR} && ${SCREEN_LOGDIR} != ${LOGDIR} ]]; then
            # Drop the backward-compat symlink
            ln -sf $LOGDIR/$DSTAT_FILE ${SCREEN_LOGDIR}/$DSTAT_FILE
        fi
    else
        screen_it dstat "dstat $DSTAT_OPTS"
    fi
}

# stop_dstat() stop dstat process
function stop_dstat {
    # dstat runs as a console, not as a service, and isn't trackable
    # via the normal mechanisms for devstack. So lets just do a
    # killall and move on.
    killall dstat || /bin/true
}

# Restore xtrace
$XTRACE
