My own Monitoringtool

I really dont know where to begin with.

I had this project…

There was this company with these old printers which printed on really loooooong papers…
These papers contained important info about the current state of the buildings, like “everything is fine” or “RUN! THE BUILDING IS ON FIRE!!!”.
Basically this kind of information…

Anyway, I had to find a solution to alert people if that info is printed.

So, the first step was to collect the analog info and make it digital.

It wasnt my part of the project to realise it, someone had this piece of hardware which transformed the print to a textfile.

I had access to these files via sftp.

But how do you track alerts?

These days I would create a script for Icinga2 but back in the day, I was a noob…

So I wrote my own Monitoringtool.

Sourcecode below…

Sorry for the german comments…

autoftp.sh is the startscript for ftpgetter.sh, it can be placed in /etc/init.d, execute via “service autoftp.sh <command>”

#!/bin/bash
 
###############################
#############Usage#############
###Startscript for FTPGetter###
###############################
#############Date##############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
 
#var DIENST startet das Script mit nohup und & im Hintergrund, sodass die Shell, wo der Befehl ausgeführt wurde, weiterhin verwendet werden kann.
DIENST=nohup /home/pi/script/ftpgetter.sh &
 
#var DIENSTNAME wird vergeben ohne nohup und &, da dieses nicht im Prozessnamen angezeigt wird.
DIENSTNAME=/home/pi/script/ftpgetter.sh
 
#Wenn autoftp mit start ausgeführt wurde, wird das Programm gestartet mit Ausgabe "wurde gestartet", stop = stop, restart = stop,start, sonstiges ist Ausgabe, was moeglich ist.
case "$1" in
start)
	$DIENST
	[ $? -eq 0 ] && echo "$DIENSTNAME wurde gestartet"
;;
stop)
	pkill -f $DIENSTNAME
	[ $? -eq 0 ] && echo "$DIENSTNAME wurde gestoppt"
;;
restart) 
	$0 stop
	$0 start
;;
*)
	echo "Usage: $0 (start|stop|restart)"
;;
esac

ftpgetter.sh copies all .txt files via sftp to a local directory.

#!/bin/bash
 
###############################
#############Usage#############
##.txt file from FTP to local##
###############################
#############Date##############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
 
#Endlosschleife
while true
do
 
#Hostnamen vergeben
HOST='localhost'
 
#Usernamen vergeben
USER='root'
 
#Pfad zur FTPLogdatei
LOGPFAD=/home/pi/script/meldunglogs/ftprsync.log
 
#Pfad zu Textdateien auf dem FTP
FTPPFAD=/var/www/meldungftp/
 
#Pfad zu den lokalen Textdateien
PFAD=/var/www/meldung/meldungen/
 
#Prüfen, ob .txt Dateien auf FTP vorhanden sind
if ssh $USER@$HOST "ls $FTPPFAD*.txt" >/dev/null 2>&1
then
 
#Wenn Dateien vorhanden, synchronisiere die Dateien auf dem FTP mit den Dateien in einem lokalen Verzeichnis. Danach loesche die Quelldateien (auf FTP), 
#schreibe diverse Statistiken (Uebertragungsmenge, Geschwindigkeit, welche Dateien) in ein Logfile. -q (quiet) gibt in der Shell nur Fehler aus, sonst keine Ausgaben
rsync --remove-source-files --stats --progress --log-file=$LOGPFAD -q ${USER}@${HOST}:$FTPPFAD*.txt $PFAD
fi
 
#kurze Pause -> weniger CPU-Auslastung
sleep 5
done

autowrite.sh is the startscript for mysqlwriter.sh, it can be placed in /etc/init.d, execute via “service autosql.sh <command>”

#!/bin/bash
 
###############################
#############Usage#############
##Startscript for MySQLWriter##
###############################
#############Date##############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
 
#var DIENST startet das Script mit nohup und & im Hintergrund, sodass die Shell, wo der Befehl ausgeführt wurde, weiterhin verwendet werden kann.
DIENST=nohup /home/pi/script/mysqlwriter.sh &
 
#var DIENSTNAME wird vergeben ohne nohup und &, da dieses nicht im Prozessnamen angezeigt wird.
DIENSTNAME=/home/pi/script/mysqlwriter.sh
 
