Neues Script fürs Wiki

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Neues Script fürs Wiki

Beitrag von Rebell » 03.10.2003 17:44:30

Hallo, ich hab mir heute ein Skript geschrieben was genauere Informationen zu ISDN-Online-Verbindungen ausgibt. Es gibt zwar ein vergleichbares Programm (pppstatus) welches aber nicht für ippp0 funktioniert.

Mir ist es zuviel Arbeit jede Zeile ins Wiki Format umzuwandeln, deswegen poste ich es hier rein.

FEEDBACK IST ERWÜNSCHT!!!

Code: Alles auswählen

#!/usr/bin/perl
#########################################################################
#
# ipppstatus.pl (2te Ausgabe)
#
# Zeigt Onlinezeit, Kosten und übertragene Bytes (im lesbaren Format) an
# 4.10.2003 - Mike Reiche (Rebell)
# veröffentlich für www.debianforum.de
#
# Verwendete Versionen:
# perl v5.6.1
# isdnrep 4.57
# auf Debian Woody
#
#########################################################################

# isdnrep, gibt detailierte Informationen über die ISDN Verbindung aus
# -s %X (nur Uhrzeiten ausgeben)
# -o (nur ausgehende Verbindungen)
# -t (Ausgabe auf ein Datum beschränkt)
$timereport = "isdnrep -s %X -o -t ";

# Maximale Onlinezeit im Monat Tag (HH:MM:SS)
# Wenn hier kein Wert angeben wird, gibts ein "Illegal division by zero"
$max_month_time = "60:00:00"; # 60 Stunden (T-Online surftime 60)

if ($ARGV[0] eq "info") {
	if ($ARGV[1] eq "monat") {
		$showme = 2;
	} elsif ($ARGV[1] eq "verbindungen") {
		$showme = 3;
	} else {
		$showme = 1;
	}
	showOnlineTime($showme);
} else {
	showHelp();
}

exit;

