Gelöst! In OpenNMS die syslocation mit führendem Leerzeichen finden.

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).

This entry was posted in solved. Bookmark the permalink.