#Wenn autowrite mit start ausgeführt wurde, wird Programm gestartet mit Ausgabe "wurde gestartet", stop = stop, restart = stop,start, sonstiges ist Ausgabe, was moeglich ist.
case "$1" in
start)
	$DIENST
	[ $? -eq 0 ] && echo "$DIENSTNAME wurde gestartet"
;;
stop)
	pkill -f $DIENSTNAME
	[ $? -eq 0 ] && echo "$DIENSTNAME wurde gestoppt"
;;
restart) 
	$0 stop
	$0 start
;;
*)
	echo "Usage: $0 (start|stop|restart)"
;;
esac

mysqlwriter.sh write the .txt files to a database

#!/bin/bash
 
###############################
#############Usage#############
######.txt file to MySQL#######
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
 
#Endlosschleife
while true
do
 
#Pfad zu Logdatei
LOGPFAD=/home/pi/script/meldunglogs/mysqlinsert.log
 
#Pfad zu den lokalen Textdateien
PFAD=/var/www/meldung/meldungen/
 
#Pfad zu den lokalen Textdateien nach einlesen
USEDPFAD=/var/www/meldung/used/
 
#Username von MYSQL
MYSQLUSER=<user>
 
#Passwort von MYSQL
MYSQLPW=<password>
 
#Datenbank mit Tabelle
DBTABLE=mysql.Meldungen
 
#Datenbank - Spalten der Tabelle
SSTATUS=Status
SDATUM=Datum
SUHRZEIT=Uhrzeit
SSTANDORT=Standort
SMELDUNG=Meldung
SALARMFENSTER=Alarmfenster
 
#Name der lokalen Textdateien. Alle Dateien mit Endung .txt werden gelesen, durch head -1 jedoch nur eine genommen und in var DATA geschrieben
DATA=`ls $PFAD. | grep .txt | head -1`
 
#Wenn es eine Datei mit Endung .txt gibt, dann
if [ -n "$DATA"  ]
then
#i wird initialisiert
i=1
#wird für Leerzeichen benötigt, da diese sonst in der DB nicht richtig erscheinen (alle Zeilen sind in eine Tabellenzeile)
IFS=$'\012'
 
#fuer jede Zeile in der Datei DATA, mache
for i in $(cat $PFAD$DATA); 
do 
		#Spalte f1 beinhaltet den Status und wird deshalb in var STATUS geschrieben. cut trennt die Spalte mit -d "|" ("|" ist Trennzeichen auf. IFS ist wie erwaehnt für die Leerzeichen notwendig.
		STATUS=$(echo $i | cut -d "|" -f1 | tr "$IFS" '\n')
		DATUM=$(echo $i | cut -d "|" -f2 | tr "$IFS" '\n')
		UHRZEIT=$(echo $i | cut -d "|" -f3 | tr "$IFS" '\n')
		STANDORT=$(echo $i |cut -d "|" -f4 | tr "$IFS" '\n')
		MELDUNG=$(echo $i | cut -d "|" -f5 | tr "$IFS" '\n')
 
#Hier wird für eine Popup Warnmeldung im Fall eines Alarms eine 1 in der Tabellenspalte Alarmfenster gesetzt. Wenn es kein Alarm ist, eine 0 
if [ $STATUS==Alarm ]
then		
 
#Stellt Verbindung zu mysql her mit -u USERNAME und --password PASSWORT. fuer anderen Hostnamen ist -h HOSTNAME zu verwenden
#Danach wird mit INSERT die DATENBANK.TABELLE gewählt und die Tabellen Spalten mit den variablen $VARIABLEN beschrieben
mysql -u $MYSQLUSER --password=$MYSQLPW  << EOFMYSQL
 
INSERT INTO $DBTABLE ($SSTATUS, $SDATUM, $SUHRZEIT, $SSTANDORT, $SMELDUNG, $SALARMFENSTER) VALUES ('$STATUS', '$DATUM', '$UHRZEIT', '$STANDORT', '$MELDUNG', 1);
EOFMYSQL
 
else
#Stellt Verbindung zu mysql her mit -u USERNAME und --password PASSWORT. fuer anderen Hostnamen ist -h HOSTNAME zu verwenden
#Danach wird mit INSERT die DATENBANK.TABELLE gewählt und die Tabellen Spalten mit den variablen $VARIABLEN beschrieben
mysql -u $MYSQLUSER --password=$MYSQLPW  << EOFMYSQL
 
