#!/bin/sh # Copyright (C) 2014-2019 Daniel Baumann # # SPDX-License-Identifier: GPL-3.0+ # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . set -e PROJECT="open-infrastructure" PROGRAM="container" COMMAND="$(basename ${0})" Parameters () { GETOPT_LONGOPTIONS="delay:," GETOPT_OPTIONS="d:," PARAMETERS="$(getopt --longoptions ${GETOPT_LONGOPTIONS} --name=${COMMAND} --options ${GETOPT_OPTIONS} --shell sh -- ${@})" if [ "${?}" != "0" ] then echo "'${COMMAND}': getopt exit" >&2 exit 1 fi eval set -- "${PARAMETERS}" while true do case "${1}" in -d|--delay) DELAY="${2}" shift 2 ;; --) shift 1 break ;; *) echo "'${COMMAND}': getopt error" >&2 exit 1 ;; esac done } Usage () { echo "Usage: ${PROGRAM} ${COMMAND} [-d|--delay DELAY]" >&2 exit 1 } Parameters "${@}" DELAY="${DELAY:-1}" HOST="$(hostname -f 2> /dev/null || hostname)" # Pre hooks for FILE in "${HOOKS}/pre-${COMMAND}".* "${HOOKS}/${NAME}.pre-${COMMAND}" do if [ -x "${FILE}" ] then "${FILE}" fi done # Run Top () { HOME="$(tput cup 0 0)" ED="$(tput ed)" EL="$(tput el)" printf '%s%s' "${HOME}" "${ED}" while true do ROWS="$(tput lines)" COLS="$(tput cols)" CMD="${@}" ${SHELL:=sh} -c "${CMD}" | head -n ${ROWS} | while IFS= read LINE do printf '%-*.*s%s\n' ${COLS} ${COLS} "${LINE}" "${EL}" done printf '%s%s' "${ED}" "${HOME}" sleep ${DELAY} done } trap 'clear' EXIT HUP INT QUIT TERM Top "${PROGRAM} list && printf '%-59s %-19s\n' \" Host: ${HOST}\" \"\$(date +%Y-%m-%d\ %H:%M:%S)\"" # Post hooks for FILE in "${HOOKS}/post-${COMMAND}".* "${HOOKS}/${NAME}.post-${COMMAND}" do if [ -x "${FILE}" ] then "${FILE}" fi done