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

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

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

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

# install_dstat() - Install prerequisites for dstat services
function install_dstat {
    if is_service_enabled memory_tracker; then
        # Install python libraries required by tools/mlock_report.py
        pip_install_gr psutil
    fi
}

# start_dstat() - Start running processes
function start_dstat {
    # A better kind of sysstat, with the top process per time slice
    run_process dstat "$TOP_DIR/tools/dstat.sh $LOGDIR"

    # To enable memory_tracker add:
    #    enable_service memory_tracker
    # to your localrc
    run_process memory_tracker "$TOP_DIR/tools/memory_tracker.sh" "" "root"

    # remove support for the old name when it's no longer used (sometime in Queens)
    if is_service_enabled peakmem_tracker; then
        deprecated "Use of peakmem_tracker in devstack is deprecated, use memory_tracker instead"
        run_process peakmem_tracker "$TOP_DIR/tools/memory_tracker.sh" "" "root"
    fi
}

# stop_dstat() stop dstat process
function stop_dstat {
    stop_process dstat
    stop_process memory_tracker
}

# Restore xtrace
$_XTRACE_DSTAT
