erweitertes loggen am router, internetverbindungsauf/ab-bau

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
kevin
Beiträge: 325
Registriert: 08.11.2004 00:03:24

erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von kevin » 02.10.2008 00:22:54

bin auf der suche nach eine loesung die mir uebersichtlich alle infos ueber meine internet verbindung mitloggt

die datei connection.log soll am ende einmal so aussehen :

Code: Alles auswählen

online            ip-adresse         dsl-server         dns_server_1       dns_server_2       offline           zeit          bytes gesendet        bytes empfangen
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
20080924080001    84.58.103.9        84.58.111.111      145.137.107.102    145.137.207.102    20080925075959    23h59m59s            100.000                100.000
20080925080001    84.58.22.147       84.58.111.111      145.137.107.102    145.137.207.102    20080926075959    23h59m59s    100.000.000.000    100.000.000.000.000
20080926080001    84.58.123.239      84.58.111.111      145.137.107.102    145.137.207.102    20080927075959    23h59m59s        100.000.000            100.000.000
20080927080001    84.58.5.90         84.58.111.111      145.137.107.102    145.137.207.102    20080928075959    23h59m59s    100.000.000.000                100.000
(alles nur beispielswerte und zahlen)
es soll einfach immer eine zeile unten dran gehangen werden

mein hauptproblem ist es aber das nicht immer alle felder die eingefuegt werden gleich lang sind, einmal ist es z.b. eine ip die 10 zeichen verbraucht, einanderes mal verbraucht sie 13 zeichen
und dann sind da noch die werte der empfangen und gesendeten bytes die rechtsbuendig sein sollen
eine loesung per sql datenbank oder aehnliches wollte ich nicht, es soll eine reine .log datei sein

Code: Alles auswählen

/etc/ppp/ip-up.d/01-connection.sh
        datum="date +%Y%m%d%H%M%S"
   ip-adresse="$IPLOCAL
   dsl-server="$IPREMOTE
         dns1="$DNS1"
         dns2="$DNS2"
  online-seit="(cat /proc/uptime | cut -d ' ' -f 1 >/var/log/connection.up")
    log-datei="/var/log/connection.log"

Code: Alles auswählen

/etc/ppp/ip-down.d/01-connection.sh
        datum="date +%Y%m%d%H%M%S"
  online-zeit="(cat /proc/uptime | cut -d ' ' -f 1 ` - `cat /var/log/connection.up`" | bc)"    # ? wie auf sekunden minuten und stunden umrechnen
     gesendet="$BYTES_SENT"
    empfangen="$BYTES_RCVD"
    log-datei="/var/log/connection.log"

hier ist besser zuerkennen wo was anfangen und aufhoeren soll

Code: Alles auswählen

                                                                                                    1         1         1         1         1         1         1         1
0         1         2         3         4         5         6         7         8         9         0         1         2         3         4         5         6         7
012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
online            ip-adresse         dsl-server         dns_server_1       dns_server_2       offline           zeit          bytes gesendet        bytes empfangen
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
20080924080001    84.58.103.9        84.58.111.111      145.137.107.102    145.137.207.102    20080925075959    23h59m59s            100.000                100.000
20080925080001    84.58.22.147       84.58.111.111      145.137.107.102    145.137.207.102    20080926075959    23h59m59s    100.000.000.000    100.000.000.000.000
20080926080001    84.58.123.239      84.58.111.111      145.137.107.102    145.137.207.102    20080927075959    23h59m59s        100.000.000            100.000.000
20080927080001    84.58.5.90         84.58.111.111      145.137.107.102    145.137.207.102    20080928075959    23h59m59s    100.000.000.000                100.000
es muesste ein programm geben dem man sagen kann 13 zeichen einfuegen bei zeichen 50 einfuegen und in die 13 zeichen pipt man dann z.b. 9 zeichen voll, und der unter schied zwischen 13 und 9 wird mir leerzeichen ausgefuellt
(eine loesung mit tabzeichen bringt nichts)

ich tu mir allgemein schwer bei solchen script sachen .. wie koennte ich das auf die beine stellen mit dem loggen ?