sub showHelp {
	print "usage:\tipppstatus.pl info [INFO]\n\n";
	print "INFO:\n";
	print "\tmonat\t\tzeigt Verbindungsinformationen für diesen Monat an\n";
	print "\ttag\t\tzeigt Verbindungsinformationen für heute an\n";
	print "\tverbindungen\tzeigt die Zeiten der Verbindungsaufbauten an\n";
	print "\n";
}
# Zeigt die Online-Verbindungen an
sub showOnlineTime {
	# Kann sein 1,2 oder 3
	my ($showme) = @_;
	my ($sek, $min, $std, $mtag, $mon, $jahr, $wtag, $stag, $isstd)=localtime();
	$jahr += 1900;
	$mon += 1;

	my $connections_only = 0;
	my $month_only = 0;
	my $have_found = 0;
	my $next_site = 0;

	# Verbindungen für den Monat
	if ($showme == 2) {
		print "\nVerbindungsinformationen für diesen Monat ($mon/$jahr)\n\n";
		$month_only = 1;
		$timereport_string = "$mon/$jahr";

	# Ansonsten Verbindungen für den Tag
	} else {
		if ($showme == 3) {
			print "\nVerbindungsaufbauten Heute ($mtag.$mon.$jahr)\n\n";
			$connections_only = 1;
		} else {
			print "\nVerbindungsinformationen Heute ($mtag.$mon.$jahr)\n\n";
		}
		$timereport_string = "$mtag/$mon/$jahr";
	}
	# Folgende Pipe funktioniert nicht unter Verwendung von Sudo
	my $cmd = "$timereport $timereport_string";
	open TIMEREPORT, "$cmd |";
	while (<TIMEREPORT>) {
		chomp;
		$zeile = $_;
		# Die Information wurde gefunden, wir brauchen aber erst die übernächste Zeile
		if ($have_found) {
			$next_site++;
		}
		if ($next_site == 2) {
			# Alle Leerzeichen in ":" umwandeln
			$zeile =~ s/\s+/:/ig;
			@daten = split(":",$zeile);
			$provider = $daten[0];
			$rufe = $daten[1];
			$stunden = int($daten[3]);
			$minuten = int($daten[4]);
			$sekunden = int($daten[5]);
			$kosten = $daten[6];
			$waehrung = $daten[7];
			$bytes_in = $daten[9];
			$bytes_in_unit = $daten[10];
			$bytes_out = $daten[11];
			$bytes_out =~ s/O=//ig;
			$bytes_out_unit = $daten[12];
			$max_zeiten_sekunden = getSeconds($max_month_time);
			if ($month_only) {
				$date_string = "im Monat";
				$divisor = 1;
				# String der Onlinzeit
				$zeiten_string = $stunden . ":" . $minuten . ":" . $sekunden;
				$zeiten_sekunden = getSeconds($zeiten_string);
				$zeiten_prozent = int(($zeiten_sekunden * 100) / $max_zeiten_sekunden);
			} else {
				$date_string = "am Tag";
				$divisor = 30;
			}
			$max_zeiten_sekunden = $max_zeiten_sekunden / $divisor;
			$max_zeiten_string = getTimeString($max_zeiten_sekunden);
			@max_zeiten = split(":",$max_zeiten_string,3);
			$max_stunden = int($max_zeiten[0]);
			$max_minuten = int($max_zeiten[1]);
			$max_sekunden = int($max_zeiten[2]);
			if ($stunden >= $max_stunden) {
				$diff_stunden = $stunden - $max_stunden;
				if ($minuten >= $max_minuten) {
					$diff_minuten = $minuten - $max_minuten;
					if ($sekunden >= $max_sekunden) {
						$diff_sekunden = $sekunden - $max_sekunden;
					}
				}
			}
			# Zeiten in lesbares Format umwandeln
			$stunden = makeDigit($stunden);
			$minuten = makeDigit($minuten);
			$sekunden = makeDigit($sekunden);
			$max_stunden = makeDigit($max_stunden);
			$max_minuten = makeDigit($max_minuten);
			$max_sekunden = makeDigit($max_sekunden);
			# Ausgabe Zeichenketten zusammenstellen
			print "Provider: $provider ($rufe ausgehende Anrufe)\n";
			$online_string = "$stunden\:$minuten\:$sekunden von maximal $max_stunden\:$max_minuten\:$max_sekunden $date_string";
			# Falls ein Überlauf vorhanden ist
			$to_much = "";
			if ($diff_stunden > 0 || $diff_minuten > 0 || $diff_sekunden > 0) {
				$diff_stunden = makeDigit($diff_stunden);
				$diff_minuten = makeDigit($diff_minuten);
				$diff_sekunden = makeDigit($diff_sekunden);
				$to_much = " (zu $diff_stunden\:$diff_minuten\:$diff_sekunden überschritten)";
			} elsif ($month_only) {
				$to_much = " ($zeiten_prozent\% verbraucht)";
			}
			$online_string .= $to_much;
			print "Onlinezeit: $online_string\n";
			print "Verursachte Kosten: $kosten $waehrung\n";
			print "Empfangende Daten: $bytes_in $bytes_in_unit\n";
			print "Gesendete Daten: $bytes_out $bytes_out_unit\n";
			last;
		}
		# Finde die erste Verbindungszeit in der Liste
		if ($zeile =~ /^\d{2}\:\d{2}\:\d{2}/ && $connections_only) {
			print "$zeile\n";

		# Liste ist zu Ende
		} elsif ($zeile =~ /^----/ && $connections_only) {
			$connections_only = 0;
			last;

		# Finde die Zeit der ausgehenden Anrufe beim Provider
		} elsif ($zeile =~ /Outgoing calls \(calling\:\)/ig) {
			$have_found = 1;
		}
	}
	close TIMEREPORT;
}

sub makeDigit {
	my ($digit) = @_;
	if (int($digit) < 9) {
		$digit = "0" . $digit;
	}
	return $digit;
}

sub getSeconds {
	my ($time_string) = @_;
	my @zeiten = split(":",$time_string,3);
	my $stunden = $zeiten[0];
	my $minuten = $zeiten[1];
	my $sekunden = $zeiten[2];
	my $sekunden_gesamt = ($stunden * 3600) + ($minuten * 60) + $sekunden;
	return $sekunden_gesamt;
}

sub getTimeString {
	my ($seconds) = @_;
	my $stunden = int($seconds/3600);
	my $rest_zeit = $seconds % 3600;
	my $minuten = int($rest_zeit/60);
	my $rest_zeit = $seconds % 60;
	my $sekunden = $rest_zeit;
	my $time_string = makeDigit($stunden) . ":" . makeDigit($minuten) . ":" . makeDigit($sekunden);
	return $time_string;
}
Zuletzt geändert von Rebell am 04.10.2003 16:39:40, insgesamt 2-mal geändert.
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Benutzeravatar
godsmacker
Beiträge: 902
Registriert: 16.03.2003 21:50:26
Lizenz eigener Beiträge: Artistic Lizenz
Wohnort: Chemnitz
Kontaktdaten:

