#!/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"

    # TODO(jh): Fail when using the old service name otherwise consumers might
    # never notice that is has been removed.
    if is_service_enabled peakmem_tracker; then
        die $LINENO "The peakmem_tracker service has been removed, use memory_tracker instead"
    fi
}

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

# Restore xtrace
$_XTRACE_DSTAT
