52 lines
1.8 KiB
Bash
Executable file
52 lines
1.8 KiB
Bash
Executable file
#!/bin/sh
|
|
# SPDX-FileCopyrightText: 2024 Splunk, Inc.
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
|
|
# shellcheck disable=SC1091
|
|
. "$(dirname "$0")"/common.sh
|
|
|
|
PRINTF='END {printf "%s SystemUpTime=%s\n", DATE, UPTIME}'
|
|
|
|
# On HP-UX the `ps` command will only recognize the `-o` option if
|
|
# the `UNIX95` environment variable is set. So do it.
|
|
#
|
|
# Careful: The `UNIX95` environment variable affects other common
|
|
# commands like `cp`.
|
|
if [ "$KERNEL" = "HP-UX" ]; then
|
|
export UNIX95=1
|
|
fi
|
|
|
|
# This should work for any POSIX-compliant system, but in case it doesn't
|
|
# we have left the individual OS names here to be broken out later on.
|
|
if [ "$KERNEL" = "Linux" ] || [ "$KERNEL" = "SunOS" ] || [ "$KERNEL" = "AIX" ] || [ "$KERNEL" = "HP-UX" ] || [ "$KERNEL" = "Darwin" ] || [ "$KERNEL" = "FreeBSD" ] ; then
|
|
assertHaveCommand date
|
|
assertHaveCommand ps
|
|
CMD='eval date; LC_ALL=POSIX ps -o etime= -p 1'
|
|
# Get the date.
|
|
# shellcheck disable=SC2016
|
|
PARSE_0='NR==1 {DATE=$0}'
|
|
# Parse timestamp using only POSIX AWK functions. The match, do/while,
|
|
# and exponentiation commands may not be available on some systems.
|
|
# shellcheck disable=SC2016
|
|
PARSE_1='NR==2 {
|
|
if (index($1,"-") != 0) {
|
|
split($1, array, "-")
|
|
UPTIME=86400*array[1]
|
|
num=split(array[2], TIME, ":")
|
|
} else {
|
|
UPTIME=0
|
|
num=split($1, TIME, ":")
|
|
}
|
|
for (i=num; i>0; i--) {
|
|
SECS=TIME[i]
|
|
for (j=num-i; j>0; j--) {
|
|
SECS = SECS * 60
|
|
}
|
|
UPTIME = UPTIME + SECS
|
|
}
|
|
}'
|
|
MASSAGE="$PARSE_0 $PARSE_1"
|
|
fi
|
|
|
|
$CMD | tee "$TEE_DEST" | $AWK "$HEADERIZE $MASSAGE $FILL_BLANKS $PRINTF" header="$HEADER"
|
|
echo "Cmd = [$CMD]; | $AWK '$HEADERIZE $MASSAGE $FILL_BLANKS $PRINTF' header=\"$HEADER\"" >> "$TEE_DEST"
|