297 lines
9.0 KiB
Bash
Executable File
297 lines
9.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# Copyright (C) 2019 tribe29 GmbH - License: GNU General Public License v2
|
|
# This file is part of Checkmk (https://checkmk.com). It is subject to the terms and
|
|
# conditions defined in the file COPYING, which is part of this source code package.
|
|
|
|
# Reason for this no-op: shellcheck disable=... before the first command disables the error for the
|
|
# entire script.
|
|
:
|
|
|
|
# Disable unused variable error (needed to keep track of version)
|
|
# shellcheck disable=SC2034
|
|
CMK_VERSION="2.0.0p17"
|
|
|
|
# Informix
|
|
# Make ENV-VARs avail for subshells
|
|
set -a
|
|
|
|
# .--helper--------------------------------------------------------------.
|
|
# | _ _ |
|
|
# | | |__ ___| |_ __ ___ _ __ |
|
|
# | | '_ \ / _ \ | '_ \ / _ \ '__| |
|
|
# | | | | | __/ | |_) | __/ | |
|
|
# | |_| |_|\___|_| .__/ \___|_| |
|
|
# | |_| |
|
|
# '----------------------------------------------------------------------'
|
|
|
|
|
|
function do_check () {
|
|
# $1:section, $2:excludelist
|
|
if echo "$2" | grep -qe "${1}"; then
|
|
return 1
|
|
else
|
|
return 0
|
|
fi
|
|
}
|
|
|
|
|
|
function sql () {
|
|
db="sysmaster"
|
|
sqltxt="$1"
|
|
export DBDELIMITER="|"
|
|
echo "$sqltxt" | dbaccess ${db}
|
|
}
|
|
|
|
|
|
function set_excludes () {
|
|
excludes=""
|
|
if [ "$EXCLUDES" = "ALL" ]; then
|
|
excludes="$all_sections"
|
|
global_exclude=true
|
|
elif [ ! -z "$EXCLUDES" ]; then
|
|
excludes=$EXCLUDES
|
|
global_exclude=true
|
|
else
|
|
global_exclude=false
|
|
fi
|
|
|
|
if [ "$global_exclude" = "false" ]; then
|
|
excludes_i="EXCLUDES_${1}"
|
|
if [ "${!excludes_i}" = "ALL" ]; then
|
|
excludes="$all_sections"
|
|
elif [ ! -z "${!excludes_i}" ]; then
|
|
excludes=${!excludes_i}
|
|
fi
|
|
fi
|
|
}
|
|
|
|
|
|
#.
|
|
# .--sqls----------------------------------------------------------------.
|
|
# | _ |
|
|
# | ___ __ _| |___ |
|
|
# | / __|/ _` | / __| |
|
|
# | \__ \ (_| | \__ \ |
|
|
# | |___/\__, |_|___/ |
|
|
# | |_| |
|
|
# '----------------------------------------------------------------------'
|
|
|
|
|
|
all_sections="sessions locks tabextents dbspaces logusage"
|
|
|
|
|
|
function informix_status(){
|
|
echo "<<<informix_status:sep(58)>>>"
|
|
echo "[[[$INFORMIXSERVER/$SERVERNUM]]]"
|
|
$INFORMIXDIR/bin/onstat - >/dev/null 2>&1
|
|
state=$?
|
|
echo "Status:"$state
|
|
$INFORMIXDIR/bin/onstat -g dis
|
|
port=$(grep $INFORMIXSERVER /etc/services)
|
|
echo "PORT:"$port
|
|
}
|
|
|
|
|
|
function informix_sessions(){
|
|
echo "<<<informix_sessions>>>"
|
|
echo "[[[$INFORMIXSERVER/$SERVERNUM]]]"
|
|
# don't count our own session
|
|
sql "select 'SESSIONS', (count(*)-1)::int from syssessions"
|
|
}
|
|
|
|
|
|
function informix_locks(){
|
|
echo "<<<informix_locks>>>"
|
|
echo "[[[$INFORMIXSERVER/$SERVERNUM]]]"
|
|
# don't count our own session
|
|
sql "select 'LOCKS', (count(*)-1)::int, type from syslocks group by type"
|
|
}
|
|
|
|
|
|
function informix_tabextents(){
|
|
echo "<<<informix_tabextents>>>"
|
|
echo "[[[$INFORMIXSERVER/$SERVERNUM]]]"
|
|
sql "select first 10
|
|
'TABEXTENTS',
|
|
trim(n.dbsname) db,
|
|
trim(n.tabname) tab,
|
|
h.nextns extents,
|
|
nrows
|
|
from sysptnhdr h, systabnames n
|
|
where h.partnum = n.partnum
|
|
and nrows > 0
|
|
and n.dbsname not in ( 'sysadmin', 'sysuser', 'sysutils', 'sysmaster' )
|
|
and n.tabname not like 'sys%'
|
|
order by extents desc"
|
|
}
|
|
|
|
|
|
function informix_dbspaces(){
|
|
echo "<<<informix_dbspaces>>>"
|
|
echo "[[[$INFORMIXSERVER/$SERVERNUM]]]"
|
|
sql "select
|
|
trim(sd.name) || ' DBSPACE',
|
|
sd.dbsnum,
|
|
sd.is_temp,
|
|
sd.flags,
|
|
'CHUNK',
|
|
sc.fname,
|
|
sc.pagesize,
|
|
sc.chksize,
|
|
sc.nfree,
|
|
sc.flags,
|
|
trim(sc.mfname),
|
|
sc.mflags
|
|
from sysdbspaces sd, syschunks sc
|
|
where sd.dbsnum = sc.dbsnum
|
|
-- NO SBSPACE CURRENTLY
|
|
and sd.is_sbspace = 0
|
|
order by sd.name"
|
|
}
|
|
|
|
|
|
function informix_logusage(){
|
|
echo "<<<informix_logusage>>>"
|
|
echo "[[[$INFORMIXSERVER/$SERVERNUM]]]"
|
|
sql "select 'LOGUSAGE',
|
|
number,
|
|
sh_pagesize,
|
|
size,
|
|
used,
|
|
flags,
|
|
'is_used:'||is_used,
|
|
'is_current:'||is_current,
|
|
'is_backed_up:'||is_backed_up,
|
|
'is_new:'||is_new,
|
|
'is_archived:'||is_archived,
|
|
'is_temp:'||is_temp,
|
|
'is_pre_dropped:'||is_pre_dropped
|
|
from syslogs, sysshmvals
|
|
order by number"
|
|
}
|
|
|
|
|
|
function informix_transactions(){
|
|
echo "<<<informix_transactions>>>"
|
|
echo "[[[$INFORMIXSERVER/$SERVERNUM]]]"
|
|
$INFORMIXDIR/bin/onstat -l | grep C | tail -n 1
|
|
$INFORMIXDIR/bin/onstat -x |egrep -v "IBM|maximum|Transactions|est.|userthread" | sed 's/:[^:]*$//'
|
|
}
|
|
#.
|
|
# .--config--------------------------------------------------------------.
|
|
# | __ _ |
|
|
# | ___ ___ _ __ / _(_) __ _ |
|
|
# | / __/ _ \| '_ \| |_| |/ _` | |
|
|
# | | (_| (_) | | | | _| | (_| | |
|
|
# | \___\___/|_| |_|_| |_|\__, | |
|
|
# | |___/ |
|
|
# '----------------------------------------------------------------------'
|
|
|
|
|
|
# Config opts:
|
|
# - oninit-path; Default is empty, which means autodetection:
|
|
# ONINIT_PATH=<path to oninit-binary>
|
|
# - Excluding sections ("status sessions locks tabextents dbspaces logusage"):
|
|
# EXCLUDES_INFORMIX_INSTANCE="SECTION SECTION ..."
|
|
# EXCLUDES_INFORMIX_INSTANCE=ALL
|
|
# EXCLUDES="SECTION SECTION ..."
|
|
# EXCLUDES=ALL
|
|
|
|
|
|
if [ -f "$MK_CONFDIR/informix.cfg" ]; then
|
|
. $MK_CONFDIR/informix.cfg
|
|
fi
|
|
|
|
|
|
if [ -z "$ONINIT_PATH" -o ! -x "$ONINIT_PATH" ]; then
|
|
ONINIT=$(UNIX95=true ps ax | grep oninit | grep -v grep | head -1 | awk '{print $1 " " $5}')
|
|
if [ -z "$ONINIT" ]; then
|
|
exit 0
|
|
fi
|
|
|
|
ONINIT_PATH=${ONINIT#* }
|
|
ONINIT_PID=${ONINIT% *}
|
|
case "$ONINIT_PATH" in
|
|
/*)
|
|
;;
|
|
*) # BUG not platform independent!
|
|
ONINIT_PATH=$(ls -l /proc/$ONINIT_PID/exe 2>/dev/null| sed 's/.* //')
|
|
;;
|
|
esac
|
|
|
|
# If not set in config or not found we end up here
|
|
if [ -z "$ONINIT_PATH" -o ! -f "$ONINIT_PATH" ]; then
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
|
|
#.
|
|
# .--main----------------------------------------------------------------.
|
|
# | _ |
|
|
# | _ __ ___ __ _(_)_ __ |
|
|
# | | '_ ` _ \ / _` | | '_ \ |
|
|
# | | | | | | | (_| | | | | | |
|
|
# | |_| |_| |_|\__,_|_|_| |_| |
|
|
# | |
|
|
# '----------------------------------------------------------------------'
|
|
|
|
|
|
for IDSENV in $( export INFORMIXDIR=${ONINIT_PATH%/bin*}
|
|
$INFORMIXDIR/bin/onstat -g dis | \
|
|
egrep '^Server[ ]*:|^Server Number[ ]*:|^INFORMIX|^SQLHOSTS|^ONCONFIG' | \
|
|
sed -e 's/Server Number/SERVERNUM/' \
|
|
-e 's/Server/INFORMIXSERVER/' \
|
|
-e 's/SQLHOSTS/INFORMIXSQLHOSTS/' \
|
|
-e 's/[ ]*:[ ]*/=/' | \
|
|
tr '\n' ';' | \
|
|
sed -e 's/;$/\\n/' -e 's/;\(INFORMIXSERVER=[^;]*;\)/\\n\1/g' | \
|
|
awk '{ gsub(/\\n/,"\n")}1'
|
|
) ; do
|
|
(
|
|
# Set environment
|
|
eval $IDSENV
|
|
PATH=$INFORMIXDIR/bin:$PATH
|
|
|
|
# try to set them via 'onstat -g env' otherwise
|
|
# DB HAS TO BE RUNNING
|
|
if [ -z "$INFORMIXSQLHOSTS" -o -z "$ONCONFIG" ]; then
|
|
onstat -g env | egrep -e '^INFORMIXSQLHOSTS' \
|
|
-e '^ONCONFIG' | \
|
|
sed -e 's/[ ][ ]*/=/'
|
|
fi
|
|
|
|
informix_status
|
|
|
|
set_excludes $INFORMIXSERVER
|
|
|
|
if do_check "sessions" "$excludes"; then
|
|
informix_sessions
|
|
fi
|
|
|
|
if do_check "locks" "$excludes"; then
|
|
informix_locks
|
|
fi
|
|
|
|
if do_check "tabextents" "$excludes"; then
|
|
informix_tabextents
|
|
fi
|
|
|
|
if do_check "dbspaces" "$excludes"; then
|
|
informix_dbspaces
|
|
fi
|
|
|
|
if do_check "logusage" "$excludes"; then
|
|
informix_logusage
|
|
fi
|
|
|
|
if do_check "transactions" "$excludes"; then
|
|
informix_transactions
|
|
fi
|
|
|
|
)
|
|
done
|
|
|
|
|
|
|