Aktuelle DL-Speed per Shell auslesen

Status
Für weitere Antworten geschlossen.

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Hi!

Ich möchte per Shell die aktuelle DownloadSpeed meines Downloadcenters auslesen.

Hat jemand eine Ahnung wie das geht?
Im Firefox wird sie z.B. auch oben im Reiterkopf angezeigt, oder eben im Download Center in der Statusleiste.

Wenn ich in der Shell "rtorrent right" eingebe werden mir dir aktuell laufenden Torrents des DLC auch nicht angezeigt. Ist das dann eine andere Instanz?

Gruß
Ralf
 

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
Es gibt für die Konsole ein paar Tools die Dir die Netzlast enzeigen können. Per ipkg zu installieren.

Rich (BBCode):
ds209> ipkg list iftop
iftop - 0.17-4 - Display bandwidth usage on an interface by host
Successfully terminated.

ds209> ipkg list nload
nload - 0.7.2-1 - Nload is a console application which monitors network traffic and bandwidth usage in real time
Successfully terminated.

Zeigt aber wie ich das verstehe allen Traffic an... nicht nur den den Du willst. Aber immerhin etwas.

gruss
dude
 

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
hm, das erste hab ich auch schon gesehen, und "ntop".

Aber wie schon gesagt, ist das alles was so hin und her läuft.

Mir geht es aber schon um die Download Speed des DLC.

Wie in einem anderen Thread(Hier isser...) schon beschrieben hab ich mir ein Skript angelegt, das vor dem Runterfahren der DS schaut ob noch jemand im Netz ist, wenn ja, dann eben noch nicht runterfährt...das tut auch...zumindest heute Nacht :rolleyes:

Jetzt will ich aber das ganze noch um diese Abfrage ergänzen:
"Wenn grad ein Download läuft und der Downstream größer als X MB/s ist, dann noch nicht herunter fahren"

Hintergrund: Jetzt hat da so ein Torrent grad mal so richtig an Fahrt gewonnen, und dann fährt die DS einfach runter und morgen geht das gedümple von vorne los.

Der Speed wird ja irgend wie auch im DLC angezeigt. Ausserdem wird der Speed ja auch vom SynoExt ausgelesen...

So, und nun würd ich den gern auslesen..
Gruß
Ralf
 

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Selber suchen macht schlau...

Sodele, bin jetzt weiter.

Die Queue der Download Station wird in der PostgreSQL-Datenbank gespeichert.

Hab phpPgAdmin installiert und da kann man das schön nachschauen.

Der aktuelle Downloadspeed wird in der Tabelle download_queue in der Datenbank download gespeichert.
Die Spalte "current_rate" beherbergt die aktuelle Downloadgeschwindigkeit. (in B/s)

So, nun weis ich wo das ist, aber wie komm ich aus der Shell an die Daten ran? Geht das überhaupt? oder nur über PHP?

Nebenbei, im Ordner usr\syno\synoman\download liegen jede Menge *.cgi Dateien. ich kann die im Notepad++ nicht öffnen. sind die schon kompiliert oder braucht man da ein anderes Tool um ran zu kommen?

Gruß
Ralf
 

thedude

Benutzer
Mitglied seit
30. Nov 2009
Beiträge
2.244
Punkte für Reaktionen
2
Punkte
84
Probiere mal folgendes:

Rich (BBCode):
/usr/syno/pgsql/bin/psql -U admin -d download -c "select current_rate from download_queue"

gruss
dude
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Nebenbei, im Ordner usr\syno\synoman\download liegen jede Menge *.cgi Dateien. ich kann die im Notepad++ nicht öffnen. sind die schon kompiliert oder braucht man da ein anderes Tool um ran zu kommen.

