mirror of
https://github.com/limosek/zaf.git
synced 2024-11-21 18:09:06 +01:00
New syntax and tests
This commit is contained in:
parent
76ba5b9ad9
commit
957c53958c
40
install.sh
40
install.sh
@ -1,6 +1,7 @@
|
|||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
[ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1
|
[ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1
|
||||||
|
export ZAF_LOG_STDERR="-s"
|
||||||
if [ -z "$ZAF_URL" ]; then
|
if [ -z "$ZAF_URL" ]; then
|
||||||
# Runing as standalone install.sh. We have to download rest of files first.
|
# Runing as standalone install.sh. We have to download rest of files first.
|
||||||
ZAF_URL="https://github.com/limosek/zaf/"
|
ZAF_URL="https://github.com/limosek/zaf/"
|
||||||
@ -8,20 +9,28 @@ fi
|
|||||||
|
|
||||||
[ -z "$ZAF_GITBRANCH" ] && ZAF_GITBRANCH=1.2
|
[ -z "$ZAF_GITBRANCH" ] && ZAF_GITBRANCH=1.2
|
||||||
|
|
||||||
|
ZAF_TMP_DIR="/tmp/zaf-installer"
|
||||||
|
ZAF_DIR="$ZAF_TMP_DIR/zaf"
|
||||||
|
|
||||||
# Lite version of zaf_fetch_url, full version will be loaded later
|
# Lite version of zaf_fetch_url, full version will be loaded later
|
||||||
zaf_fetch_url(){
|
zaf_fetch_url(){
|
||||||
if [ -z "$ZAF_OFFLINE" ]; then
|
echo curl -f -k -s -L -o - "$1" >&2;
|
||||||
echo curl -f -k -s -L -o - "$1" >&2; curl -f -k -s -L -o - "$1"
|
curl -f -k -s -L -o - "$1"
|
||||||
else
|
|
||||||
echo "Offline mode wants to download $1. Exiting." >&2
|
|
||||||
exit 2
|
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Download tgz and extract to /tmp/zaf-installer
|
# Lite version of zaf_err, full version will be loaded later
|
||||||
|
zaf_err() {
|
||||||
|
logger ${ZAF_LOG_STDERR} -p user.err -t zaf-error -- $@
|
||||||
|
logger ${ZAF_LOG_STDERR} -p user.err -t zaf-error "Exiting with error!"
|
||||||
|
exit 1
|
||||||
|
}
|
||||||
|
|
||||||
|
# Download tgz and extract to tmpdir
|
||||||
zaf_download_files() {
|
zaf_download_files() {
|
||||||
rm -rf /tmp/zaf-installer
|
[ -n $ZAF_DIR ] && zaf_err "ZAF_DIR not set!"
|
||||||
zaf_fetch_url $ZAF_URL/archive/$ZAF_GITBRANCH.tar.gz | tar -f - -C /tmp -zx && mv /tmp/zaf-$ZAF_GITBRANCH /tmp/zaf-installer
|
rm -rf $ZAF_DIR
|
||||||
|
zaf_fetch_url $ZAF_URL/archive/$ZAF_GITBRANCH.tar.gz | tar -f - -C $ZAF_TMP_DIR -zx && mv $ZAF_TMP_DIR/zaf-$ZAF_GITBRANCH $ZAF_DIR \
|
||||||
|
|| zaf_err "Cannot download and unpack zaf!"
|
||||||
}
|
}
|
||||||
|
|
||||||
if ! [ -f README.md ]; then
|
if ! [ -f README.md ]; then
|
||||||
@ -32,7 +41,7 @@ if ! [ -f README.md ]; then
|
|||||||
fi
|
fi
|
||||||
echo "Installing from url $url..."
|
echo "Installing from url $url..."
|
||||||
[ -z "$*" ] && auto=auto
|
[ -z "$*" ] && auto=auto
|
||||||
zaf_download_files && cd /tmp/zaf-installer && exec ./install.sh $auto "$@"
|
zaf_download_files && cd $ZAF_DIR && exec ./install.sh $auto "$@"
|
||||||
echo "Error downloading and runing installer!" >&2
|
echo "Error downloading and runing installer!" >&2
|
||||||
exit 2
|
exit 2
|
||||||
fi
|
fi
|
||||||
@ -276,7 +285,7 @@ zaf_configure(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
zaf_install_all() {
|
zaf_install_all() {
|
||||||
rm -rif ${ZAF_TMP_DIR}
|
rm -rf ${ZAF_TMP_DIR}
|
||||||
mkdir -p ${ZAF_TMP_DIR}
|
mkdir -p ${ZAF_TMP_DIR}
|
||||||
zaf_install_dir ${ZAF_LIB_DIR}
|
zaf_install_dir ${ZAF_LIB_DIR}
|
||||||
for i in lib/zaf.lib.sh lib/plugin.lib.sh lib/os.lib.sh lib/ctrl.lib.sh lib/cache.lib.sh lib/zbxapi.lib.sh lib/JSON.sh README.md; do
|
for i in lib/zaf.lib.sh lib/plugin.lib.sh lib/os.lib.sh lib/ctrl.lib.sh lib/cache.lib.sh lib/zbxapi.lib.sh lib/JSON.sh README.md; do
|
||||||
@ -317,14 +326,15 @@ zaf_postconfigure() {
|
|||||||
if [ -f "${ZAF_CFG_FILE}" ]; then
|
if [ -f "${ZAF_CFG_FILE}" ]; then
|
||||||
. "${ZAF_CFG_FILE}"
|
. "${ZAF_CFG_FILE}"
|
||||||
fi
|
fi
|
||||||
ZAF_TMP_DIR="/tmp/zaf-installer-tmp/"
|
ZAF_TMP_DIR="/tmp/zaf-installer/"
|
||||||
|
! [ -d "${ZAF_TMP_DIR}" ] && mkdir "${ZAF_TMP_DIR}"
|
||||||
|
|
||||||
# If debug is on, do not remove tmp dir
|
# If debug is on, do not remove tmp dir
|
||||||
if [ "$ZAF_DEBUG" -le 3 ]; then
|
if [ "$ZAF_DEBUG" -le 3 ]; then
|
||||||
trap "rm -rif ${ZAF_TMP_DIR}" EXIT
|
trap "rm -rf ${ZAF_TMP_DIR} " EXIT
|
||||||
trap "rm -rif /tmp/zaf-installer" EXIT
|
else
|
||||||
|
trap 'zaf_wrn "Leaving $ZAF_TMP_DIR" contents due to ZAF_DEBUG.' EXIT
|
||||||
fi
|
fi
|
||||||
! [ -d "${ZAF_TMP_DIR}" ] && mkdir "${ZAF_TMP_DIR}"
|
|
||||||
|
|
||||||
case $1 in
|
case $1 in
|
||||||
interactive)
|
interactive)
|
||||||
|
@ -9,7 +9,7 @@ zaf_cache_clean(){
|
|||||||
fi
|
fi
|
||||||
mkdir -p "$ZAF_CACHE_DIR"
|
mkdir -p "$ZAF_CACHE_DIR"
|
||||||
if zaf_is_root; then
|
if zaf_is_root; then
|
||||||
chmod g+rwx "$ZAF_CACHE_DIR"
|
chmod 770 "$ZAF_CACHE_DIR"
|
||||||
chgrp zabbix "$ZAF_CACHE_DIR"
|
chgrp zabbix "$ZAF_CACHE_DIR"
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
@ -86,6 +86,7 @@ zaf_fromcache(){
|
|||||||
local value
|
local value
|
||||||
key=$(zaf_cache_key "$1")
|
key=$(zaf_cache_key "$1")
|
||||||
if [ -f $ZAF_CACHE_DIR/$key ]; then
|
if [ -f $ZAF_CACHE_DIR/$key ]; then
|
||||||
|
! [ -f "$ZAF_CACHE_DIR/$key.info" ] && { return 3; }
|
||||||
if [ "$ZAF_CACHE_DIR/$key.info" -nt "$ZAF_CACHE_DIR/$key" ]; then
|
if [ "$ZAF_CACHE_DIR/$key.info" -nt "$ZAF_CACHE_DIR/$key" ]; then
|
||||||
zaf_trc "Cache: serving $1($key) from cache"
|
zaf_trc "Cache: serving $1($key) from cache"
|
||||||
cat $ZAF_CACHE_DIR/$key
|
cat $ZAF_CACHE_DIR/$key
|
||||||
|
@ -191,20 +191,28 @@ zaf_ctrl_generate_cfg() {
|
|||||||
local ikey
|
local ikey
|
||||||
local lock
|
local lock
|
||||||
local cache
|
local cache
|
||||||
|
local tmpfile
|
||||||
|
local pname
|
||||||
|
local pdefault
|
||||||
|
local pregex
|
||||||
|
local prest
|
||||||
|
local zafparms
|
||||||
|
|
||||||
items=$(zaf_ctrl_get_items <"$1")
|
items=$(zaf_ctrl_get_items <"$1")
|
||||||
|
tmpfile=$ZAF_TMP_DIR/gencfg$$
|
||||||
(set -e
|
(set -e
|
||||||
for i in $items; do
|
for i in $items; do
|
||||||
iscript=$(zaf_stripctrl $i)
|
iscript=$(zaf_stripctrl $i)
|
||||||
params=$(zaf_ctrl_get_item_option $1 $i "Parameters")
|
zaf_ctrl_get_item_option $1 $i "Parameters" >$tmpfile
|
||||||
if [ -n "$params" ]; then
|
if [ -s "$tmpfile" ]; then
|
||||||
ikey="$2.$i[*]"
|
ikey="$2.$i[*]"
|
||||||
args=""
|
args=""
|
||||||
apos=1;
|
apos=1;
|
||||||
for p in $params; do
|
while read pname pdefault pregex prest; do
|
||||||
|
zafparams="$zafparams value=\"\$$apos\"; zaf_agentparm $pname $pdefault $pregex;"
|
||||||
args="$args \$$apos"
|
args="$args \$$apos"
|
||||||
apos=$(expr $apos + 1)
|
apos=$(expr $apos + 1)
|
||||||
done
|
done <$tmpfile
|
||||||
else
|
else
|
||||||
ikey="$2.$i"
|
ikey="$2.$i"
|
||||||
fi
|
fi
|
||||||
@ -223,16 +231,18 @@ zaf_ctrl_generate_cfg() {
|
|||||||
preload=""
|
preload=""
|
||||||
fi
|
fi
|
||||||
if [ -n "$cmd" ]; then
|
if [ -n "$cmd" ]; then
|
||||||
printf "%s" "UserParameter=$ikey,${preload}${cache}${lock}${cmd}"; echo
|
printf "%s" "UserParameter=$ikey,export ITEM_KEY='$ikey'; ${preload}${cache}${lock}${cmd}"; echo
|
||||||
continue
|
continue
|
||||||
fi
|
fi
|
||||||
cmd=$(zaf_ctrl_get_item_option $1 $i "Script")
|
cmd=$(zaf_ctrl_get_item_option $1 $i "Script")
|
||||||
if [ -n "$cmd" ]; then
|
if [ -n "$cmd" ]; then
|
||||||
zaf_ctrl_get_item_option $1 $i "Script" | \
|
( echo "#!/bin/sh"
|
||||||
zaf_far '{INCLUDES}' ". $ZAF_LIB_DIR/preload.sh; " \
|
echo ". $ZAF_LIB_DIR/preload.sh; "
|
||||||
>${ZAF_TMP_DIR}/${iscript}.sh;
|
echo "$zafparams"
|
||||||
|
zaf_ctrl_get_item_option $1 $i "Script"
|
||||||
|
) >${ZAF_TMP_DIR}/${iscript}.sh;
|
||||||
[ -z "$3" ] && zaf_install_bin ${ZAF_TMP_DIR}/${iscript}.sh ${ZAF_PLUGINS_DIR}/$2/
|
[ -z "$3" ] && zaf_install_bin ${ZAF_TMP_DIR}/${iscript}.sh ${ZAF_PLUGINS_DIR}/$2/
|
||||||
printf "%s" "UserParameter=$ikey,${preload}${cache}${lock}${ZAF_PLUGINS_DIR}/$2/${iscript}.sh $args"; echo
|
printf "%s" "UserParameter=$ikey,export ITEM_KEY='$ikey'; ${preload}${cache}${lock}${ZAF_PLUGINS_DIR}/$2/${iscript}.sh $args"; echo
|
||||||
continue;
|
continue;
|
||||||
fi
|
fi
|
||||||
zaf_err "Item $i declared in control file but has no Cmd, Function or Script!"
|
zaf_err "Item $i declared in control file but has no Cmd, Function or Script!"
|
||||||
|
@ -218,6 +218,30 @@ zaf_list_plugin_items() {
|
|||||||
echo
|
echo
|
||||||
}
|
}
|
||||||
|
|
||||||
|
zaf_item_info() {
|
||||||
|
local plugin
|
||||||
|
local item
|
||||||
|
|
||||||
|
plugin=$(echo $1 | cut -d '.' -f 1)
|
||||||
|
item=$(echo $1 | cut -d '.' -f 2-)
|
||||||
|
if zaf_is_plugin $plugin; then
|
||||||
|
if zaf_ctrl_get_items <$ZAF_PLUGINS_DIR/$plugin/control.zaf | grep -wq "$item"; then
|
||||||
|
echo "Item $1:"
|
||||||
|
echo -n "Cache: "; zaf_ctrl_get_item_option $ZAF_PLUGINS_DIR/$plugin/control.zaf "$item" "Cache"; echo
|
||||||
|
echo "Parameters:"
|
||||||
|
zaf_ctrl_get_item_option $ZAF_PLUGINS_DIR/$plugin/control.zaf "$item" "Parameters" ; echo
|
||||||
|
echo "Testparameters:"
|
||||||
|
zaf_ctrl_get_item_option $ZAF_PLUGINS_DIR/$plugin/control.zaf "$item" "Testparameters" ; echo
|
||||||
|
echo "Precache:"
|
||||||
|
zaf_ctrl_get_item_option $ZAF_PLUGINS_DIR/$plugin/control.zaf "$item" "Precache" ; echo
|
||||||
|
else
|
||||||
|
zaf_err "No such item $item."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
zaf_err "No such plugin $plugin."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
zaf_list_items() {
|
zaf_list_items() {
|
||||||
for p in $(zaf_list_plugins); do
|
for p in $(zaf_list_plugins); do
|
||||||
echo $p: $(zaf_list_plugin_items $p)
|
echo $p: $(zaf_list_plugin_items $p)
|
||||||
@ -226,7 +250,7 @@ zaf_list_items() {
|
|||||||
|
|
||||||
zaf_get_item() {
|
zaf_get_item() {
|
||||||
if which zabbix_get >/dev/null; then
|
if which zabbix_get >/dev/null; then
|
||||||
zaf_dbg zabbix_get -s localhost -k "'$1'"
|
zaf_trc zabbix_get -s localhost -k "'$1'"
|
||||||
(zabbix_get -s localhost -k "$1" | tr '\n' ' '; echo) || zaf_wrn "Cannot reach agent on localhost. Please localhost to Server list."
|
(zabbix_get -s localhost -k "$1" | tr '\n' ' '; echo) || zaf_wrn "Cannot reach agent on localhost. Please localhost to Server list."
|
||||||
return 11
|
return 11
|
||||||
else
|
else
|
||||||
@ -236,6 +260,7 @@ zaf_get_item() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
zaf_test_item() {
|
zaf_test_item() {
|
||||||
|
zaf_trc $ZAF_AGENT_BIN -t "'$1'"
|
||||||
if $ZAF_AGENT_BIN -t "$1" | grep ZBX_NOTSUPPORTED; then
|
if $ZAF_AGENT_BIN -t "$1" | grep ZBX_NOTSUPPORTED; then
|
||||||
return 1
|
return 1
|
||||||
else
|
else
|
||||||
|
@ -2,27 +2,46 @@
|
|||||||
|
|
||||||
. /etc/zaf.conf
|
. /etc/zaf.conf
|
||||||
|
|
||||||
[ -z "$ZAF_TMP_BASE" ] && ZAF_TMP_BASE=/tmp/zaf
|
|
||||||
ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}"
|
|
||||||
[ -z "$ZAF_CACHE_DIR" ] && ZAF_CACHE_DIR=${ZAF_TMP_BASE}c
|
|
||||||
|
|
||||||
trap "rm -rif ${ZAF_TMP_DIR}" EXIT
|
|
||||||
! [ -d "${ZAF_TMP_DIR}" ] && mkdir "${ZAF_TMP_DIR}"
|
|
||||||
! [ -d "${ZAF_CACHE_DIR}" ] && mkdir "${ZAF_CACHE_DIR}"
|
|
||||||
[ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1
|
|
||||||
|
|
||||||
. ${ZAF_LIB_DIR}/zaf.lib.sh
|
. ${ZAF_LIB_DIR}/zaf.lib.sh
|
||||||
|
. ${ZAF_LIB_DIR}/plugin.lib.sh
|
||||||
. ${ZAF_LIB_DIR}/ctrl.lib.sh
|
. ${ZAF_LIB_DIR}/ctrl.lib.sh
|
||||||
. ${ZAF_LIB_DIR}/os.lib.sh
|
. ${ZAF_LIB_DIR}/os.lib.sh
|
||||||
. ${ZAF_LIB_DIR}/zbxapi.lib.sh
|
. ${ZAF_LIB_DIR}/zbxapi.lib.sh
|
||||||
. ${ZAF_LIB_DIR}/cache.lib.sh
|
. ${ZAF_LIB_DIR}/cache.lib.sh
|
||||||
|
|
||||||
|
[ -z "$ZAF_TMP_BASE" ] && ZAF_TMP_BASE=/tmp/zaf
|
||||||
|
[ -z "$ZAF_TMP_DIR" ] && ZAF_TMP_DIR="${ZAF_TMP_BASE}-$(zaf_random)"
|
||||||
|
[ -z "$ZAF_CACHE_DIR" ] && ZAF_CACHE_DIR=${ZAF_TMP_BASE}c
|
||||||
|
|
||||||
|
rm -rf "${ZAF_TMP_DIR}"
|
||||||
|
|
||||||
|
if ! [ -d "${ZAF_TMP_DIR}" ]; then
|
||||||
|
mkdir "${ZAF_TMP_DIR}"
|
||||||
|
fi
|
||||||
|
|
||||||
|
! [ -d "${ZAF_CACHE_DIR}" ] && mkdir "${ZAF_CACHE_DIR}"
|
||||||
|
[ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1
|
||||||
|
|
||||||
|
if [ "$ZAF_DEBUG" -le 3 ]; then
|
||||||
|
trap "rm -rf ${ZAF_TMP_DIR}" EXIT
|
||||||
|
else
|
||||||
|
trap 'zaf_wrn "Leaving $ZAF_TMP_DIR" contents due to ZAF_DEBUG.' EXIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
#trap 'touch /tmp/aaaa' ALARM
|
||||||
|
|
||||||
export ZAF_LIB_DIR
|
export ZAF_LIB_DIR
|
||||||
export ZAF_TMP_DIR
|
export ZAF_TMP_DIR
|
||||||
export ZAF_CACHE_DIR
|
export ZAF_CACHE_DIR
|
||||||
export ZAF_PLUGINS_DIR
|
export ZAF_PLUGINS_DIR
|
||||||
|
export ZAF_DEBUG
|
||||||
|
unset ZAF_LOG_STDERR
|
||||||
|
export PATH=$ZAF_LIB_DIR:$ZAF_BIN_DIR:$PATH
|
||||||
|
|
||||||
[ "$(basename $0)" = "preload.sh" ] && [ -n "$*" ] && $@
|
if [ "$(basename $0)" = "preload.sh" ] && [ -n "$*" ]; then
|
||||||
|
tmpf=$(zaf_tmpfile preload)
|
||||||
|
$@ 2>$tmpf
|
||||||
|
[ -s $tmpf ] && zaf_wrn <$tmpf
|
||||||
|
fi
|
||||||
|
|
||||||
|
|
||||||
|
@ -11,17 +11,17 @@ zaf_msg() {
|
|||||||
echo $@
|
echo $@
|
||||||
}
|
}
|
||||||
zaf_trc() {
|
zaf_trc() {
|
||||||
[ "$ZAF_DEBUG" -ge "3" ] && logger -p user.info -s -t zaf-trace -- $@
|
[ "$ZAF_DEBUG" -ge "3" ] && logger -p user.info ${ZAF_LOG_STDERR} -t zaf-trace -- $@
|
||||||
}
|
}
|
||||||
zaf_dbg() {
|
zaf_dbg() {
|
||||||
[ "$ZAF_DEBUG" -ge "2" ] && logger -p user.debug -s -t zaf-debug -- $@
|
[ "$ZAF_DEBUG" -ge "2" ] && logger -p user.debug ${ZAF_LOG_STDERR} -t zaf-debug -- $@
|
||||||
}
|
}
|
||||||
zaf_wrn() {
|
zaf_wrn() {
|
||||||
[ "$ZAF_DEBUG" -ge "1" ] && logger -p user.warn -s -t zaf-warning -- $@
|
[ "$ZAF_DEBUG" -ge "1" ] && logger -p user.warn ${ZAF_LOG_STDERR} -t zaf-warning -- $@
|
||||||
}
|
}
|
||||||
zaf_err() {
|
zaf_err() {
|
||||||
logger -s -p user.err -t zaf-error -- $@
|
logger ${ZAF_LOG_STDERR} -p user.err -t zaf-error -- $@
|
||||||
logger -s -p user.err -t zaf-error "Exiting with error!"
|
logger ${ZAF_LOG_STDERR} -p user.err -t zaf-error "Exiting with error!"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
# Help option
|
# Help option
|
||||||
@ -43,6 +43,31 @@ zaf_version(){
|
|||||||
echo $ZAF_VERSION
|
echo $ZAF_VERSION
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Add parameter for agent check
|
||||||
|
# $1 parameter name (will be set to var)
|
||||||
|
# $2 if nonempty, it is default value. If empty, parameter is mandatory
|
||||||
|
# $3 if nonempty, regexp to test
|
||||||
|
zaf_agentparm(){
|
||||||
|
local name
|
||||||
|
local default
|
||||||
|
local regexp
|
||||||
|
|
||||||
|
name="$1"
|
||||||
|
default="$2"
|
||||||
|
regexp="$3"
|
||||||
|
|
||||||
|
[ -z "$value" ] && [ -z "$default" ] && zaf_err "$ITEM_KEY: Missing mandatory parameter $name."
|
||||||
|
if [ -z "$value" ]; then
|
||||||
|
value="$default"
|
||||||
|
else
|
||||||
|
if [ -n "$regexp" ]; then
|
||||||
|
echo "$value" | grep -qE "$regexp" || zaf_err "$ITEM_KEY: Bad parameter '$name' value '$value' (not in regexp '$regexp')."
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
eval $name=$value
|
||||||
|
zaf_trc "$ITEM_KEY: Param $name set to $value"
|
||||||
|
}
|
||||||
|
|
||||||
# Fetch url to stdout
|
# Fetch url to stdout
|
||||||
# $1 url
|
# $1 url
|
||||||
# It supports real file, file:// and other schemes known by curl
|
# It supports real file, file:// and other schemes known by curl
|
||||||
@ -211,3 +236,14 @@ zaf_date_add() {
|
|||||||
date -d "$1 seconds" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || date -d "$(expr $(date +%s) + $1)" -D %s "+%Y-%m-%d %H:%M:%S"
|
date -d "$1 seconds" "+%Y-%m-%d %H:%M:%S" 2>/dev/null || date -d "$(expr $(date +%s) + $1)" -D %s "+%Y-%m-%d %H:%M:%S"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Create temp file and return its name
|
||||||
|
# $1 prefix or empty
|
||||||
|
zaf_tmpfile() {
|
||||||
|
echo "$ZAF_TMP_DIR/tmp$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# return random number
|
||||||
|
zaf_random() {
|
||||||
|
hexdump -n 2 -e '/2 "%u"' /dev/urandom
|
||||||
|
}
|
||||||
|
|
||||||
|
23
lib/zafcache
23
lib/zafcache
@ -10,8 +10,25 @@ seconds=$1
|
|||||||
shift
|
shift
|
||||||
[ -z "$*" ] && help
|
[ -z "$*" ] && help
|
||||||
|
|
||||||
parms=$(echo $*|tr -d ' ')
|
zaf_trc "zafcache($seconds): $ITEM_KEY,'$2' '$3' '$4' '$5' '$6' '$7' '$8' '$9'"
|
||||||
if ! zaf_fromcache "$parms"; then
|
|
||||||
$@ | zaf_tocache_stdin "$parms" "$seconds"
|
if [ -z "$ITEM_KEY" ]; then
|
||||||
|
key=$(echo $*|tr ' ' '_')
|
||||||
|
else
|
||||||
|
key="$(echo ${ITEM_KEY}|cut -d '[' -f 1)[$(shift; echo $*|tr ' ' ',')]"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if ! zaf_fromcache "$key"; then
|
||||||
|
zaf_fromcache "$key" >/dev/null 2>/dev/null
|
||||||
|
[ $? -eq 3 ] && { zaf_err "Operation $key already in progress."; }
|
||||||
|
if which at >/dev/null 2>/dev/null; then
|
||||||
|
at -M now >/dev/null 2>/dev/null <<EOF
|
||||||
|
. $(dirname $0)/preload.sh; tmpf=\$(zaf_tmpfile cache); $@ 2>"\$tmpf" | zaf_tocache_stdin "$key" "$seconds" ; [ -s \$tmpf ] && zaf_wrn <\$tmpf
|
||||||
|
EOF
|
||||||
|
else
|
||||||
|
tmpf=$(zaf_tmpfile cache)
|
||||||
|
$@ 2>"$tmpf" | zaf_tocache_stdin "$key" "$seconds"
|
||||||
|
[ -s $tmpf ] && zaf_wrn <$tmpf
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
@ -13,7 +13,7 @@ shift
|
|||||||
[ -z "${ZAF_LOCK_SECONDS}" ] && seconds=5
|
[ -z "${ZAF_LOCK_SECONDS}" ] && seconds=5
|
||||||
[ -z "${ZAF_LOCK_FORCE}" ] && force=1
|
[ -z "${ZAF_LOCK_FORCE}" ] && force=1
|
||||||
|
|
||||||
lockfile="${ZAF_TMP_DIR}/zaflock_${lkey}"
|
lockfile="/tmp/zaflock_${lkey}"
|
||||||
i=0
|
i=0
|
||||||
while [ -f "$lockfile" ] && [ $i -lt $seconds ]; do
|
while [ -f "$lockfile" ] && [ $i -lt $seconds ]; do
|
||||||
sleep 1
|
sleep 1
|
||||||
@ -28,7 +28,6 @@ if [ -f "$lockfile" ] && [ -z "$force" ]; then
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
touch "$lockfile"
|
[ -n "$*" ] && $@ 2>"$lockfile"
|
||||||
[ -n "$*" ] && $@
|
[ -s "$lockfile" ] && zaf_wrn <"$lockfile"
|
||||||
rm -f "$lockfile"
|
|
||||||
|
|
||||||
|
45
zaf
45
zaf
@ -25,23 +25,6 @@ ZAF_CFG_FILE="/etc/zaf.conf"
|
|||||||
[ -n "$secondstage" ] && exec $0 $params
|
[ -n "$secondstage" ] && exec $0 $params
|
||||||
fi
|
fi
|
||||||
|
|
||||||
[ -z "$ZAF_TMP_BASE" ] && ZAF_TMP_BASE=/tmp/zaf
|
|
||||||
ZAF_TMP_DIR="${ZAF_TMP_BASE}-${USER}"
|
|
||||||
[ -z "$ZAF_CACHE_DIR" ] && ZAF_CACHE_DIR=${ZAF_TMP_BASE}c
|
|
||||||
|
|
||||||
[ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1
|
|
||||||
export ZAF_DEBUG
|
|
||||||
|
|
||||||
# If debug is on, do not remove tmp dir
|
|
||||||
if [ "$ZAF_DEBUG" -le 3 ]; then
|
|
||||||
trap "rm -rif ${ZAF_TMP_DIR}" EXIT
|
|
||||||
fi
|
|
||||||
|
|
||||||
! [ -d "${ZAF_TMP_DIR}" ] && mkdir "${ZAF_TMP_DIR}"
|
|
||||||
if ! [ -d "${ZAF_CACHE_DIR}" ]; then
|
|
||||||
mkdir "${ZAF_CACHE_DIR}"
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -f ./lib/zaf.lib.sh ]; then
|
if [ -f ./lib/zaf.lib.sh ]; then
|
||||||
. ./lib/zaf.lib.sh
|
. ./lib/zaf.lib.sh
|
||||||
. ./lib/plugin.lib.sh
|
. ./lib/plugin.lib.sh
|
||||||
@ -60,6 +43,26 @@ else
|
|||||||
[ -f ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh ] && . ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh
|
[ -f ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh ] && . ${ZAF_LIB_DIR}/zaf.${ZAF_OS}.sh
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
[ -z "$ZAF_TMP_BASE" ] && ZAF_TMP_BASE=/tmp/zaf
|
||||||
|
ZAF_TMP_DIR="${ZAF_TMP_BASE}-$(zaf_random)"
|
||||||
|
[ -z "$ZAF_CACHE_DIR" ] && ZAF_CACHE_DIR=${ZAF_TMP_BASE}c
|
||||||
|
|
||||||
|
[ -z "$ZAF_DEBUG" ] && ZAF_DEBUG=1
|
||||||
|
export ZAF_DEBUG
|
||||||
|
export ZAF_LOG_STDERR="-s"
|
||||||
|
|
||||||
|
# If debug is on, do not remove tmp dir
|
||||||
|
if [ "$ZAF_DEBUG" -le 3 ]; then
|
||||||
|
trap "rm -rf ${ZAF_TMP_DIR}" EXIT
|
||||||
|
else
|
||||||
|
trap 'zaf_wrn "Leaving $ZAF_TMP_DIR" contents due to ZAF_DEBUG.' EXIT
|
||||||
|
fi
|
||||||
|
|
||||||
|
! [ -d "${ZAF_TMP_DIR}" ] && mkdir "${ZAF_TMP_DIR}"
|
||||||
|
if ! [ -d "${ZAF_CACHE_DIR}" ]; then
|
||||||
|
mkdir "${ZAF_CACHE_DIR}"
|
||||||
|
fi
|
||||||
|
|
||||||
if zaf_is_root; then
|
if zaf_is_root; then
|
||||||
chgrp zabbix "${ZAF_CACHE_DIR}"
|
chgrp zabbix "${ZAF_CACHE_DIR}"
|
||||||
chmod g+w "${ZAF_CACHE_DIR}"
|
chmod g+w "${ZAF_CACHE_DIR}"
|
||||||
@ -115,8 +118,9 @@ show)
|
|||||||
zaf_plugin_info $ZAF_PLUGINS_DIR/$plugin/control.zaf
|
zaf_plugin_info $ZAF_PLUGINS_DIR/$plugin/control.zaf
|
||||||
done
|
done
|
||||||
else
|
else
|
||||||
|
if echo $1 | grep -vq "\."; then
|
||||||
if zaf_list_plugins | grep -q "^$1"; then
|
if zaf_list_plugins | grep -q "^$1"; then
|
||||||
[ -f $ZAF_PLUGINS_DIR/$1/control.zaf ] && zaf_plugin_info $ZAF_PLUGINS_DIR/$1/control.zaf || zaf_err "Plugin $1 not installed."
|
zaf_is_plugin $1 && zaf_plugin_info $ZAF_PLUGINS_DIR/$1/control.zaf || zaf_err "Plugin $1 not installed."
|
||||||
else
|
else
|
||||||
if echo $1 |grep -q ^http; then
|
if echo $1 |grep -q ^http; then
|
||||||
zaf_prepare_plugin "$1" "$ZAF_TMP_DIR/plugin"
|
zaf_prepare_plugin "$1" "$ZAF_TMP_DIR/plugin"
|
||||||
@ -125,6 +129,9 @@ show)
|
|||||||
zaf_err "Plugin $1 not installed."
|
zaf_err "Plugin $1 not installed."
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
else
|
||||||
|
zaf_item_info "$1"
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
;;
|
;;
|
||||||
plugins)
|
plugins)
|
||||||
@ -153,7 +160,7 @@ test)
|
|||||||
for p in $plugins; do
|
for p in $plugins; do
|
||||||
! zaf_is_plugin $p && zaf_err "Unknown plugin $p"
|
! zaf_is_plugin $p && zaf_err "Unknown plugin $p"
|
||||||
for i in $(zaf_list_plugin_items $p test); do
|
for i in $(zaf_list_plugin_items $p test); do
|
||||||
echo $i: $(zaf_test_item $i)
|
zaf_test_item $i
|
||||||
echo
|
echo
|
||||||
done
|
done
|
||||||
done
|
done
|
||||||
|
Loading…
Reference in New Issue
Block a user