INSERT INTO $DBTABLE ($SSTATUS, $SDATUM, $SUHRZEIT, $SSTANDORT, $SMELDUNG, $SALARMFENSTER) VALUES ('$STATUS', '$DATUM', '$UHRZEIT', '$STANDORT', '$MELDUNG', 0);
EOFMYSQL
fi
 
done
 
#Die vergebenen Variablen werden mit ihrem Inhalt in eine Logdatei geschrieben
echo "----------------------------------------------" >> $LOGPFAD; #Trennlinie zwischen Datensaetzen
echo "Data" $PFAD$DATA >> $LOGPFAD;
echo "Status" $STATUS >> $LOGPFAD;
echo "Datum" $DATUM >> $LOGPFAD;
echo "Uhrzeit" $UHRZEIT >> $LOGPFAD;
echo "Standort" $STANDORT >> $LOGPFAD;
echo "Meldung" $MELDUNG >> $LOGPFAD;
 
#Die lokale Datei wird in den Ordner "used" verschoben, damit diese nicht erneut eingelesen wird.
mv $PFAD$DATA $USEDPFAD$DATA
fi
#kurze Pause -> weniger CPU-Auslastung (Auswirkung = 1 Datei/sek, sonst 2-3 Dateien/sek)
sleep 1
done

Coming up is the webGUI, dont expect anything LOL

index.php is the mainsite which displays all incoming info via iframe

<!--
###############################
#############Usage#############
###########Dashboard###########
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
-->
 
<!doctype html><html><head>
 
<title>Meldungen</title>
<link rel="shortcut icon" href="images/favicon.ico" />
<link rel="stylesheet" href="styles.css" type="text/css" media="screen" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
 
</head>
 
 
<body>
 
<div id="uberg">
Meldungen
</div><!--Ende:uberg -->
<br/><br/>
 
<table><!--Beginn:Tabelle-->
<tr>
<td>
<iframe src="meldungen.php" width="620px" height="550px"></iframe><!--iframe1 für meldungen.php-->
<br/><br/>
</td>
<td>
<iframe src="meldungen.php" width="620px" height="550px"></iframe><!--iframe2 für meldungen.php-->
<br/><br/>
</td>
<td>
<iframe src="meldungen.php" width="620px" height="550px"></iframe><!--iframe3 für meldungen.php-->
<br/><br/>
</td>
</tr>
<tr>
<td>
<iframe src="meldungena.php" width="620px" height="340px"></iframe><!--iframe1 für meldungena.php-->
<br/><br/>
</td>
<td>
<iframe src="meldungena.php" width="620px" height="340px"></iframe><!--iframe2 für meldungena.php-->
<br/><br/>
</td>
<td>
<iframe src="meldungena.php" width="620px" height="340px"></iframe><!--iframe3 für meldungena.php-->
<br/><br/>
</td>
</tr>
 
</table><!--Ende:Tabelle-->
 
<div id="centered">
<a href="suche.php" target="_blank">Meldungssuche</a><!--Link zur Meldungssuche-->
</div><!--Ende:centered -->
 
</body>
</html>

meldungen.php checks the database every 5 seconds for new messages. Messages could be ok, warning, crit, basically like icinga. They are colored differently. If an alert is found, there will be a popup window

<!--
###############################
#############Usage#############
############Alerts#############
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
-->
 
<script type="text/javascript">
 
//Javascript für die SekundenCountdowns mit Aktualisierung nach 5 Sekunden
 
 
// 5 Sekunden werden gesetzt
var secs=5;
 
//Hier nichts verändern!
function docount(remaining){
if (remaining==0){ location.reload(true);}
else {
	document.getElementById('countdown').firstChild.nodeValue=remaining+" Sekunden bis zur Aktualisierung"; //"Sekunden bis zur Aktualisierung" kann angepasst werden
	remain=remaining-1;
	setTimeout("docount(remain);",1000);
}
}
setTimeout("docount(secs);",100);
</script>
 
