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