:edit
wenn ich im browser die schrift kleiner stelle, wird der code irgendwann nebeneinander angezeigt und dargestellt wie er sein soll
auch beim makieren und kopieren in eine text datei wird er richtig angezeigt, wird nur irgendwie hier im forum bei normalerschrift falsch angezeigt und zeilen in 2 zeilen macht

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

Re: erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von cosmac » 02.10.2008 09:22:17

hi,

du suchst printf. Das ist normalerweise kein eigenes Programm, sondern ein interner Befehl der Shell. Damit kannst du fast alle Formate erzeugen, die die C-Funktion printf kennt ("man 3 printf"). Im Prinzip geht's so:

Code: Alles auswählen

printf "%-15.15s %-15.15s %18d\n" $IPLOCAL $IPREMOTE $BYTES_RCVD
Für die Online-Zeit würde ich date mit dem Format %s verwenden (also: date +%s > /var/log/connection.up), dann kann die Shell die Differenz in Stunden und Minuten umrechnen:

Code: Alles auswählen

#!/bin/sh
t0=$(cat /var/log/connection.up)
t1=$(date +%s)
online=$(($t1 - $t0))
stunden=$(($online / 3600))
online=$(($online - $stunden * 3600))
minuten=$(($online / 60))
sekunden=$(($online - $minuten * 60))
printf "%3dh%2.2dm%2.2ds\n" $stunden $minuten $sekunden
Die Punkte in die Anzahl der Bytes reinzubasteln ist mir zu mühsam, meine Shell versteht das '-Format nicht :(
Beware of programmers who carry screwdrivers.

kevin
Beiträge: 325
Registriert: 08.11.2004 00:03:24

Re: erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von kevin » 02.10.2008 23:49:21

danke fuer die schnelle und hilfreiche antwort
bin noch am rumbasteln, poste das entgueltige ergebnis dann

Code: Alles auswählen

printf "% '10.0f" 8131311980490
 8.131.311.980.490
setzt die punkte
allerdings hab ich da ein problem
das ppp down script sieht gegen ende so aus

Code: Alles auswählen

...
     gesendet="$BYTES_SENT"
    empfangen="$BYTES_RCVD"
     logdatei="/var/log/connection.log"
 
printf "%-23.23s%8.8s%'19.0f%'23.0f\n" $datum $onlinezeit $gesendet $empfangen >> $logdatei
dann wird in die logdatei ohne punkte geschrieben


schreibe ich aber zum testen die zahlen rein, funktioniert es mit den punkten und sie werden gesetzt

Code: Alles auswählen

...
     gesendet="879790131"
    empfangen="1315104933"
     logdatei="/var/log/connection.log"
 
printf "%-23.23s%8.8s%'19.0f%'23.0f\n" $datum $onlinezeit $gesendet $empfangen >> $logdatei
ob ich nun anstelle von $gesendet $BYTES_SENT hinschreibe veraendert an dem problem nichts.....

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

Re: erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von cosmac » 03.10.2008 02:18:32

ha, na klar, manche Völker schreiben da Punkte und andere Kommas: das Format ist von der locale-Einstellung abhängig. Bei mir ist das meistens "POSIX" oder "C", deshalb bekomme ich keine. Mit "de_DE.UTF8" gibt's Punkte! Also probier' mal am Anfang vom Script:

Code: Alles auswählen

export LANG="de_DE.UTF8"
oder so, je nach dem wo du zu Hause bist.
Beware of programmers who carry screwdrivers.

kevin
Beiträge: 325
Registriert: 08.11.2004 00:03:24

Re: erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von kevin » 03.10.2008 10:48:59

Code: Alles auswählen

en_US ISO-8859-1
en_US.UTF-8 UTF-8
de_DE ISO-8859-1
de_DE@euro ISO-8859-15
steht in meiner local datei in /etc/

Code: Alles auswählen

#!/bin/sh

export LANG="de_DE.UTF8"