<!--Hier wird ein Popup erzeugt, welches eine Warnung anzeigt (bei Alarm)-->
<script type="text/javascript">
function AutoPopUp(){
 
//Name der zu öffnenden Datei
var dateiname = "alarm.php";
 
//Eigenschaft, wo die Linke obere Ecke des Fensters geöffnet wird (relativ die Mitte des index.php Fensters mit der unten angegebenen Höhe und Breite)
eigenschaften = "left=650,top=450,";
 
//Größe des Fensters (Breite, Höhe -> Ausreichend für den anzuzeigenden Text) 
eigenschaften = eigenschaften + "width=600,height=250,";
 
fenster04 = window.open(dateiname,"Alarm",eigenschaften);
fenster04.focus();
}
</script>
 
<?php<!--Beginn:PHP-->
 
//Hier wurde vorher über meta refresh die Seite nach 5 Sekunden neu geladen. Dies funktioniert nun jedoch über das Javascript.
//echo "<meta http-equiv=\"refresh\" content=\"5\">";
 
echo "<link rel=\"stylesheet\" href=\"styles.css\" type=\"text/css\" media=\"screen\" />";//styles.css einbinden
echo "<div id=\"meld\">";//Beginn:meld
 
//connection_data.inc.php beinhaltet die Verbindungsdaten zum MySQL Server, include fügt diese in diese Seite ein
include("includes/connection_data.inc.php");
 
//Hier wird der Countdown angezeigt
echo "Noch ";
echo " <span id=\"countdown\"> </span>";
 
//Es werden die letzten 10 Einträge, egal welchen Inhalt diese haben aus der Datenbank gelesen.
//Sortiert wird nach IdMeldungen (alternativ: Datum AND Uhrzeit) durch DESC (alternativ: ASC) in der Auflistung neuster Eintrag oben, durch LIMIT 0,10 limitiert auf 10 Stück (dieser Wert kann angepasst werden) 
$abfrage = "SELECT * FROM Meldungen ORDER BY IdMeldungen DESC LIMIT 0,10"; 
$ergebnis = mysql_query($abfrage); 
$ergebnisse = mysql_num_rows($ergebnis);
 
 
      if ($ergebnisse != 0){
		//Tabelle für Ausgabe wird erzeugt
		echo '<table border=1><thead><tr><th>Status</th><th>Datum</th><th>Uhrzeit</th><th>Standort</th><th>Meldung</th></tr></thead><tbody>'; 
 
		//Solange es Ergebnisse gibt, werden diese ausgegeben 
		while ($row = mysql_fetch_object($ergebnis)){
 
		//Wenn der Status des Ergebnisses Alarm ist, wird diese Zeile rot ausgegeben
		if($row->Status == Alarm){
 
		    //Falls die Spalte Alarmfenster eine 1 enthält, wird ein Warnungspopup angezeigt, ansonsten kommt die normale Ausgabe. 
		    //Anschließend wird die 1 auf 0 gesetzt, damit das Fenster nach schließen nicht erneut angezeigt wird
		    if ($row->Alarmfenster == 1)
		    {
		      // Session starten und Infos in Sessionvariable schreiben
		      session_start ();
		      $_SESSION["Status"] = $row->Status; 
		      $_SESSION["Datum"] = $row->Datum;
		      $_SESSION["Uhrzeit"] = $row->Uhrzeit; 
		      $_SESSION["Standort"] = $row->Standort;
		      $_SESSION["Meldung"] = $row->Meldung; 
 
		      //Öffne Popup und ändere danach in der Tabelle den Wert von Alarmfenster von 1 auf 0
		      echo '<body onload="javascript:AutoPopUp()">';
		      $eintrag = "UPDATE `mysql`.`Meldungen` SET `Alarmfenster` = '0' WHERE `Meldungen`.`Alarmfenster`='1'";
		      $eintragen = mysql_query($eintrag);
		    }
		    else {/*Nicht notwendig*/}
		echo '<tr>'; 
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Status).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Datum).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Uhrzeit).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Standort).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Meldung).'</font>';
		echo '</td>';
		echo '</tr>';
		}
		//Wenn der Status des Ergebnisses nicht Alarm ist, jedoch Warnung, wird diese Zeile orange ausgegeben
		elseif($row->Status == Warnung)
		{
		echo '<tr>'; 
		echo '<td>';
		echo '<font style="color: #FF8800;">'.utf8_encode($row->Status).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF8800;">'.utf8_encode($row->Datum).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF8800;">'.utf8_encode($row->Uhrzeit).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF8800;">'.utf8_encode($row->Standort).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF8800;">'.utf8_encode($row->Meldung).'</font>';
		echo '</td>';
		echo '</tr>'; 
		}
		//Wenn der Status des Ergebnisses nicht Alarm und nicht Warnung ist, jedoch Information, wird diese Zeile grün ausgegeben
		elseif($row->Status == Information)
		{
		echo '<tr>'; 
		echo '<td>';
		echo '<font style="color: #00EE00;">'.utf8_encode($row->Status).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #00EE00;">'.utf8_encode($row->Datum).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #00EE00;">'.utf8_encode($row->Uhrzeit).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #00EE00;">'.utf8_encode($row->Standort).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #00EE00;">'.utf8_encode($row->Meldung).'</font>';
		echo '</td>';
		echo '</tr>'; 
		}
		//Wenn keines der vorherigen Ergebnisse zutrifft, gib es den folgenden Text aus
		else {echo'<br/><br/><strong><font style="color: #FF0000;">Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk</font></strong>';}
 
		}//Ende:While
 
		echo '</tbody></table>';//Ende:AusgabeTabelle
	  }
      else{
		echo '<br/><br/><strong><font style="color: #FF0000;">Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk</font></strong><br/>';
		echo '<strong><font style="color: #FF0000;">Meldungen hat keine Ergebnisse in der Datenbank gefunden.</font></strong>';
	  }
 
