In der ersten Version gibt es ein Problem, wenn im Syslocation String führende Leerzeichen vorhanden sind. Das resultierte daher, da das Ergebnis der psql durchgeführten Abfrage Leerzeichen enthielt, welche mit dem anschließenden
sed -e ‘s/^ *\(.*\) *$/\1/’ weggeputzt wurden. Wenn man nun nur das erste Leerzeichen entfernt, funktioniert es wieder.
Das sed in folgende Codezeile geändert: sed -e ‘s/^ \(.*\) *$/\1/’ hat das Problem beseitigt.
Eine weitere Stelle enthielt solchen sed code, welchen ich auch geändert habe, so dass man komplett auf das sed verzichten kann.
Bisheriger code
sql "select node.nodeid, node.nodelabel from node where node.nodesyslocation='$REPLY' and \
nodetype!='D' order by node.nodelabel;" | \
sed -e 's/^ *\([0-9]*\) *|\(.*\)$/<a href="\/opennms\/element\/node.jsp?node=\1">\2<\/a><br>/'
geändert in
sql "select '<a href=\"/opennms/element/node.jsp?node=' || node.nodeid || '\">' || node.nodelabel || '</a></br>' \
from node where node.nodesyslocation='$REPLY' and \
nodetype!='D' order by node.nodelabel;"
Das gesamte Skript sieht nun wie folgt aus:
#!/bin/bash
source /etc/noc.conf
cat << EOF
Content-Type: text/html
Expires: 0
EOF
cat /opt/noc/http/opennmsheader.shtml
for VAR in `echo $QUERY_STRING | tr "&" "\t"`
do
NAME=$(echo $VAR | tr = " " | awk '{print $1}';);
VALUE=$(echo $VAR | tr = " " | awk '{ print $2}' | tr + " ");
declare $NAME="$VALUE";
done
echo "<div id="node-grid"></div><h3>Nodes by syslocation $nodeloc</h3><div class="boxWrapper">"
echo "<ul class="plain">"
C=1
sql "select distinct node.nodesyslocation from node where nodesyslocation~*'$nodeloc' and nodetype!='D' order by nodesyslocation;" | \
sed -e 's/^ \(.*\) *$/\1/' | \
while read; do
if [ "$REPLY" != "" ]; then
echo "<li>"
if [ "$listLocations" != "" ]; then
echo "$REPLY <ul><li>"
fi
sql "select '<a href=\"/opennms/element/node.jsp?node=' || node.nodeid || '\">' || node.nodelabel || '</a></br>' \
from node where node.nodesyslocation='$REPLY' and \
nodetype!='D' order by node.nodelabel;"
echo "</li>"
if [ "$listLocations" != "" ]; then
echo "</ul></li>"
fi
C=`expr $C + 1`
fi
done
echo "</ul></div><p>"
if [ "$listLocations" != "" ]; then
echo "<a href="/locationsummary.cgi?nodeloc=$nodeloc">Hide locations</a></p>"
else
if ["$listLocations" != "true"]; then
echo "<a href="/locationsummary.cgi?nodeloc=$nodeloc">Hide locations</a></p>"
else
echo "<a href="/locationsummary.cgi?listLocations=true\&nodeloc=$nodeloc">Show locations</a></p>"
fi
fi
cat /opt/noc/http/opennmsfooter.shtml
Das CGI Skript und die beiden statischen Dateien können hier nochmal geladen werden sourcecode.tar (als Backup so zusagen).