Beitrag von godsmacker » 03.10.2003 18:00:25

http://www.debianforum.de/wiki/?page=Scripte:
Um die Skripte Wiki konform zu machen, taugt folgende Zeile:

cat script | awk '{ print "::{{" $0 "}}" }'

(pdreker, Code von Chimerer)

Benutzeravatar
Rebell
Beiträge: 997
Registriert: 14.01.2003 20:36:53
Wohnort: Dresden

Beitrag von Rebell » 04.10.2003 16:40:25

Das Skript ist zu groß fürs Wiki, und die Formatierung haut auch nicht hin. Ich mach ins Wiki nen Link hier hin.
come to daddy, windowlicker!
get m:ke - http://get-mike.de

Benutzeravatar
bitbieger
Beiträge: 179
Registriert: 23.10.2003 08:26:00
Kontaktdaten:

Beitrag von bitbieger » 30.10.2003 14:05:32

Um die Skripte Wiki konform zu machen, taugt folgende Zeile:

cat script | awk '{ print "::{{" $0 "}}" }'

(pdreker, Code von Chimerer)
öhhh, wieso nicht
<code>
bla voll viel code und so
</code>

??

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 30.10.2003 16:20:16

bitbieger hat geschrieben:öhhh, wieso nicht
<code>
bla voll viel code und so
</code>
Was soll <code> sein? So eine Art phpBB? Funktioniert aber leider nicht im Wiki.
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
bitbieger
Beiträge: 179
Registriert: 23.10.2003 08:26:00
Kontaktdaten:

Beitrag von bitbieger » 30.10.2003 16:24:14

blackm hat geschrieben:Funktioniert aber leider nicht im Wiki.
Nicht?
http://www.debianforum.de/wiki/?page=Al ... +l%F6schen :D

bitbieger

Benutzeravatar
blackm
Moderator und Co-Admin
Beiträge: 5921
Registriert: 02.06.2002 15:03:17
Lizenz eigener Beiträge: MIT Lizenz

Beitrag von blackm » 30.10.2003 16:34:01

Ich nehm alles zurueck...

Ich schau mal das ich in der Wiki Doku noch was dazu finde und ich das dann nach http://www.debianforum.de/wiki/TextFormatierungsRegeln hinzufuegen kann.

by, Martin
Schöne Grüße

Martin

Neu im Forum? --> https://wiki.debianforum.de/debianforum ... tensregeln
Log- und Konfigurationsdatein? --> pastebin.php
Forum unterstützen? --> https://wiki.debianforum.de/debianforum.de/Spenden

Benutzeravatar
bitbieger
Beiträge: 179
Registriert: 23.10.2003 08:26:00
Kontaktdaten:

Beitrag von bitbieger » 07.11.2003 12:46:06

Die <code> </code> Tags funktionieren im Wiki nicht mehr!!

Gruß,
bitbieger

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 07.11.2003 13:24:31

bitbieger hat geschrieben:Die <code> </code> Tags funktionieren im Wiki nicht mehr!!

Gruß,
bitbieger
Mit [ code ][ /code ] funktioniert es.

Benutzeravatar
bitbieger
Beiträge: 179
Registriert: 23.10.2003 08:26:00
Kontaktdaten:

Beitrag von bitbieger » 07.11.2003 13:38:25

Chimerer hat geschrieben:Mit [ code ][ /code ] funktioniert es.
Es funktionierte doch vorher auch mit spitzen Klammern, was war daran auszusetzen?
Z.B. hier unter dem Punkt "Tabellen".

Chimerer
Beiträge: 514
Registriert: 28.01.2002 16:10:44

Beitrag von Chimerer » 07.11.2003 13:55:42

bitbieger hat geschrieben:
Chimerer hat geschrieben:Mit [ code ][ /code ] funktioniert es.
Es funktionierte doch vorher auch mit spitzen Klammern, was war daran auszusetzen?
Z.B. hier unter dem Punkt "Tabellen".
Wahrscheinlich nichts, aber da Bitbieger geschrieben hatte das es mit spitzen Klammern nicht mehr funktioniert und ich darauf hin mein neues Script erfolgreich mit eckigen Klammern ins Wiki gepostet habe, hab ich das auch hier kund getan.

edit: hoppla, bitbieger bist ja du. ;)

Benutzeravatar
bitbieger
Beiträge: 179
Registriert: 23.10.2003 08:26:00
Kontaktdaten:

Beitrag von bitbieger » 07.11.2003 14:04:03

*Alte Kamelle rauskram*

never change a ... :D

Antworten