echo "</div>";//Ende:meld
?><!--Ende:PHP-->

meldungena.php displays the last 10 alerts and reloads every 30 seconds

<!--
###############################
#############Usage#############
#########latest Alerts#########
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
-->
 
<script type="text/javascript">
 
//Javascript für die SekundenCountdowns mit Aktualisierung nach 30 Sekunden
 
 
// 30 Sekunden werden gesetzt
var secs=30;
 
//Hier nichts verändern!
function docount(remaining){
if (remaining==0){ location.reload(true);}
else {
	document.getElementById('countdown').firstChild.nodeValue=remaining+" Sekunden bis zur Aktualisierung"; //"Sekunden bis zur Aktualisierung" kann angepasst werden
	remain=remaining-1;
	setTimeout("docount(remain);",1000);
}
}
setTimeout("docount(secs);",100);
</script>
 
<!--Beginn:PHP-->
<?php
 
//Hier wurde vorher über meta refresh die Seite nach 5 Sekunden neu geladen. Dies funktioniert nun jedoch über das Javascript.
//echo "<meta http-equiv=\"refresh\" content=\"30\">"; 
 
echo "<link rel=\"stylesheet\" href=\"styles.css\" type=\"text/css\" media=\"screen\" />";//styles.css einbinden
echo "<div id=\"meld\">";//Beginn:meld
 
//connection_data.inc.php beinhaltet die Verbindungsdaten zum MySQL Server, include fügt diese in diese Seite ein
include("includes/connection_data.inc.php");
 
//Hier wird der Countdown angezeigt
echo "Noch ";
echo " <span id=\"countdown\"> </span>";
 
 
//Es werden die letzten 10 Einträge, welche den Status Alarm haben aus der Datenbank gelesen.
//Sortiert wird nach IdMeldungen (alternativ: Datum AND Uhrzeit) durch DESC (alternativ: ASC) in der Auflistung neuster Eintrag oben, durch LIMIT 0,10 limitiert auf 10 Stück (dieser Wert kann angepasst werden) 
$abfrage = "SELECT * FROM Meldungen WHERE Status LIKE 'Alarm' ORDER BY IdMeldungen DESC LIMIT 0,10"; 
$ergebnis = mysql_query($abfrage); 
$ergebnisse = mysql_num_rows($ergebnis);
 
      if ($ergebnisse != 0){
		//Tabelle für Ausgabe wird erzeugt
		echo '<table border=1><thead><tr><th>Status</th><th>Datum</th><th>Uhrzeit</th><th>Standort</th><th>Meldung</th></tr></thead><tbody>'; 
 
		//Solange es Ergebnisse gibt, werden diese ausgegeben 
		while ($row = mysql_fetch_object($ergebnis)){
 
		//Hier wird alles in rot ausgegeben, da lediglich die Alarmmeldungen gesucht wurden. Die if-Abfrage ist nur zur Sicherheit, damit Fehler erkannt werden können
		if($row->Status == Alarm){
		echo '<tr>'; 
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Status).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Datum).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Uhrzeit).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Standort).'</font>';
		echo '</td>';
		echo '<td>';
		echo '<font style="color: #FF0000;">'.utf8_encode($row->Meldung).'</font>';
		echo '</td>';
		echo '</tr>';
		}
		//Wenn Status nicht Alarm ist, gib es den folgenden Text aus
		else {
		echo '<br/><br/><strong><font style="color: #FF0000;">Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk</font></strong>';
		}
 
		}//Ende:While		
 
		echo '</tbody></table>';//Ende:AusgabeTabelle
 
	  }
      else{
		echo '<br/><br/><strong><font style="color: #FF0000;">Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk (2119)</font></strong><br/>';
		echo '<strong><font style="color: #FF0000;">Meldungen-Alarm hat keine Ergebnisse in der Datenbank gefunden.</font></strong>';
	  }
 