Kompilierte cgi-Dateien kann man kaum mit einem Editor ändern. Die Synology-Entwickler versuchen mit kompilierten cgi-Dateien zum einen die Anwendungen performanter zu machen, zum anderen ihr geistiges Know-how zu schützen. Nebenbei bemerkt, sind die Synology-Anwendungen kein OpenSource; man darf sie also nicht so einfach ändern, ohne gegen die Lizenz zu verstoßen.

Itari
 
Zuletzt bearbeitet:

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Super!
Das kommt dabei raus:
Rich (BBCode):
DS109> /usr/syno/pgsql/bin/psql -U admin -d download -c "select current_rate from download_queue"
 current_rate
--------------
        86768
            0
            0
          401
(4 rows)

und mit
Rich (BBCode):
DS109> /usr/syno/pgsql/bin/psql -U admin -d download -c "select SUM(current_rate) from download_queue"
 current_rate
--------------
        87169
(1 row)

bekomm ich dann den aktuellen Downloadspeed des kompletten DLC.

Gut, das kann ich ich meinen Skript verwenden. Danke!


man darf sie also nicht so einfach ändern, ohne gegen die Lizenz zu verstoßen.
... will ja nichts ändern...vielmehr schauen was da so drin steht und mich "inspirieren" lassen :D
Mal davon abgesehen, wusste ich bisher nicht, dass es kompilierte cgi gibt, ich kenn nur die cgi-Skripte, die man auf Webserver hochladen kann, z.B. für Gästebücher oder so, und die konnte ich immer lesen. Aber man lernt halt nie aus...
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Mal davon abgesehen, wusste ich bisher nicht, dass es kompilierte cgi gibt, ich kenn nur die cgi-Skripte, die man auf Webserver hochladen kann, z.B. für Gästebücher oder so, und die konnte ich immer lesen. Aber man lernt halt nie aus...

Och doch, man kann jedes ausführbare Programm nutzen. Es wir ein schlichter exec() im Apache für die cgi-Programme verwendet; der startet eine Shell und die kann so ziemlich alles laufen lassen ... wie sollte denn z. B. sonst eine Suchmaschine die nötige Performance erhalten können.

Itari

PS. Ich hatte mit meiner Bemerkung zu OpenSource nur deutlich machen wollen, dass es eben dazu keine Quellen gibt, weil es eben kein (!) OpenSource ist.
 

Hannibal7777

Benutzer
Mitglied seit
24. Jan 2010
Beiträge
180
Punkte für Reaktionen
0
Punkte
0
Mal davon abgesehn gibt es denn überhaupt ein Möglichkeit kompilierte cgi auszulesen, ob nun geschützt oder auch nicht.
Erinnere mich daran da auch schon mal eine Möglichkeit gesucht zu haben.

Jetzt will ich aber das ganze noch um diese Abfrage ergänzen:
"Wenn grad ein Download läuft und der Downstream größer als X MB/s ist, dann noch nicht herunter fahren"
Falls du dein Skript fertig hast würdest du es dann hier posten? Würde mich auch interessieren, ob das so funktioniert, wäre auf jedenfall eine coole Sache

Gruß
Hannibal
 

itari

Benutzer
Mitglied seit
15. Mai 2008
Beiträge
21.900
Punkte für Reaktionen
14
Punkte
0
Mal davon abgesehn gibt es denn überhaupt ein Möglichkeit kompilierte cgi auszulesen, ob nun geschützt oder auch nicht.
Erinnere mich daran da auch schon mal eine Möglichkeit gesucht zu haben.

Um ein Kompilat auszulesen, müsste man es zurück übersetzen in den Quell-Code; das ist schwierig, weil Kompilieren ja keinen 1:1-Abbildung erststellt. Man kann sich aber die Texte eines Kompilats anschauen (strings) und manchmal kann man damit Eindrücke gewinnen, was in einem Kompilat so vor sich geht.

Itari
 

Hannibal7777

