Eure Ideen zur Fehlerzusammenfassung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
mcmehl
Beiträge: 276
Registriert: 16.06.2004 16:53:15
Kontaktdaten:

Eure Ideen zur Fehlerzusammenfassung

Beitrag von mcmehl » 18.08.2006 11:24:43

Hallo liebes Forum,

vielleicht habt Ihr ja ein paar Ideen zum Thema.

Wir haben hier ein selbsgebasteltes Faxscript welches 2 Logfiles beschickt (faxerr.log und faxok.log). Das Script ist deshalb individuell erstellt worden, weil in diese Logfiles noch z.B. Auftragsnummern mit rein geschrieben werden.

Mein Problem ist folgendes: Bei täglich mehreren hundert Faxen verliert man den Überblick von gesendeten und fehlerhaften Faxen. Das schwierige an der Sache ist, dass es vorkommt, das eine Auftragsnummer mehrfach am Tag gesendet wird und nun kann es sein das es Morgens als Fehler abgeheftet wird, aber Mittags alles klappt und Abends wieder nich.

Ich möchte nun das Script ergänzen, dass er noch ein Logfile erzeugt, wo man die bisher noch nicht erfolgreich versendeten Auftragsnummer findet.

Meine Idee war alle fehlerhaften Auftragsnummern in die neue Logdatei zu schreiben und und jedes mal wenn eine OK ist, einen entsprechenden Fehlereintrag zu löschen.

Meine Fragen:
Gibt es eine (einfache) Möglichkeit die entsprechenden Einträge in der Logdatei zu löschen?
Würdet ihr das auch so lösen, oder gibts dafür einfachere Wege, die mir nicht einfallen?


Vielen Dank schonmal für eure Mühe

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 18.08.2006 12:02:54

hi,

wenn das Anhängen von neuen und das Löschen von alten Einträgen niemals
gleichzeitig passieren kann (weil es z.B. im gleichen Script passiert und davon
nur eine Instanz laufen kann), reicht eigentlich:

Code: Alles auswählen

grep -v "^123456 " logfile > /tmp/logfile.tmp
mv /tmp/logfile.tmp logfile
Der Suchbegriff muss natürlich eindeutig sein, die Auftragsnr. allein kommt also
nicht in Frage. Und er darf nicht mit z.B. der Telefonnr. an anderer Stelle der Zeile
verwechselt werden. Dazu steht er im Beispiel am Zeilenanfang und es folgt ein
Zwischenraum.

Alternativ kann man für jedes Problem-Fax eine eigene Datei erzeugen und die
dann bei Bedarf wieder löschen. Der Vorteil ist, dass Erzeugen und Löschen
unabhängig voneinander passieren dürfen. Wenn diese Dateien in einem extra
Verzeichnis stehen, liefert z.B. ein "cat faxen/probleme/*" die gleiche Information
wie die einzelne Log-Datei.

Bei weniger als 100 Problem-Faxen am Tag sollte das auch schnell genug sein.
Beware of programmers who carry screwdrivers.

_mh_
Beiträge: 171
Registriert: 10.07.2006 11:52:28

Beitrag von _mh_ » 18.08.2006 12:07:28

Hallo,

wenn du sagst dass du ein Problem hast sie zu unterscheiden, waere es dann nicht vielleicht sinnvoll die Urzeit anzuhaengen? somit weiss man immer genau wann das war?

zum Thema filtern, ich glaube grep is da schon ne gute Loesung. Nur ich wuerde mir fast ueberlegen irgendeine Skriptsprache zu nehmen um sowas zu verwirklichen, weils einheitlicher is (ruby,python,perl.....)

Benutzeravatar
mcmehl
Beiträge: 276
Registriert: 16.06.2004 16:53:15
Kontaktdaten:

Beitrag von mcmehl » 18.08.2006 13:19:19

Danke für die Antworten.

@cosmac
wenn das Anhängen von neuen und das Löschen von alten Einträgen niemals gleichzeitig passieren kann...
Leider doch :cry:

Dafür ist die Alternative wirklich einfach und funktionell. Danke. (das ich da nicht von selbst drauf gekommen bin :roll: )


Schön wäre es natürlich gewesen, wenn es doch mit einer Datei geklappt hätte.
Und genau an diesem Punkt wirft sich mir eine Frage auf:
In ein Logfile kann ich via ">>" von hunderten Programmen ohne Probleme etwas hineinschreiben lassen. Aber wenn ich jetzt eine Zeile löschen möchte muss ich "Datei lesen"->"Auswertung"->"erzeugen einer neuen Datei" ?


Aber danke nochmal, meine eigentliches Problem ist gelöst.

cosmac
Beiträge: 4576
Registriert: 28.03.2005 22:24:30

Beitrag von cosmac » 18.08.2006 13:59:53

Wenn ich eine Zeile wirklich lösche, muss ja der Rest der Datei nach
vorn verschoben werden, d.h. mindestens der Rest muss neu auf die
Platte geschrieben werden. Wenn während der Zeit jemand was hinten
anhängen will, müssen sich beide Schreiber irgendwie einigen.

In einem C-Programm kann man mit "fseek()" mitten in eine Datei schreiben
ohne den Rest zu berühren. Damit kann man einen Eintrag logisch löschen,
aber der Platzbedarf bleibt konstant. Die entsprechende Funktion auf der
Kommandozeile wäre z.B.:

Code: Alles auswählen

echo "---" | dd bs=$ZEILENLAENGE seek=$ZEILENNR count=1 conv=notrunc of=logfile
Der Einfachheit halber sollten alle Zeilen gleich lang sein und auch
die "---" müssen die richtige Länge haben (Zeileende = 1 Byte).
:!: Es ist aber nicht garantiert, dass sowas mit mehreren Schreibern funktioniert

Die korrekte Methode wäre ein " advisory lock" in allen beteiligten Programmen.
In C gibt es flock(), aber in einem Script???
Beware of programmers who carry screwdrivers.

Benutzeravatar
mcmehl
Beiträge: 276
Registriert: 16.06.2004 16:53:15
Kontaktdaten:

Beitrag von mcmehl » 18.08.2006 15:35:56

Danke für die Antwort. Wieder was dazu gelernt.

Aber ich denke, dass damit der Rahmen gesprengt wird, dann bleibe ich jetzt doch bei der ersten Variante.
Die korrekte Methode wäre ein " advisory lock" in allen beteiligten Programmen. In C gibt es flock(), aber in einem Script???
Ich könnte mir diesem Fall höchstens einen Workaround vorstellen, in dem man einfach eine lock-Datei vorm schreiben erstellt und diese nach dem Schreibvorgang wieder löscht. Sollte dann eine Instanz diese Datei vorfinden, dann wird eine kurze Pause gemacht und dann nochmal probiert.

Benutzeravatar
monotek
Beiträge: 227
Registriert: 20.07.2004 15:25:11
Wohnort: dresden

Beitrag von monotek » 18.08.2006 21:24:29

Wäre es möglich das Faxscript mal zu sehen?

Antworten