echo "</div>";//Ende:meld
?><!--Ende:PHP-->

suche.php is a search for alerts

<!--
###############################
#############Usage#############
##########Alertssearch#########
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
-->
 
<!doctype html><html><head>
 
<title>Meldungssuche</title>
<link rel="shortcut icon" href="images/favicon.ico" />
<link rel="stylesheet" href="styles.css" type="text/css" media="screen" /><!--styles.css einbinden-->
<meta http-equiv="content-type" content="text/html; charset=utf-8" /><!--Für korrekte Zeichendarstellung wird UTF-8 verwendet-->
</head>
 
<body>
 
 
<div id="uberg">
Meldungssuche
</div><!--Ende:uberg -->
<br/><br/>
 
 
<table><!--Beginn:Tabelle-->
<tr>
<td>
<form action="" method="post"><!--Beginn:Formular -->
 
Status:<br/>
 
<select name="status">
  <option selected value=""></option>
  <option value="Alarm">Alarm</option>
  <option value="Warnung">Warnung</option>
  <option value="Information">Information</option>
</select><br/><br/>
 
  Datum(YYYY-MM-DD): <br/><input type="text" name="datum" size="20"></br></br>
 
  Uhrzeit(HH:MM:SS): <br/><input type="text" name="uhrzeit" size="20"></br></br>
Standort(B.0000 R.000): <br/><input type="text" name="standort" size="20"></br></br>
 
  Meldung: <br/><input type="text" name="meldung" size="20"></br></br>
 
  <input type="submit" value="Suchen"><br/><br/>
</form><!--Ende:Formular -->
 
<br/><br/>
</td>
<td>
 
<!--Beginn:PHP-->
<?php
 
//connection_data.inc.php beinhaltet die Verbindungsdaten zum MySQL Server, include fügt diese in diese Seite ein
include("includes/connection_data.inc.php");
 
