Automatically refresh the MSG brokers in configuration, without automatic daemons...
authorFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 28 Feb 2012 16:43:24 +0000 (16:43 +0000)
committerFrantišek Dvořák <valtri@civ.zcu.cz>
Tue, 28 Feb 2012 16:43:24 +0000 (16:43 +0000)
org.glite.lb.logger-msg/Makefile
org.glite.lb.logger-msg/config/msg.cron.in [new file with mode: 0644]
org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.dirs
org.glite.lb.logger-msg/project/debian.glite-lb-logger-msg.install
org.glite.lb.logger-msg/project/glite-lb-logger-msg.spec
org.glite.lb.logger-msg/src/msg-config.in [new file with mode: 0755]
org.glite.lb.yaim/config/functions/config_glite_lb.in

index b7c9542..6fe72d8 100644 (file)
@@ -19,7 +19,7 @@ version=${module.version}
 CC=gcc
 CXX=gcc
 
-VPATH:=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test:${top_srcdir}/doc:${top_srcdir}/examples
+VPATH:=${top_srcdir}/src:${top_srcdir}/interface:${top_srcdir}/test:${top_srcdir}/doc:${top_srcdir}/examples:${top_srcdir}/config
 
 VERSION=-DVERSION=\"GLite-${version}\"
 
@@ -68,6 +68,9 @@ PLUGIN_LIB:=activemq_cpp_plugin.la
 
 EXAMPLES=glite-lb-cmsclient
 
+SCRIPTS_SRC=msg.cron.in msg-config.in
+SCRIPTS=${SCRIPTS_SRC:.in=.new}
+
 ifeq (${thrflavour},)
 default_flavour=
 else
@@ -76,7 +79,7 @@ endif
 
 default: all 
 
-all compile: ${PLUGIN_LIB} ${EXAMPLES}
+all compile: ${PLUGIN_LIB} ${EXAMPLES} ${SCRIPTS}
 
 ${PLUGIN_LIB}: ${PLUGIN_LOBJS}
        ${SOLINK} -o $@ ${PLUGIN_LOBJS} ${EXT_LIB} -lglite_lb_common${default_flavour} -lglite_jobid -lglite_lbu_log
@@ -105,18 +108,23 @@ check:
 install:
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/${libdir}/glite-lb/examples
        -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
-       -mkdir -p ${DESTDIR}${PREFIX}${prefix}/share/glite-lb
+       -mkdir -p ${DESTDIR}${PREFIX}${prefix}/sbin
        -mkdir -p ${DESTDIR}${PREFIX}${sysconfdir}/glite-lb
+       -mkdir -p ${DESTDIR}${PREFIX}${sysconfdir}/cron.d
        ${INSTALL} -m 644 ${top_srcdir}/LICENSE ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version}
        ${INSTALL} -m 755 ${PLUGIN_LIB} ${DESTDIR}${PREFIX}${prefix}/${libdir}
        ${INSTALL} -m 755 ${EXAMPLES} ${DESTDIR}${PREFIX}${prefix}/${libdir}/glite-lb/examples
        ( cd ${top_srcdir}/project && ${INSTALL} -m 644 ChangeLog package.description package.summary ${DESTDIR}${PREFIX}${prefix}/share/doc/${package}-${version} )
        ${INSTALL} -m 644 ${top_srcdir}/config/msg.conf.example ${DESTDIR}${PREFIX}${sysconfdir}/glite-lb
-       ${INSTALL} -m 755 ${top_srcdir}/src/msg-brokers ${DESTDIR}${PREFIX}${prefix}/share/glite-lb
+       ${INSTALL} -m 755 ${top_srcdir}/src/msg-brokers ${DESTDIR}${PREFIX}${prefix}/sbin/glite-lb-msg-brokers
+       ${INSTALL} -m 755 msg-config.new ${DESTDIR}${PREFIX}${prefix}/sbin/glite-lb-msg-config
+       ${INSTALL} -m 644 msg.cron.new ${DESTDIR}${PREFIX}${sysconfdir}/cron.d/glite-lb-logger-msg.cron
 
 %.lo %.o: %.cpp
        ${COMPILEXX} -c $< -o $@
 
