1#!/bin/sh
2#----------------------------------------------------------------------------#
3# Xymon client main script.                                                  #
4#                                                                            #
5# This invokes the OS-specific script to build a client message, and sends   #
6# if off to the Xymon server.                                                #
7#                                                                            #
8# Copyright (C) 2005-2011 Henrik Storner <henrik@hswn.dk>                    #
9#                                                                            #
10# This program is released under the GNU General Public License (GPL),       #
11# version 2. See the file "COPYING" for details.                             #
12#                                                                            #
13#----------------------------------------------------------------------------#
14#
15# $Id: xymonclient.sh 7878 2016-01-26 05:21:46Z jccleaver $
16
17# Must make sure the commands return standard (english) texts.
18LANG=C
19LC_ALL=C
20LC_MESSAGES=C
21export LANG LC_ALL LC_MESSAGES
22
23if test $# -ge 1; then
24	if test "$1" = "--local"; then
25		LOCALMODE="yes"
26	fi
27	shift
28fi
29
30if test "$XYMONOSSCRIPT" = ""; then
31	XYMONOSSCRIPT="xymonclient-`uname -s | tr '[ABCDEFGHIJKLMNOPQRSTUVWXYZ/]' '[abcdefghijklmnopqrstuvwxyz_]'`.sh"
32fi
33
34MSGFILE="$XYMONTMP/msg.$MACHINEDOTS.txt"
35MSGTMPFILE="$MSGFILE.$$"
36if test "$LOCALMODE" = "yes"; then
37    if test -z "$LOCAL_CLIENTCONFIG"; then
38	LOCAL_CLIENTCONFIG="$XYMONHOME/etc/localclient.cfg"
39    fi
40    if test -z "$LOCAL_LOGFETCHCFG"; then
41	LOCAL_LOGFETCHCFG="$XYMONHOME/etc/logfetch.cfg"
42    fi
43
44    # If not present, fall back to dynamic logfetch location below
45    if test -f "$LOCAL_LOGFETCHCFG"; then
46	LOGFETCHCFG="$LOCAL_LOGFETCHCFG"
47    fi
48fi
49
50if test -z "$LOGFETCHCFG"; then
51	LOGFETCHCFG=$XYMONTMP/logfetch.$MACHINEDOTS.cfg
52fi
53if test -z "$LOGFETCHSTATUS"; then
54	LOGFETCHSTATUS=$XYMONTMP/logfetch.$MACHINEDOTS.status
55fi
56
57export LOGFETCHCFG LOGFETCHSTATUS
58
59rm -f $MSGTMPFILE
60touch $MSGTMPFILE
61
62
63CLIENTVERSION="`$XYMONHOME/bin/clientupdate --level`"
64if test -z "$CLIENTVERSION"; then
65	CLIENTVERSION="`$XYMON --version`"
66fi
67
68if test "$LOCALMODE" = "yes"; then
69	echo "@@client#1|1|127.0.0.1|$MACHINEDOTS|$SERVEROSTYPE" >> $MSGTMPFILE
70fi
71
72echo "client $MACHINE.$SERVEROSTYPE $CONFIGCLASS"  >>  $MSGTMPFILE
73$XYMONHOME/bin/$XYMONOSSCRIPT >> $MSGTMPFILE
74# logfiles
75if test -f $LOGFETCHCFG
76then
77    $XYMONHOME/bin/logfetch $LOGFETCHOPTS $LOGFETCHCFG $LOGFETCHSTATUS >>$MSGTMPFILE
78fi
79# Client version
80echo "[clientversion]"  >>$MSGTMPFILE
81echo "$CLIENTVERSION"   >> $MSGTMPFILE
82
83# See if there are any local add-ons (must do this before checking the clock)
84if test -d $XYMONHOME/local; then
85	for MODULE in $XYMONHOME/local/*
86	do
87		if test -x $MODULE
88		then
89			echo "[local:`basename $MODULE`]" >>$MSGTMPFILE
90			$MODULE >>$MSGTMPFILE
91		fi
92	done
93fi
94
95# System clock
96echo "[clock]"          >> $MSGTMPFILE
97$XYMONHOME/bin/logfetch --clock >> $MSGTMPFILE
98
99if test "$LOCALMODE" = "yes"; then
100	echo "@@" >> $MSGTMPFILE
101	$XYMONHOME/bin/xymond_client --local $LOCAL_CLIENTOPTS --config=$LOCAL_CLIENTCONFIG <$MSGTMPFILE
102else
103	$XYMON $XYMSRV "@" < $MSGTMPFILE >$LOGFETCHCFG.tmp
104	if test -f $LOGFETCHCFG.tmp
105	then
106		if test -s $LOGFETCHCFG.tmp
107		then
108			mv $LOGFETCHCFG.tmp $LOGFETCHCFG
109		else
110			rm -f $LOGFETCHCFG.tmp
111		fi
112	fi
113fi
114
115# Save the latest file for debugging.
116rm -f $MSGFILE
117mv $MSGTMPFILE $MSGFILE
118
119if test "$LOCALMODE" != "yes" -a -f $LOGFETCHCFG; then
120	# Check for client updates
121	SERVERVERSION=`grep "^clientversion:" $LOGFETCHCFG | cut -d: -f2`
122	if test "$SERVERVERSION" != "" -a "$SERVERVERSION" != "$CLIENTVERSION"; then
123		exec $XYMONHOME/bin/clientupdate --update=$SERVERVERSION --reexec
124	fi
125fi
126
127exit 0
128
129