Soße: Anspruchsvolle Programmierart

Halle,

Ok wie fange ich am besten an ?
wir haben bei uns in der firma ein .cgi das unsere backupkontrollen anzeigt (fehler oder OK).
da ich ein sehr fauler mensch bin der denkt: -mach dir einmal arbeit und dann nie wieder-, hab ich folgendes vor:
ok dieses .cgi sieht (nach dem ausführen) ungefähr wie folgt aus:
############################################

Friday
-----------------
Sat Nov  2 06:30:00 CET 2002
-----------------
Server domino-r5 Fri-Sicherung: OK
------------------------------------------------
--             Server f-aac01 Fri-Sicherung  --
------------------------------------------------
/server/sys/public/_run.ovl
/server/sys/public/aconsole.exe
tar (grandchild): Cannot write to /dev/tape: No medium found
tar (grandchild): Error is not recoverable: exiting now
Fri Nov 1 20:00:01 MET 2002
----------------------------------------------------
Fri Nov 1 20:06:01 MET 2002
tar (grandchild): Read error on /dev/tape: No medium found
tar (grandchild): At beginning of tape, quitting now
tar (grandchild): Error is not recoverable: exiting now
Fri Nov 1 20:06:01 MET 2002
----------------------------------------------------
mt: /dev/tape: No medium found
Backup-Fehler: Die Zeilenanzahl von backup.Fri (7) und verify.Fri (5) Datei stimmen nicht ueberein!
Bitte Datensicherung in f-aac01 ueberpruefen!
Gesicherte Datenmenge: 2 Byte
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
------------------------------------------------
--             Server f-dre01 Fri-Sicherung  --
------------------------------------------------
/server/home/spiessed/word/WINWORD.INI
/server/home/spiessed/word/123.DOC
tar: /dev/tape: Cannot write: No medium found
tar: Error is not recoverable: exiting now
Fri Nov 1 20:00:01 CET 2002
----------------------------------------------------
Fri Nov 1 20:06:01 CET 2002
tar: /dev/tape: Cannot read: No medium found
tar: At beginning of tape, quitting now
tar: Error is not recoverable: exiting now
gzip: stdin: unexpected end of file
tar: Child returned status 2
tar: Error exit delayed from previous errors
Fri Nov 1 20:06:01 CET 2002
----------------------------------------------------
mt: /dev/tape: No medium found
Backup-Fehler: Die Zeilenanzahl von backup.Fri (78) und verify.Fri (8) Datei stimmen nicht ueberein!
Bitte Datensicherung in f-dre01 ueberpruefen!
Gesicherte Datenmenge: 2 Byte
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

##############################################

also sehr unübersichtlich.

HEAD:

------------------------------------------------
--             Server f-dre01 Fri-Sicherung  --
------------------------------------------------

BODY ist immer unterschiedlich wobei die tars die fehlermelngen sind wobei nur no medium found oder i/o error interessant sind.

FOOT einer jeden meldung:
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

ich möchte das ein cronjob (also ein script) automatisch dieses cgi nach den relevanten errors durchsucht und eine bestimmte email adresse benachrchtigt wird.
es soll nach folgenden error arten suchen:

No medium found
No such device
Input/Output-Error
Device or Resource busy
EOF not on block boundary / No Space left on device
Skipping to next file header
Padding with zeros
Can not open archive / Read-only file system
Can not add file
No such file or directory
not in compressed format

in der mail soll dann sowas stehen wie

Server f-dre01 Fri-Sicherung: No medium found
also folgende syntax:
+Server+ +Datum+: +Error+ \n

das script müsste dann also erst nach den 11 verscheidenen errors suchen (nach und nach) angenommen er findet jetzt mal ein no medium found, dann steht er in dem moment in der zeile wo das steht, dann müsste das script soviele zeielen nach oben gehen, bis er einen server gefunden hat, dann müsste das in einer variablen gespeichert werden: SERVER und ERROR und das bis unten hin und mit allen 11 error arten. puh jetzt hab ich lang genug getippt.

also erst nach error art 1 die ganze seite durchsuchen dann error art 2 die ganze seite durchsuchen ...

testweise könnte mann das erstmal vereinfachen mit folgender textdatei:
text.txt:

hallo
das ist
hier steht was ich als 2tes suche: treppe
ist ein
ein test
hier steht was ich eigentlich suche: haus
und dann gehts weiter und fängt von vorne an
hallo
das ist ...

das php script soll nun nach "haus" suchen und soll am ende folgende ausgabe durch eine variable $result machen:

"Das haus hat eine treppe".
aber so -- "Das" + x1 + "hat eine" + x2 --
das script soll aber NICHT so suchen:
$suchwort1 = 'haus'
$suchwort2 = 'treppe'

sondern dynamisch, denn die textdatei könnte ja auch so aussehen:

