#!/bin/bash
########################################################################
#
# Was macht das Script:
#
# Das Script suche eine bestimmte Zeile im pc_server-Log von Aleph. Die
# gefundenen Zeilen werden in ein separates Log geschrieben, dass von
# Nagios ausgelesen wird und die Anzahl der verbrauchten Lizenzen
# grafisch darstellt.
# Fehlerhafte Zeilen im pc_server-Log erzeugen mehrmals woechentlich
# deutlich ueberhoehte Werte. Um diese fehlerhaften Zeilen auszu-
# sortieren ist der unten aufgefuehrte Regex-Ausdruck entstanden.
#
# Um fehlerhafte Zeilen auszusortieren
# grep 1) nur Zeilen, die 52 Zeichen lang sind
# grep 2) letztes Wort herausfiltern
# grep 3) letztes Wort muss 6 fuehrende Nullen haben und nachfolgend
# drei beliebige Ziffern
#
# grep -x '.\{52\}' aleph_pc_user_05-02-2016.log | \
# grep -oE '[^ ]+
| \
# grep -E '[0]{6}[0-9]{3}'
#
########################################################################
# Variablen
# Pfad zum pc_server-Log von Aleph
dateipfad="/exlibris/aleph/a22_1/log"
# aktuelles pc_server-Log von Aleph
dateiname="pc_server_6530.log"
# Pfad zum pc_server-Log fuer Nagios
logpfad="/home/nagios/nagios_scripts/pc_server_user/logs"
# aktuelles pc_server-Log fuer Nagios
logdatei="aleph_pc_user_`date +"%d-%m-%Y"`.log"
# suche das letzte Vorkommen des Strings im Log, der 'word count (wc)'
# muss groesser als eins sein, ansonsten wurde das Log vor zu kurzer
# Zeit neu angelegt oder es besteht ein anderer Fehler.
anzahl=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :' | wc -l`
# gibt es eine Zeile im Aleph log, die den String 'Active GUI users :'
# enthaelt? Falls ja, pruefen wir die Zeile auf Korrektheit und
# schreiben diese, wenn korrekt ins Log fuer Nagios
if [ ${anzahl} -gt 0 ]; then
# Auslesen der Zeile, letztes "Wort" in der Zeile sollte obige
# Bedingungen der gepipten grep-Befehle erfuellen. Der awk-Befehl
# macht daraus eine Zahl, die soll kleiner sein als 200. Ist die
# Bedingung erfuellt, schreiben wir die Zeile ins Log fuer Nagios,
# ansonsten wird kein Logeintrag geschrieben.
#if [[ $(grep -x '.{52}' ${dateipfad}/${dateiname} | grep -oE '[^ ]+
| grep -E '[0]{6}[0-9]{3}' | awk '{print $1+0}') -lt 200 ]]; then
if [[ $(grep -x '.{52}' ${dateipfad}/${dateiname}) ]] && [[ $(grep -oE '[^ ]+
${dateipfad}/${dateiname} | grep -E '[0]{6}[0-9]{3}' | awk '{print $1+0}') -lt 200 ]]; then
# Die Zeile im Aleph-Log ist
# - genau 52 Zeichen lang
# - das letzte Wort besteht aus sechs fuehrenden Nullen und
# enthaelt anschliessend drei beliebige Ziffern von 0 - 9
# - die sich daraus ergebende Zahl ist zudem kleiner als 200
########################################################################
# Anfang "nur fuer Testzwecke"
########################################################################
# Den kompletten String aus dem pc_server-Log auslesen
#stringKomplett=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :'`
# Die aktuelle Zahl noch als String aus dem pc_server-Log auslesen
#zahlAlsString=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :' | grep -oE '[^ ]+
| grep -E '[0]{6}[0-9]{3}'`
# Die als String ausgelesene Zahl in eine Zahl umwandeln
#zahl=`tac ${dateipfad}/${dateiname} | grep -m1 'Active GUI users :' | grep -oE '[^ ]+
| grep -E '[0]{6}[0-9]{3}' | awk '{print $1+0}'`
# Ausgabe des kompletten und der Teilstrings
#echo ${stringKomplett}
#echo ${zahlAlsString}
#echo ${zahl}
########################################################################
# Ende "nur fuer Testzwecke"
########################################################################
# Die korrekte Zeile muss noch ins Log geschrieben werden
# Zeitstempel
printf "`date +"%d-%m-%Y %H:%M"` " >> ${logpfad}/${logdatei}
# Aktive User
grep -F 'Active GUI users :' ${dateipfad}/${dateiname} | tail -n1 >> ${logpfad}/${logdatei}
# Falls die Zeile nicht den Erwartungen entspricht, wird nichts ins
# Log geschrieben, kein else-Abschnitt noetig
fi
# das else der aeusseren Schleife. Ist im pc_server-Log keine Zeile mit
# 'Active GUI users :' vorhanden, wird fuer Nagios eine erstellt. Ist
# im Log fuer Nagios keine Zeile vorhanden, entstehen ansonsten
# unschoene Fehlermeldungen.
else
# Zeitstempel
printf "`date +"%d-%m-%Y %H:%M"` " >> ${logpfad}/${logdatei}
# Aktive User
echo "Active GUI users : 000000000" | tail -n1 >> ${logpfad}/${logdatei}
fi
exit 0