+%.new: %.in
+       sed -e 's:@glite_prefix@:${sysroot}${prefix}:' -e 's:@glite_etc@:${sysconfdir}:' $< > $@
 
 clean:
        rm -rvf .libs/ *.o *.lo ${PLUGIN_LIB} ${MAN_GZ} ${EXAMPLES}
diff --git a/org.glite.lb.logger-msg/config/msg.cron.in b/org.glite.lb.logger-msg/config/msg.cron.in
new file mode 100644 (file)
index 0000000..20b018a
--- /dev/null
@@ -0,0 +1 @@
+50 */4 * * *   root    @glite_prefix@/sbin/glite-lb-msg-config @glite_etc@/glite-lb/msg.conf >/tmp/msg-config.log.$$ 2>&1; if test $? -eq 0; then pri=user.notice; else pri=user.error; fi; logger -t glite-lb-msg-config -f /tmp/msg-config.log.$$ -p $pri; rm -f /tmp/msg-config.log.$$
index c39db3c..2e877df 100644 (file)
@@ -1,5 +1,6 @@
 etc/glite-lb
 usr/lib/glite-lb
 usr/lib/glite-lb/examples
+usr/sbin
 usr/share/doc/glite-lb-logger-msg
 usr/share/glite-lb
index 2c81cea..7f61de3 100644 (file)
@@ -1,5 +1,6 @@
 etc/glite-lb/*
 usr/lib/activemq_cpp_plugin.so*
 usr/lib/glite-lb/examples/*
+usr/sbin/glite-lb-msg-*
 usr/share/doc/glite-lb-logger-msg/*
 usr/share/glite-lb/*
index d6dfe90..d280b20 100644 (file)
@@ -54,7 +54,6 @@ rm -rf $RPM_BUILD_ROOT
 %dir /usr/%{_lib}/glite-lb/
 %dir /usr/%{_lib}/glite-lb/examples/
 %dir /usr/share/doc/%{name}-%{version}/
-%dir /usr/share/glite-lb/
 %config(missingok) /etc/glite-lb/msg.conf.example
 /usr/%{_lib}/activemq_cpp_plugin.so
 /usr/%{_lib}/activemq_cpp_plugin.so.0
@@ -64,7 +63,7 @@ rm -rf $RPM_BUILD_ROOT
 /usr/share/doc/%{name}-%{version}/LICENSE
 /usr/share/doc/%{name}-%{version}/package.summary
 /usr/share/doc/%{name}-%{version}/package.description
-/usr/share/glite-lb/*
+/usr/sbin/glite-lb-msg-*
 
 
 %changelog
diff --git a/org.glite.lb.logger-msg/src/msg-config.in b/org.glite.lb.logger-msg/src/msg-config.in
new file mode 100755 (executable)
index 0000000..d4272d6
--- /dev/null
@@ -0,0 +1,72 @@
+#! /bin/bash
+
+test -f /etc/profile.d/grid-env.sh && . /etc/profile.d/grid-env.sh
+
+GLITE_LOCATION=${GLITE_LOCATION:-'@glite_prefix@'}
+LCG_GFAL_INFOSYS=${LCG_GFAL_INFOSYS:-'lcg-bdii.cern.ch:2170'}
+GLITE_LB_MSG_NETWORK=${GLITE_LB_MSG_NETWORK:-'PROD'}
+
+CONF=/tmp/msg.$$
+TEMPLATE=$1
+TARGET=$2
+
+if [ -z "$TEMPLATE" ]; then
+       echo "Usage: $0 TEMPLATE [TARGET]"
+       exit 1
+fi
+if [ -z "$TARGET" ]; then
+       TARGET=$TEMPLATE
+fi
+
+# removing and resurrecting
+if [ "$GLITE_LB_MSG_BROKER" = 'false' ]; then
+       if [ -f "$TARGET" ]; then
+               mv $TARGET $TARGET.disabled
+               echo "disabled, configuration removed"
+       fi
+       exit 0
+fi
+if [ ! -s "$TEMPLATE" ]; then
+       if [ -f "$TEMPLATE.disabled" ]; then
+               mv $TEMPLATE.disabled $TEMPLATE
+       else
+               cat <<EOF >$TEMPLATE
+# automatically generated by glite-lb-msg-config
+
+[interlogd]
+plugin = activemq_cpp_plugin.so
+
+[msg]
+EOF
+       fi
+fi
+
+HEADER="`cat $TEMPLATE | grep -B 1000 '^\[msg\]'`"
+PREFIX="`cat $TEMPLATE | grep -A 1000 '^\[msg\]' | grep prefix  | head -n -1`"
+
+if [ "$GLITE_LB_MSG_BROKER" = 'true' -o "$GLITE_LB_MSG_BROKER" = 'auto' -o -z "$GLITE_LB_MSG_BROKER" ]; then
+       GLITE_LB_MSG_BROKER="`$GLITE_LOCATION/sbin/glite-lb-msg-brokers --bdii $LCG_GFAL_INFOSYS --network $GLITE_LB_MSG_NETWORK --sort find`" || exit $?
+       # bend for using in L&B configuration:
+       #   1) stomp not supported
+       #   2) translate openwire -> tcp, openwire+ssl -> ssl
+       #   3) temporary disable the ssl
+       GLITE_LB_MSG_BROKER=`echo "$GLITE_LB_MSG_BROKER" | grep -v ^stomp | sed -e 's,openwire://,tcp://,' -e 's,openwire+ssl://,ssl://,g' | grep -v ^ssl`
+       GLITE_LB_MSG_BROKER=`echo $GLITE_LB_MSG_BROKER`
+fi
+
+if [ -z "$GLITE_LB_MSG_BROKER" ]; then
+       exit 2
+fi
+
+[ -z "$HEADER" ] || echo "$HEADER" > $CONF
+[ -z "$PREFIX" ] || echo "$PREFIX" >> $CONF
+[ -z "$GLITE_LB_MSG_BROKER" ] || echo 'broker =' $GLITE_LB_MSG_BROKER >> $CONF
+
+if [ ! -f $TARGET ]; then touch $TARGET; fi
+diff -b $TARGET $CONF >/dev/null
+case $? in
+       0) ;;
+       1) mv $CONF $TARGET; echo "new brokers '$GLITE_LB_MSG_BROKER'" ;;
+       2) rm -f $CONF; exit 2 ;;
+esac
+rm -f $CONF
index 3e64a00..7cf6b01 100644 (file)
@@ -306,23 +306,11 @@ EOF
   lcas_plugin="$GLITE_LB_LOCATION/$lcas_libarch/modules/lcas_lb.mod"
   echo "pluginname=\"$lcas_plugin\"" > ${GLITE_LB_LOCATION_ETC}/glite-lb/lcas.db
 
-  # MSG publish
-  if [ "$GLITE_LB_MSG_BROKER" = 'false' ]; then
-    rm -f "$GLITE_LB_LOCATION_ETC/glite-lb/msg.conf"
-  else
-    if [ "$GLITE_LB_MSG_BROKER" = 'true' -o "$GLITE_LB_MSG_BROKER" = 'auto' -o -z "$GLITE_LB_MSG_BROKER" ]; then
-      GLITE_LB_MSG_BROKER="`${GLITE_LB_LOCATION}/share/glite-lb/msg-brokers --bdii $LCG_GFAL_INFOSYS --network $GLITE_LB_MSG_NETWORK --sort find | head -n 1 | sed 's,openwire://,tcp://,'`";
-    fi
-    if [ ! -z "$GLITE_LB_MSG_BROKER" ]; then
-      cat > "$GLITE_LB_LOCATION_ETC/glite-lb/msg.conf" <<EOF
-# automatically generated by yaim
-[interlogd]
-plugin = activemq_cpp_plugin.so
-
-[msg]
-broker = $GLITE_LB_MSG_BROKER
-EOF
-    fi
+  out="`$GLITE_LB_LOCATION/sbin/glite-lb-msg-config $GLITE_LB_LOCATION_ETC/glite-lb/msg.conf 2>&1`"
+  ret=$?
+  if [ $ret -eq 0 ]; then level=INFO; else level=WARNING; fi
+  if [ -n "$out" -o $ret -ne 0 ]; then
+    yaimlog $level "$out"
   fi
 
   # upgrade from L&B <= 3.1.1