#!/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=
#Passwort von MYSQL
MYSQLPW=
#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
Meldungen
Meldungen
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
//Hier wurde vorher über meta refresh die Seite nach 5 Sekunden neu geladen. Dies funktioniert nun jedoch über das Javascript.
//echo "";
echo "";//styles.css einbinden
echo "";//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 " ";
//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 'Status Datum Uhrzeit Standort Meldung ';
//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 '';
$eintrag = "UPDATE `mysql`.`Meldungen` SET `Alarmfenster` = '0' WHERE `Meldungen`.`Alarmfenster`='1'";
$eintragen = mysql_query($eintrag);
}
else {/*Nicht notwendig*/}
echo '';
echo '';
echo ''.utf8_encode($row->Status).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Meldung).'';
echo ' ';
echo ' ';
}
//Wenn der Status des Ergebnisses nicht Alarm ist, jedoch Warnung, wird diese Zeile orange ausgegeben
elseif($row->Status == Warnung)
{
echo '';
echo '';
echo ''.utf8_encode($row->Status).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Meldung).'';
echo ' ';
echo ' ';
}
//Wenn der Status des Ergebnisses nicht Alarm und nicht Warnung ist, jedoch Information, wird diese Zeile grün ausgegeben
elseif($row->Status == Information)
{
echo '';
echo '';
echo ''.utf8_encode($row->Status).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Meldung).'';
echo ' ';
echo ' ';
}
//Wenn keines der vorherigen Ergebnisse zutrifft, gib es den folgenden Text aus
else {echo'
Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk';}
}//Ende:While
echo '
';//Ende:AusgabeTabelle
}
else{
echo '
Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk
';
echo 'Meldungen hat keine Ergebnisse in der Datenbank gefunden.';
}
echo "";//Ende:meld
?>
meldungena.php displays the last 10 alerts and reloads every 30 seconds
";
echo "";//styles.css einbinden
echo "";//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 " ";
//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 'Status Datum Uhrzeit Standort Meldung ';
//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 '';
echo '';
echo ''.utf8_encode($row->Status).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Meldung).'';
echo ' ';
echo ' ';
}
//Wenn Status nicht Alarm ist, gib es den folgenden Text aus
else {
echo '
Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk';
}
}//Ende:While
echo '
';//Ende:AusgabeTabelle
}
else{
echo '
Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk (2119)
';
echo 'Meldungen-Alarm hat keine Ergebnisse in der Datenbank gefunden.';
}
echo "";//Ende:meld
?>
suche.php is a search for alerts
Meldungssuche
Meldungssuche
Status Datum Uhrzeit Standort Meldung ";
//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 '';
echo '';
echo ''.utf8_encode($row->Status).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Meldung).'';
echo ' ';
echo ' ';
}
//Wenn der Status des Ergebnisses nicht Alarm ist, jedoch Warnung, wird diese Zeile orange ausgegeben
elseif ($row->Status == "Warnung") {
echo '';
echo '';
echo ''.utf8_encode($row->Status).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Meldung).'';
echo ' ';
echo ' ';
}
//Wenn der Status des Ergebnisses nicht Alarm und nicht Warnung ist, jedoch Information, wird diese Zeile grün ausgegeben
elseif ($row->Status == "Information"){
echo '';
echo '';
echo ''.utf8_encode($row->Status).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($row->Meldung).'';
echo ' ';
echo ' ';
}
//Wenn keines der vorherigen Ergebnisse zutrifft, gib es den folgenden Text aus
else {
echo '
Hier ist etwas schief gelaufen! Bitte kontaktieren Sie den Helpdesk
';
}
}//Ende:While
echo "
";//Ende:AusgabeTabelle
}
else{
echo '
Die Suche lieferte keine Ergebnisse.
';
echo 'Falls dies ein Fehler ist, kontaktieren Sie bitte den Helpdesk.';
}
?>
alarm.php this file is the popup window
WARNUNG
WARNUNG
Es wurde ein Alarm gemeldet!
Status Datum Uhrzeit Standort Meldung ';
echo '';
echo '';
echo ''.utf8_encode($status).'';
echo ' ';
echo '';
echo ''.utf8_encode($datum).'';
echo ' ';
echo '';
echo ''.utf8_encode($uhrzeit).'';
echo ' ';
echo '';
echo ''.utf8_encode($standort).'';
echo ' ';
echo '';
echo ''.utf8_encode($meldung).'';
echo ' ';
echo ' ';
echo '
';
?>
connection_data.inc.php contains all the connection info for the mysql db
" , "")
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 -> bzw. )*/
/*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 -> bzw. )*/
}
/*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\\
{{:linux:scripts:pasted:20190717-154101.png}}
the search\\
{{:linux:scripts:pasted:20190717-173938.png}}
the alarm popup\\
{{:linux:scripts:pasted:20190717-173943.png}}
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.