//Variablen von Formular werden hier gesetzt
$status = $_POST["status"];
$datum = $_POST["datum"];
$uhrzeit = $_POST["uhrzeit"];
$standort = $_POST["standort"];
$meldung = $_POST["meldung"];
 
					//Es werden alle Einträge in der Datenbank herausgesucht, welche den Spaltennamen [Bsp. Status] ähnlich haben wie die Variable aus dem Formular [Bsp. $status]. Hier werden direkt alle Variablen abgefragt.
					//Durch ORDER BY werden die Einträge nach Id sortiert, heißt, die neusten Einträge sind durch den Anhang DESC (alternativ ASC) stets oben. Da willkürlich eingelesen wird, könnte man hier auch nach Datum (statt IdMeldungen) sortieren.
					//LIMIT 0,30 limitiert die Ergebnisse auf 30 Stück. Die Anzahl kann je nach Bedarf angepasst werden.
					$abfrage = "SELECT * FROM Meldungen WHERE Status LIKE '%$status%' AND Datum LIKE '%$datum%' AND Uhrzeit LIKE '%$uhrzeit%' AND Meldung LIKE '%$meldung%' AND Standort LIKE '%$standort%' ORDER BY IdMeldungen DESC LIMIT 0,30"; 
					$ergebnis = mysql_query($abfrage); 
					$ergebnisse = mysql_num_rows($ergebnis);
 
					if ($ergebnisse != 0){
 
						//Tabelle für Ausgabe wird erzeugt
						echo "<table border=1><thead><tr><th>Status</th><th>Datum</th><th>Uhrzeit</th><th>Standort</th><th>Meldung</th></tr></thead><tbody>";
 
						//Solange es Ergebnisse gibt, werden diese ausgegeben 
						while ($row = mysql_fetch_object($ergebnis)){
 
						//Wenn der Status des Ergebnisses 
Alarm ist, wird diese Zeile rot ausgegeben
						if ($row->Status == "Alarm") {
						echo '<tr>'; 
						echo '<td>';
						echo '<font style="color: #FF0000;">'.utf8_encode($row->Status).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF0000;">'.utf8_encode($row->Datum).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF0000;">'.utf8_encode($row->Uhrzeit).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF0000;">'.utf8_encode($row->Standort).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF0000;">'.utf8_encode($row->Meldung).'</font>';
						echo '</td>';
						echo '</tr>'; 
						}
						//Wenn der Status des Ergebnisses nicht Alarm ist, jedoch Warnung, wird diese Zeile orange ausgegeben
						elseif ($row->Status == "Warnung") {
						echo '<tr>'; 
						echo '<td>';
						echo '<font style="color: #FF8800;">'.utf8_encode($row->Status).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF8800;">'.utf8_encode($row->Datum).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF8800;">'.utf8_encode($row->Uhrzeit).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF8800;">'.utf8_encode($row->Standort).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #FF8800;">'.utf8_encode($row->Meldung).'</font>';
						echo '</td>';
						echo '</tr>'; 
						}
						//Wenn der Status des Ergebnisses nicht Alarm und nicht Warnung ist, jedoch Information, wird diese Zeile grün ausgegeben
						elseif ($row->Status == "Information"){
						echo '<tr>'; 
						echo '<td>';
						echo '<font style="color: #00EE00;">'.utf8_encode($row->Status).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #00EE00;">'.utf8_encode($row->Datum).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #00EE00;">'.utf8_encode($row->Uhrzeit).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #00EE00;">'.utf8_encode($row->Standort).'</font>';
						echo '</td>';
						echo '<td>';
						echo '<font style="color: #00EE00;">'.utf8_encode($row->Meldung).'</font>';
						echo '</td>';
						echo '</tr>'; 
						}
						//Wenn keines der vorherigen Ergebnisse zutrifft, gib es den folgenden Text aus
						else {
						echo '<br/><br/><strong><font style="color: #FF0000;">Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk</font></strong><br/>';
						}
 
						}//Ende:While
 
						echo "</tbody></table>";//Ende:AusgabeTabelle
 
					}
					else{
					echo '<br/><br/><strong><font style="color: #FF0000;">Die Suche lieferte keine Ergebnisse.</font></strong><br/>';
					echo '<strong><font style="color: #FF0000;">Falls dies ein Fehler ist, kontaktieren Sie bitte den Helpdesk.</font></strong>';
					}
 
 
?><!--Ende:PHP-->
</td>
</tr>
</table><!--Ende:Tabelle-->
 
<br/><br/>
 
 
</body>
</html>

alarm.php this file is the popup window

<!--
###############################
#############Usage#############
##########Alerts popup#########
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
-->
 
<!doctype html><html><head>
 
<title>WARNUNG</title>
<link rel="shortcut icon" href="images/favicon.ico" />
<link rel="stylesheet" href="styles.css" type="text/css" media="screen" />
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
 
<!-- Falls automatisches Schließen deaktiviert werden soll, ist das folgende JavaScript zu deaktivieren. -->
<!-- für eine längere Anzeigedauer des Popups kann auch bei aktuell 30000 die Sekundenzahl erhöht werden. Die Sekundenzahl ist mal 1000 zu nehmen (30 Sekunden => 30000) --> 
<script language="javascript">
setTimeout ("self.close();", 30000);
</script>
 
</head>
 
<body>
 
<div id="uberg">
WARNUNG
</div><!--Ende:uberg -->
<br/><br/>
 
<div id="centered">
<strong>Es wurde ein Alarm gemeldet!</strong>
 
<?php
session_start ();
$status = $_SESSION["Status"];
$datum = $_SESSION["Datum"];
$uhrzeit = $_SESSION["Uhrzeit"];
$standort = $_SESSION["Standort"];
$meldung = $_SESSION["Meldung"];
 