##########################################
hallo
das ist
hier steht was ich als 2tes suche: treppe
ist ein
ein test
hier steht was ich eigentlich suche: haus
und dann gehts weiter und fängt von vorne an
hallo
das ist
hier steht was ich als 2tes suche: grasfläche
ist ein
hier steht was ich eigentlich suche: haus
hallo
das ist
hier steht was ich als 2tes suche: schnauze
ist ein
ein test
hier steht was ich eigentlich suche: tier
und dann gehts weiter und fängt von vorne an
hallo
das ist
hier steht was ich als 2tes suche: wohnung
ist ein
hier steht was ich eigentlich suche: haus
#######################################

verstanden ? so bilden sich folgende möglichkeiten:

das haus hat eine treppe
das haus hat eine grasfläche
das tier hat eine schnauze
das haus hat eine wohnung

zunächst muss nach haus gesucht werden und dann nach treppe grasfläche wohung und schnauze und danach muss nach tier gesucht werden und dann nach treppe grasfläche wohnung und schnauze.

diese vorgehensweise ist das was ich suche das alles in ein varible speichern den rest bekomme ich schon hin. das schwirige ist das mit den zeilen parsen, denn er muss nicht 5 zeilen nach oben oder nach unten sondern zu einem dynamischen punkt keinen festen.

ich hoffe ich hab mich ausführlich genug ausgedrückt !
wenn nicht nochmal nachfragen.

Danko

  1. Moin!

    diese vorgehensweise ist das was ich suche das alles in ein varible speichern den rest bekomme ich schon hin. das schwirige ist das mit den zeilen parsen, denn er muss nicht 5 zeilen nach oben oder nach unten sondern zu einem dynamischen punkt keinen festen.

    ich hoffe ich hab mich ausführlich genug ausgedrückt !
    wenn nicht nochmal nachfragen.

    Lies die Zeilen nacheinander ein.
    |
    |- Suche in der Zeile nach einem Servernamen. Wenn gefunden,
    |  speichere ihn.
    |
    |- Suche in der Zeile nach Fehlermeldungen. Wenn gefunden, dann
    |  gehören Sie zum vorher gefundenen Server (der Servername sollte
    |  am Anfang des Skriptes mit "Servername nicht gefunden"
    |  initialisiert werden, falls dein Skript z.B. kaputte Dateien
    |  kriegt, in denen kein erster Servername gefunden wird).
    |  Wenn du Fehlermeldungen gefunden hast, fasse sie mit dem
    |  Servernamen zusammen in eine Textmeldung. Füge diese den bisher
    |  gesammelten Textmeldungen hinzu.
    |
    Wenn du Textmeldungen hast, dann maile sie.

    - Sven Rautenberg

    1. halle Sven,

      ja so hatte ich es auch vor - mache es mir aber einfacher
      ich suche einmal nach bestimmten begriffen und speichere sie, wenn die begriffe nicht in der zeile stehen werden sie übersprungen.

      so habe ich das ausschlussverfahren und hab am ende eine minimale textgröße (mehr wollte ich im prinzip nicht)

      die frage ist wie bekomme ich die cgi datei in eine text datei wie kann ich sie durch ein php script ausführen und in eine $variable speichern ?

      Danko

      1. halle Sven,
        ja so hatte ich es auch vor - mache es mir aber einfacher
        ich suche einmal nach bestimmten begriffen und speichere sie, wenn die begriffe nicht in der zeile stehen werden sie übersprungen.
        so habe ich das ausschlussverfahren und hab am ende eine minimale textgröße (mehr wollte ich im prinzip nicht)
        die frage ist wie bekomme ich die cgi datei in eine text datei wie kann ich sie durch ein php script ausführen und in eine $variable speichern ?
        Danko

        Hallo Soße,

        .cgi -> was ist CGI bei dir. Für mich ist das eine "Scriptdatei", welche auf dem Common Gateway Interface aufsetzt und ausgeführt wird.

        Bei dir sieht es nach einer Logdatei (ASCII) für einen Vorgang aus, welcher durch ein CGI-Progrämmle ausgeführt wird. Und sowas einzulesen, sollte mit PHP nun doch wirklich kein Problem sein.

        Vielleicht hättest du das am Anfang deines Romans mit dazu schreiben sollen. Des weiteren ist mir/uns unklar, ob diese Ausgabe in eine Textdatei oder als HTML-Stream zurück an einen Browser erfolgt. Auch hast du nicht geschrieben, wodurch dieses Backup-CGI angestoßen wird...

        Im ersten Posting hast du auch geschrieben: "das schwirige ist das mit den zeilen parsen, denn er muss nicht 5 zeilen nach oben oder nach unten sondern zu einem dynamischen punkt keinen festen."
        In diesem Posting suchst du dein Problem woanders. Worum geht es also jetzt? Um ne Notbeschäftigung der Forumsköpfe?

        Und warum willst du das mit PHP machen. Mach doch ein Cronjob mit Perl. PHP ist Bastelzeug für Websites und nichts für komplexere Geschäftsvorgänge, die mit einer Präsentationsschicht fürs Internet nichts zu tun haben (was in deinem Fall zutrifft).

        Sven hat da schon völlig recht, und vorallem hat er es ausreichend kurz und prägnant formulieren können.

        Gruß, Frank