zeitrechnung()
 {
       t0=$(cat /var/log/connection.up)
       t1=$(date +%s)
   online=$(($t1 - $t0))
  stunden=$(($online / 3600))
   online=$(($online - $stunden * 3600))
  minuten=$(($online / 60))
 sekunden=$(($online - $minuten * 60))
 printf "%3d:%2.2d:%2.2d\n" $stunden $minuten $sekunden
}

        datum="$(date +%Y-%m-%d_%H:%M:%S)"
   onlinezeit="$(zeitrechnung)"
     gesendet="$BYTES_SENT"
    empfangen="$BYTES_RCVD"
     logdatei="/var/log/connection.log"

printf "%-23.23s%8.8s%'19.0f%'23.0f\n" $datum $onlinezeit $gesendet $empfangen >> $logdatei
hab oben "export LANG="de_DE.UTF8"" dazugeschrieiben, es sollte aber von meiner locale datei her schon richtig sein ?
es zeigt leider keine veraenderung, in die log datei wird ohne punkkte geschrieben

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

Re: erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von cosmac » 03.10.2008 14:18:47

es gibt ein bis zwei Fallen im printf-Befehl: wenn eine Variable leer ist, verschieben sich die folgenden um eine Stelle nach vorn. Dann wird ggf. eine Zahl mit einem %s-Format ausgegeben und also ohne Punkte. Außerdem wird eine Variable, die einen Zwischenraum enthält, in zwei aufgespalten und der Rest verschiebt sich nach hinten. In dem Fall würde die letzte Variable dann mit dem ersten(!) Format formatiert.

Anders kann ich mir den Unterschied zwischen einer einfachen Zahl und einer Zahl aus einer Variablen nicht erklären. Wenn die locale nicht richtig gesetzt wäre, würden in keinem Fall Punkte erzeugt werden.
Beware of programmers who carry screwdrivers.

kevin
Beiträge: 325
Registriert: 08.11.2004 00:03:24

Re: erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von kevin » 03.10.2008 23:21:20

naja, verschieben tut sich ja nichts, es wird genau so wie es soll in die .log datei geschrieben .. nur ohne die punkte
ich muesste also die variablen von BYTES_SENT und BYTES_RCVD umbearbeiten, aber wie ? womit und wie muessen sie am ende sein
wenn ich ein
echo $BYTES_SENT > /tmp/test
mache, habe ich in wenn ich in /tmp/test reingucke dort ganz normale zahlen stehen
vor den zahlen ist nichts und dahinter auch nicht, es sind nur die zahlen
so zeigt es cat und der editor und viewer im mc an

kevin
Beiträge: 325
Registriert: 08.11.2004 00:03:24

Re: erweitertes loggen am router, internetverbindungsauf/ab-bau

Beitrag von kevin » 07.10.2008 17:06:04

fuer up

Code: Alles auswählen

#!/bin/sh

        datum="$(date +%Y-%m-%d_%H:%M:%S)"
          wer="$LINKNAME"
    ipadresse="$IPLOCAL"
   dslsserver="$IPREMOTE"
   dnsserver1="$DNS1"
   dnsserver2="$DNS2"
     logdatei="/var/log/connection.log"

echo $(date +%s) > /var/log/connection.up

printf "%-23.23s%-8.8s%-19.19s%-19.19s%-19.19s%-19.19s" $datum $wer $ipadresse $dslsserver $dnsserver1 $dnsserver2 >> $logdatei


fuer down

Code: Alles auswählen

#!/bin/sh

export LC_NUMERIC="de_DE"

zeitrechnung()
 {
       t0=$(cat /var/log/connection.up)
       t1=$(date +%s)
   online=$(($t1 - $t0))
  stunden=$(($online / 3600))
   online=$(($online - $stunden * 3600))
  minuten=$(($online / 60))
 sekunden=$(($online - $minuten * 60))
 printf "%3d:%2.2d:%2.2d\n" $stunden $minuten $sekunden
}

        datum="$(date +%Y-%m-%d_%H:%M:%S)"
   onlinezeit="$(zeitrechnung)"
     gesendet="$BYTES_SENT"
    empfangen="$BYTES_RCVD"
     logdatei="/var/log/connection.log"

printf "%-23.23s%8.8s%'19.0f%'23.0f\n" $datum $onlinezeit $gesendet $empfangen  >> $logdatei
nun funktioniert es auch mit den punkten

Antworten