Benutzer
Mitglied seit
24. Jan 2010
Beiträge
180
Punkte für Reaktionen
0
Punkte
0
Naja ok weil die .Net Versionen (VB.Net, C#.Net usw.) ja da alle etwas anders arbeiten und der Quelltext und "halb" kompiliert wird. Heißt das der Quelltext wird erst in eine Art Zwischensprache(fragt mich jetzt nicht was das genau ist) übersetzt, wenn ich das recht verstanden habe ist das Ergebnis immer das selbe, egal welche Hochsprache ich verwendet habe. Diese Zwischensprache kann ich z.B. mit dem IML-Disassembler (liegt Visual Studio bei) auslesen. Die endgültige Umwandlung erfolgt erst optimiert auf jeden Prozessor just in time.

Hoffe das stimmt jetzt ungefähr so.

Gruß
Hannibal

P.s. Manche .exe bekommt man ja auch mit dem ResHacker klein.
 

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Sodele, geschafft!

Ok, hab mein Skript fertig und scheint soweit auch zu funktionieren.

Rich (BBCode):
#!/bin/sh
# Das Skript überprüft ob noch ein Rechner im Netz erreichbar ist.
# Ist kein Rechener erreichbar, wir nach einer parametrierten Zeit noch einmal nachgeschaut.
# Ferner wird überprüft, ob die Downloadstation aktuell eine Downloadgeschwindigkeit über einem parametrierten Minimum Wert hat.
# Hier für werden eine parametrierbare Anzahl von Abfragen in einem ebenfalls parametrierbaren Intervall ausgeführt.
# Erkennt keine der Abfragen eine minimale Downloadgeschwindigkeit und wird kein Host im Netzwerk gefunden, dann fährt das System herunter


# KONFIGURATION
_IP_STATIC_START=2        	# Start IP der Statischen Adressen
_IP_STATIC_ENDE=15       	# Ende IP der Statischen Adressen
_IP_DHCP_START=100			# Start IP des DHCP Bereichs
_IP_DHCP_ENDE=120			# Ende IP des DHCP Bereichs
_WAITTIME_HOST_CHECK=300  	# Wartezeit in Sekunden zwischen zwei Hostprüfungen

_EXCLUDE_IP_NAS=10			#IP der NAS-Platte - IP wird beim Hostcheck ignoriert
_EXCLUDE_IP_PRINTER=9		#IP des Druckers - IP wird beim Hostcheck ignoriert

_DLC_MIN_DOWNSPEED=50000	#Minimale Downloadgeschwindigkeit in Bytes
_DLC_NUMBER_OF_CHECKS=3		#Anzahl der Checks die Druchgeführt werden sollen. Mindestens einer muss als Ergebnis > _DLC_MIN_DOWNSPEED liefern
_WAITTIME_DOWNSPEED_CHECK=20 #Wartezeit in Sekunden zwischen zwei Prüfungen der Downloadgeschwindigkeit

_LOGFILE=/var/log/shutdown.log	#Pfad zur Logdatei

# Das aktuelle Subnetz herausfinden
_IP=`ip address|grep eth0|grep inet|cut -d"/" -f1|cut -c10-|cut -d"." -f1,2,3`
#echo Subnet: $_IP.xxx

#Initialisierung
no_host_connected=true
no_fast_download=true

#FUNKTION: In Log Datei schreiben
log() {
        echo `date +%c`: $1 >> $_LOGFILE
}

#FUNKTION: Abfrage einer IP-Range ob ein Teilnehmer online ist
check_host()
{
  _IP_START_TMP=$1
  _IP_ENDE_TMP=$2
  while [ $_IP_START_TMP -le $_IP_ENDE_TMP ]
  do
	if ! [ $_IP_START_TMP -eq $_EXCLUDE_IP_NAS ] && ! [ $_IP_START_TMP -eq $_EXCLUDE_IP_PRINTER ]; then
	
		if ping -w 2 -c 1 $_IP.$_IP_START_TMP > /dev/null; then
		  no_host_connected=false
		  #echo $_IP.$_IP_START_TMP ist online 
		  log "$_IP.$_IP_START_TMP ist online"
		fi
	fi
    _IP_START_TMP=`expr $_IP_START_TMP + 1`
  done
}

#FUNKTION: Abfrage, ob Downloadstation mit Mindestgeschwindigkeit läuft
check_DownloadStation()
{
	log "Downloadstation Abfrage aktiv "
	#echo "Downloadstation Abfrage aktiv "
		
	_check_nr=0
	while [ $_check_nr -lt $_DLC_NUMBER_OF_CHECKS ] && [ $no_fast_download = true ]
	do	
		#Zähler inkrementieren
		_check_nr=`expr $_check_nr + 1`

		#Aktuelle DownSpeed abfragen
		_actDownSpeed=`/usr/syno/pgsql/bin/psql -U admin -d download -c "select SUM(current_rate) from download_queue" | tail  --lines=+3 | head --lines=1`
		if [ $_actDownSpeed -ge $_DLC_MIN_DOWNSPEED ]; then
			no_fast_download=false
			log "Schneller Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
			#echo "Schneller Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
		else
			no_fast_download=true
			log "Kein oder langsamer Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
			#echo "Kein oder langsamer Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
		fi
		
		#Wenn noch ein Check folgt, dann Wartezeit starten
		if [ $_check_nr -lt $_DLC_NUMBER_OF_CHECKS ] && ! [ $no_fast_download = false ]; then
			#echo "Starte _WAITTIME_DOWNSPEED_CHECK"
			sleep $_WAITTIME_DOWNSPEED_CHECK
		fi
	done
	
	log "Downloadstation Abfrage beendet"
	#echo "Downloadstation Abfrage beendet"
}

#---HAUPTROUTINE---

#Abfrage starten
log "Start Host Abfrage"
check_host $_IP_STATIC_START $_IP_STATIC_ENDE
check_host $_IP_DHCP_START $_IP_DHCP_ENDE

#Wenn keiner Online ist, dann Abfrage nach x Sekunden wiederholen
if [ $no_host_connected = true ]; then
  sleep $_WAITTIME_HOST_CHECK
  #Wiederholen der Abfrage
  check_host $_IP_STATIC_START $_IP_STATIC_ENDE
  check_host $_IP_DHCP_START $_IP_DHCP_ENDE
  
  #Downloadstation checken
  check_DownloadStation
  
  #Immernoch keiner Online und kein schneller Download -->Shutdown
  if [ $no_host_connected = true ] && [ $no_fast_download = true ]; then
	
	log "System wird heruntergefahren"
	echo "System wird heruntergefahren"
	/sbin/poweroff
  fi
fi

Da es hier etwas die Formatierung verhagelt, hab ich es auch angehängt.
 

Anhänge

  • shutdown.txt
    4,1 KB · Aufrufe: 13
Zuletzt bearbeitet:

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Kleine Änderung

Da es keine Ausgabe gibt, wenn kein Download in der Queue ist, muss man vorher noch Abfragen ob überhaupt ein Datensatz drin ist. Ferner war noch ein kleiner Bug drin.

Rich (BBCode):
#!/bin/sh
# Das Skript überprüft ob noch ein Rechner im Netz erreichbar ist.
# Ist kein Rechener erreichbar, wir nach einer parametrierten Zeit noch einmal nachgeschaut.
# Ferner wird überprüft, ob die Downloadstation aktuell eine Downloadgeschwindigkeit über einem parametrierten Minimum Wert hat.
# Hier für werden eine parametrierbare Anzahl von Abfragen in einem ebenfalls parametrierbaren Intervall ausgeführt.
# Erkennt keine der Abfragen eine minimale Downloadgeschwindigkeit und wird kein Host im Netzwerk gefunden, dann fährt das System herunter


# KONFIGURATION
_IP_STATIC_START=2        	# Start IP der Statischen Adressen
_IP_STATIC_ENDE=15       	# Ende IP der Statischen Adressen
_IP_DHCP_START=100			# Start IP des DHCP Bereichs
_IP_DHCP_ENDE=120			# Ende IP des DHCP Bereichs
_WAITTIME_HOST_CHECK=300  	# Wartezeit in Sekunden zwischen zwei Hostprüfungen

_EXCLUDE_IP_NAS=10			#IP der NAS-Platte - IP wird beim Hostcheck ignoriert
_EXCLUDE_IP_PRINTER=9		#IP des Druckers - IP wird beim Hostcheck ignoriert

_DLC_MIN_DOWNSPEED=30000	#Minimale Downloadgeschwindigkeit in Bytes
_DLC_NUMBER_OF_CHECKS=3		#Anzahl der Checks die Druchgeführt werden sollen. Mindestens einer muss als Ergebnis > _DLC_MIN_DOWNSPEED liefern
_WAITTIME_DOWNSPEED_CHECK=60 #Wartezeit in Sekunden zwischen zwei Prüfungen der Downloadgeschwindigkeit

_LOGFILE=/var/log/shutdown.log	#Pfad zur Logdatei

# Das aktuelle Subnetz herausfinden
_IP=`ip address|grep eth0|grep inet|cut -d"/" -f1|cut -c10-|cut -d"." -f1,2,3`
#echo Subnet: $_IP.xxx

#Initialisierung
no_host_connected=true
no_fast_download=true

#FUNKTION: In Log Datei schreiben
log() {
        echo `date +%c`: $1 >> $_LOGFILE
		echo `date +%c`: $1
}

#FUNKTION: Abfrage einer IP-Range ob ein Teilnehmer online ist
check_host()
{
  _IP_START_TMP=$1
  _IP_ENDE_TMP=$2
  while [ $_IP_START_TMP -le $_IP_ENDE_TMP ]
  do
	if ! [ $_IP_START_TMP -eq $_EXCLUDE_IP_NAS ] && ! [ $_IP_START_TMP -eq $_EXCLUDE_IP_PRINTER ]; then
	
		if ping -w 2 -c 1 $_IP.$_IP_START_TMP > /dev/null; then
		  no_host_connected=false
		  log "$_IP.$_IP_START_TMP ist online"
		fi
	fi
    _IP_START_TMP=`expr $_IP_START_TMP + 1`
  done
}

#FUNKTION: Abfrage, ob Downloadstation mit Mindestgeschwindigkeit läuft
check_DownloadStation()
{
	log "Downloadstation Abfrage aktiv "

	#Abfrage ob überhaupt ein Download in der Queue ist
	_sumRecordset=`/usr/syno/pgsql/bin/psql -U admin -d download -c "select count(*) from download_queue" | tail  --lines=+3 | head --lines=1`
	
	#Wenn 0 Datensätze gefunden werden kann gleich aufgehört werden
	if [ $_sumRecordset = 0 ]; then
		log "Kein Download in der Warteschlange"
	else
		
		
		_check_nr=0
		while [ $_check_nr -lt $_DLC_NUMBER_OF_CHECKS ] && [ $no_fast_download = true ]
		do	
			#Zähler inkrementieren
			_check_nr=`expr $_check_nr + 1`
			
			#Aktuelle DownSpeed abfragen
			_actDownSpeed=`/usr/syno/pgsql/bin/psql -U admin -d download -c "select SUM(current_rate) from download_queue" | tail  --lines=+3 | head --lines=1`
			if [ $_actDownSpeed -ge $_DLC_MIN_DOWNSPEED ]; then
				no_fast_download=false
				log "Schneller Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
			else
				log "Kein oder langsamer Download aktiv: Speed $_actDownSpeed B/s - Abfrage Nr $_check_nr"
			fi
			
			#Wenn noch ein Check folgt, dann Wartezeit starten
			if [ $_check_nr -lt $_DLC_NUMBER_OF_CHECKS ] && ! [ $no_fast_download = false ]; then
				sleep $_WAITTIME_DOWNSPEED_CHECK
			fi
		done
	fi
	log "Downloadstation Abfrage beendet"
}

#---HAUPTROUTINE---

#Abfrage starten
log "Start Host Abfrage"
check_host $_IP_STATIC_START $_IP_STATIC_ENDE
check_host $_IP_DHCP_START $_IP_DHCP_ENDE

#Wenn keiner Online ist, dann Abfrage nach x Sekunden wiederholen
if [ $no_host_connected = true ]; then
  sleep $_WAITTIME_HOST_CHECK
  #Wiederholen der Abfrage
  check_host $_IP_STATIC_START $_IP_STATIC_ENDE
  check_host $_IP_DHCP_START $_IP_DHCP_ENDE
  
  #Downloadstation checken
  check_DownloadStation
  
  #Immernoch keiner Online und kein schneller Download -->Shutdown
  if [ $no_host_connected = true ] && [ $no_fast_download = true ]; then
	
	log "System wird heruntergefahren"
	/sbin/poweroff
  fi
fi

achja, und das mit den echos und logs hab ich optimiert

Gruß Ralf
 

Anhänge

  • shutdown.txt
    4,1 KB · Aufrufe: 78

Kauabunga

Benutzer
Mitglied seit
18. Jul 2009
Beiträge
105
Punkte für Reaktionen
0
Punkte
16
Lang ist es her...

Hi zusammen!

Das Skript läuft jetzt nun schon ne weile, und zumindest der Teil, der für das "Nicht-Runterfahren-Weil-Ping-da" läuft super.

Allerdings hab ich mit der Abfrage der Downloadstation ein Problem.

Sieht man hier an meinem Log:
Rich (BBCode):
Mon May 31 22:00:02 2010: Downloadstation Abfrage aktiv
Mon May 31 22:00:03 2010: Kein oder langsamer Download aktiv: Speed B/s - Abfrage Nr 1
Mon May 31 22:01:03 2010: Kein oder langsamer Download aktiv: Speed B/s - Abfrage Nr 2
Mon May 31 22:02:05 2010: Kein oder langsamer Download aktiv: Speed B/s - Abfrage Nr 3
Mon May 31 22:02:05 2010: Downloadstation Abfrage beendet
Mon May 31 22:02:05 2010: Start Host Abfrage
Mon May 31 22:02:06 2010: 192.168.0.2 ist online
Mon May 31 22:10:26 2010: Downloadstation Abfrage aktiv
Mon May 31 22:10:28 2010: Schneller Download aktiv: Speed 61318 B/s - Abfrage Nr 1

Die ersten Abfrage kommen von da her, wo das Skript aus CronJob gestartet wurde. Da wird kein Downloadspeed ausgelesen.

Der letzte Eintrag kommt daher, weil ich das Skript von Hand aus der Konsole raus als ROOT angetriggert hab. da klappt dann alles.

Gibt es da Rechteproblemen? hat der Cron andere Rechte als der Root?
Mit admin kann er ja nicht laufen, da admin nicht mal pingen darf....

Hat einer ne Ahnung?

Gruß
Ralf
 

vitallo

Benutzer
Mitglied seit
16. Jan 2014
Beiträge
1
Punkte für Reaktionen
0
Punkte
0
Hallo, Danke für das Skript auch wenn ich gesehen habe das diese Thema seit einiger Zeit nicht mehr Aktuell ist habe ich dazu eine frage.

- Kann ich hier auch eine Abfrage einbauen die die Nutzung der Web Oberfläche oder/ und SMB erkennt ?

Hintergrund , für denn seltenen Fall das ich von Unterwegs denn Server starte hilft mir die Abfrage des Hausinternen Netzes nicht viel.

Danke
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat