Tcl Script um Calls zu loggen

  • Hallo liebe Svxlink Gemeinde.
    Ich habe da mal eine Frage. Gibt es ein Tcl Script, welches eingehende Stationen (keine lokalen) mit Tag, Uhrzeit und Call in eine log Datei schreibt?
    Das scrollen in der svxlink log ist doch recht mühselig ;)
    Ich bin nicht der große Tcl Programmierer, denke aber das wenn es soetwas gibt ich es bei mir integrieren kann.

    73
    SA7BNT
    Tim

  • Hi Tim,

    hm, ich denke eine entsprechende Erweiterung innerhalb des EchoLink-Bereiches (Core) wäre da etwas besser geeignet.
    Es ist sicher nicht der große Aufwand das zu implementieren, ein bisschen filehandling halt.
    Gibt's noch jemanden der gerne ein bisschen C++ coden möchte? Los Leute, so schwer ist das wirklich nicht!

    73's de Adi, DL1HRC

  • Warum C++-Programme dazu schrieben -- es reicht sehr viel weniger!!!

    Da gibt es ja mehrere Möglichkeiten, auf dem bereits vorhandenen aufzusetzen:

    • Logging über APRS und dieses auf APRS.fi einsehen
    • Verwendung der svxlink.log und Auswertung mittels GREP

    Ich will kurz auf die zweite Möglichkeit eingehen:
    das folgende einzeilige Kommando auf der Bash-Eingabezeile

    Code
    grep CONNECTED svxlink.log |sed  "s/Echo.*to //" |less

    erzeugt die scrollbare Ausgabe:

    Code
    ...20. Aug 2013, 16:23:45: DG4BRT: CONNECTED20. Aug 2013, 17:44:42: I0RNK: CONNECTED20. Aug 2013, 17:45:25: I0RNK: DISCONNECTED20. Aug 2013, 17:59:17: DG0BBL: CONNECTED20. Aug 2013, 17:59:56: DG0BBL: DISCONNECTED20. Aug 2013, 18:23:33: DB9HE-L: CONNECTED20. Aug 2013, 18:24:46: DB9HE-L: DISCONNECTED20. Aug 2013, 18:24:56: DB9HE-L: CONNECTED20. Aug 2013, 18:27:22: DB9HE-L: DISCONNECTED20. Aug 2013, 18:32:59: DG4BRT: DISCONNECTED...

    Hier sind zum Beispiel sehr schön die kurzzeitigen Connects -- Disconnects und aber auch die lange Connectzeit mit über 2 Stunden von DG4BRT gut zu erkennen.

    Das Umleiten in eine Datei ist natürlich auch möglich. Sogar eine Datenbank könnte man daran anschließen -- aber wie oft willst und wirst Du diese Informationen benutzen? Wie hoch darf der Aufwand dafür sein?

    Also, z.B. das Umleiten in eine Datei erfordert statt

    Code
    ....|less


    dann

    Code
    .... > Logbuch-datei.log

    Was willst Du mehr?

    vy 73

    Michael, DK5HH

  • Hallo Michael,

    Danke für deine Antwort. Hätte nicht gedacht das es so einfach geht.
    Ich muss aber nochmal dazu was Fragen.
    Ist es auch möglich die Ausgabe, quasi als live Ticker laufen zu lassen?
    Ich dachte da an z.B tail -f

    Die Idee ist mit wenigen Schritten zu sehen, wer und wann auf bzw. noch auf dem SVXLINK befindet.

    Ich nutze gerne das IPad um in die log Dateien zu schauen, allerdings ist es nicht so flexible wie ein Pc in dieser Sache mit dem scrollen.

    Und deshalb meine Frage.
    Ich muss mir im laufe der Woche mal anschauen wie das mit dem Schreiben der Datei geht. Vielleicht reicht das ja schon.

    Wie geschrieben, für mich dreht es sich eigentlich nur darum um mal zu schauen wer Connectet hat in laufe des Tages.

    73
    SA7BNT
    Tim

  • ok, ich hatte es so verstanden, dass es um eine Art Logbuch ginge, eine Tabelle der From:
    Beginn QSO|Ende QSO|Call|Name|Bemerkungen
    also alles was bei einer EL-Verbindung so ausgetauscht wird. Alle diese Informationen gibt es aber nur innerhalb der ModuleEchoLink.cpp

    73's de Adi, DL1HRC

  • @ Tim:
    auch das gewünschte tail wird vom Linux mitgeliefert:
    aus

    Code
    man watch


    entnehme ich:

    Code
    watch - execute a program periodically, showing output fullscreen

    also würde z.B. die Zeile sein können

    Code
    watch -n 5 '(grep CONNECTED /var/log/svxlink.log |sed  "s/Echo.*to //" |tail -n 10 )'

    watch -n 5 aktualisiert alle 5 Sekunden -- darf natürlich auch größer sein (vielleicht 50)
    die in Hochkommata geschriebene und in Klammern befindliche Befehlsfolge wird alle n Sekunden wiederholt
    Bitte n so wählen, dass der Rechner nicht überlastet wird!

    * geändert und mit den benötigten Hochkommata ausgestattet (M.H. 21:24, 15.10.2013)

    Ist es das, was Du wolltest?

    vy 73
    Michael

    Edited 5 times, last by dk5hh (October 15, 2013 at 10:32 PM).

  • Danke für deine Antwort. Allerdings klappt es noch nicht ganz. Werde mal damit rumspielen.

    Code
    root@svxlink:~# watch -n 5 (grep Connected /var/log/svxlink.log |tail -n 10 )
    -bash: Syntaxfehler beim unerwarteten Wort `('
    root@svxlink:~#

    73
    SA7BNT
    Tim

  • @Tim
    Sorry für die unprofessionelle Darstellung -- Du bist wahrscheinlich mit meiner ersten Edition losgelaufen
    bitte sieh Dir noch einmal die überarbeitete Fassung an (Der Ausdruck muss in Hochkommata eingelegt werden.)

    Die neue Fassung ist erprobt und läuft bei mir gut.

    vy 73
    Michael, dk5hh

  • Michael

    Jap genau so hatte ich mir es vorgestellt.
    Und ich sehe nochmal darüber hinweg das es nicht beim ersten mal geklappt hat :lol: :lol: :D
    Wie ich ja schon geschrieben habe bin ich Linux Neuling. Ich lerne noch, aber das mit viel Interesse und Wissens Gier.

    Danke nochmals.

    73
    Tim
    SA7BNT

  • Wenn ich mir erlauben darf diesen alten Fred erneut zu öffnen ....
    Wie muß die Grep - Abfrage aussehen, damit ich auf alle Verbindungen eines Monats filtern kann (mit Ausgabe in eine Datei) und wie muß der monatliche Cronjob aussehen, der dies dann regelmäßig am 1. des Folgemonats macht?
    Ich möchte - ähnlich wie bei meiner FritzBox - eine monatliche Logdatei erzeugen lassen. Danach kann das "logrotate" auch noch einsetzen, welches sich mir noch nicht 100%-ig erschlossen hat. Evtl. kann Adi das in einer kleinen separaten Section mal detailliert für Dummies erläutern.

    Happy new year

  • Hi Frank,

    na ja, ich bin eher der Perl-Freak. Mal so in 10 Minuten zusammenprogrammiert und noch nicht optimal:


    Perl
    #!/usr/bin/perluse POSIX qw(strftime);$svxlink_log = "/var/log/svxlink";$svxlink_lb  = "/tmp/svxlink_lb";#####################################################################################open(IN, "<$svxlink_log") || die "Can not open $svxlink_log"; @lines = <IN>;close(IN);$date = strftime "%d%m%Y-%H%M", localtime;open(OUT, ">$svxlink_lb-".$date) || die "Can not open $svxlink_lb-$date";print OUT "Callsign\tbegin\tend\n";foreach $l (@lines) {  if ($l=~ m/CONNECTED/) {    if ($l =~ m/(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d):\s([A-Z0-9-]{3,8}):\s(.*)to\sCONNECTED/) {      $con_time = $1;      $con_call = $2;    }    if ($l =~ m/(\d\d.\d\d.\d\d\d\d \d\d:\d\d:\d\d):\s([A-Z0-9-]{3,8}):\s(.*)to\sDISCONNECTED/) {      $disc_time = $1;      $disc_call = $2;      print OUT "$disc_call\t$con_time\t$disc_time\n";    }  }}close OUT;

    Dieses File z.B. in el_logbook.pl bennenen und nach /usr/bin kopieren. Dann muß es noch ausführbar gemacht werden mit

    Code
    chmod 755 el_logbook.pl

    Weiterhin sollte es dem User gehörern unter dem svxlink bei Euch läuft, z.B.:

    Code
    chown svxlink:svxlink el_logbook.pl

    Die Datei liest die aktuelle svxlink-Logdatei und erstellt daraus ein kleines Logbuch mit Call, QSO-Anfang, QSO-Ende. Es ist aber definitiv nicht der Weisheit letzter Schluß.

    vy 73's de Adi, DL1HRC

    Edited once, last by dl1hrc (January 3, 2014 at 5:51 PM).

  • Hi Adi,

    danke - das teste ich gleich mal aus. Muss die Datei mit dem Script einen besonderen Suffix bekommen und wie bekomme ich sie lauffähig?
    Danach recherchiere ich mal, wie man das Script in einen monatlichen Cronjob bekommt.

  • noch ein kleiner Nachtrag:

    i) Das Skript kannst Du beliebig oft ausführen, z.B. durch einen cron-job.
    ii) Es wird dann jedes Mal eine neue Datei angelegt im Format "svxlink_lb-DDMMYYYY-HHMM"
    iii) Das Skript sollte in eine logrotate-Konfiguration eingebaut werden, z.B.:

    Code
    /var/log/svxlink {    missingok    notifempty    weekly    create 0644 svxlink daemon    prerotate                    # prerotate -> Ausführung bevor das Logfile umbenannt wird       /usr/bin/el_logbook.pl    # das Logbuch-Skript    endscript    postrotate        killall -HUP svxlink    endscript}

    Wenn Du nur eine Datei 1x pro Tag benötigst, solltest Du die Zeile

    Code
    $date = strftime "%d%m%Y-%H%M", localtime;

    in

    Code
    $date = strftime "%d%m%Y", localtime;

    ändern. Aber das File ist halt nur eine Auflistung und auch nicht in Echtzeit, sondern immer dann wenn es gerade ausgeführt wurde. Das kann man alles noch richtig schön optimieren...wenn man genügend Zeit dafür hat :lol:

    vy 73's de Adi, DL1HRC

  • Hallo Adi,

    der erste Test ergab eine Datei, in der nur die Überschrift ausgegeben wurde:

    Callsign begin end

    Wohin gehört

    ? In welche Datei/Config gehört dies rein?

    Der Befehl chmod 755 el_logbook.pl sollte mit sudo chmod 755 el_logbook.pl ausgeführt werden.

    Geht nicht eine einfache Ausgabe eines Scripts, welches nur den Grepbefehl

    Quote

    watch -n 5 '(grep CONNECTED /var/log/svxlink.log |sed "s/Echo.*to //" |tail -n 10 )'


    alle 30 Tage ausführt?

  • Hi Frank,

    sollte svxlink heißen und in /etc/logrotate.d/ liegen.
    Wie ist Dein Logfile aufgebaut (Deutsche Umgebung oder irgendwas englisches)? Meine Logdatei sieht so aus:

    Also das Datum in deutscher Schreibweise. Sonst geht das nicht.

    73s de Adi, DL1HRC

  • Hallo Adi,

    ich beschäftige jetzt zunächst mit Schritt 1 - dem logrotate.
    In der /etc/logrotate.d/svxlink steht jetzt folgendes drin:
    -----------------------------------------------------------------------------------------------------------


    -----------------------------------------------------------------------------------------------------------
    So habe ich es jetzt auf meinem PI installiert und lasse mich überraschen, ob es funktioniert. Danach versuche ich mich am Skript.

  • Das Perl-Resultat ist schon ganz akzeptabel:

    Code
    Callsign        begin   end
    MB7INI-L        07.02.2014 00:05:23     07.02.2014 00:07:28
    DO9HM   07.02.2014 00:53:22     07.02.2014 00:53:52
    DB0WSF-R        07.02.2014 08:28:36     07.02.2014 08:35:08
    DL7AVZ-L        07.02.2014 08:35:59     07.02.2014 08:37:04
    DL7ATO-L        07.02.2014 08:37:15     07.02.2014 08:39:21
    SA7BNT-L        07.02.2014 08:41:37     07.02.2014 08:42:07


    Jetzt muß ich nur noch das logrotate zum Laufen kriegen. Heute Abend sollte ein neues Log erzeugt werden ....

  • ok, 1. Versuch mit

    Quote

    logrotate -f /etc/logrotate.d/svxlink

    ging in die Hose:

    Quote

    error: error running non-shared prerotate script for /var/log/svxlink.log of '/var/log/svxlink.log '
    error: error creating state file /var/lib/logrotate/status: Keine Berechtigung


    Any idea?