echo '<br/><br/><table border=1><thead><tr><th>Status</th><th>Datum</th><th>Uhrzeit</th><th>Standort</th><th>Meldung</th></tr></thead><tbody>'; 
 
echo '<tr>'; 
echo '<td>';
echo '<font style="color: #FF0000;">'.utf8_encode($status).'</font>';
echo '</td>';
echo '<td>';
echo '<font style="color: #FF0000;">'.utf8_encode($datum).'</font>';
echo '</td>';
echo '<td>';
echo '<font style="color: #FF0000;">'.utf8_encode($uhrzeit).'</font>';
echo '</td>';
echo '<td>';
echo '<font style="color: #FF0000;">'.utf8_encode($standort).'</font>';
echo '</td>';
echo '<td>';
echo '<font style="color: #FF0000;">'.utf8_encode($meldung).'</font>';
echo '</td>';
echo '</tr>';
 
echo '</tbody></table>';
?>
</div><!--Ende:centered -->
</body>
</html>

connection_data.inc.php contains all the connection info for the mysql db

<?php
/*
###############################
#############Usage#############
########Connect to MySQL#######
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################
*/
 
// connect = Adresse , User , Passwort 
mysql_connect("localhost", "<user>" , "<passwort>")
or die("Verbindung zur Datenbank konnte nicht hergestellt werden");
 
// Auswahl der Datenbank "mysql" - ggf. anpassen
mysql_select_db("mysql") or die ("Datenbank konnte nicht ausgewählt werden");
?>

styles.css contains the styles to design the site

/*###############################
#############Usage#############
#############Styles############
###############################
#############Datum#############
###########15-04-2014##########
###############################
#############Autor#############
###########Lunetikk############
###############################*/
 
/*Linkfarben werden hier vergeben*/
a:link {color:#93BC3A;}    /* unvisited link */
a:visited {color:#93BC3A;} /* visited link */
a:hover {color:#5DA93D;}   /* mouse over link */
a:active {color:#93BC3A;}  /* selected link */
 
body {
margin-left: auto;	/*Verschub nach links wird hier vergeben*/
margin-right: auto;	/*Verschub nach rechts wird hier vergeben*/
margin-top: 15px;	/*Verschub nach oben wird hier vergeben*/
margin-bottom: 10px;	/*Verschub nach unten wird hier vergeben*/
font-size: 15px;	/*Schriftgröße wird hier vergeben*/
color: #fff; 		/*Schriftfarbe wird hier vergeben*/
background: #323232; 	/*Hintergrundfarbe wird hier vergeben*/
}
 
table{
margin-left: auto;				/*Verschub nach links wird hier vergeben*/
margin-right: auto;				/*Verschub nach rechts wird hier vergeben*/
font-weight:bold;				/*Schrift ist Dick (html -> <b> bzw. <strong>)*/
/*font-family: Verdana,sans-serif;*/		/*Schriftart - ähnlich wie Tahoma*/
/*font-family: Arial, Helvetica, sans-serif;*/	/*Schriftart - etwas kleiner als Tahoma*/
font-family: Tahoma, Geneva, sans-serif;	/*Schriftart aktuell gesetzt*/
}
 
/*Überschrift*/
#uberg {
text-align:center;	/*Text ist in der Mitte*/
font-size: 30px;	/*Schriftgröße wird hier vergeben*/
font-weight:bold;	/*Schrift ist Dick (html -> <b> bzw. <strong>)*/
}
 
/*Alles in der Mitte*/
#centered {
text-align:center; }

The database

CREATE TABLE IF NOT EXISTS `Meldungen` (
  `IdMeldungen` int(11) NOT NULL AUTO_INCREMENT,
  `Status` varchar(32) NOT NULL,
  `Datum` date NOT NULL,
  `Uhrzeit` varchar(8) NOT NULL,
  `Standort` varchar(20) NOT NULL,
  `Meldung` varchar(64) NOT NULL,
  `Alarmfenster` tinyint(1) NOT NULL,
  PRIMARY KEY (`IdMeldungen`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1;

index.php/ the site itself

the search

the alarm popup

I had to move on and never saw the final solution of the project. :-\

If anybody want to use this because of whatever reason, you could send mails when alarm is executed.