|
|
Últimos Cambios |
Blog personal: El hilo del laberinto
|
|
|
Última Actualización: 15 de marzo de 2008 - Sábado
Ahora que las estadísticas de BitTornado se almacenan de forma persistente, necesitamos una forma de consultarlas. Por ejemplo, nos puede interesar saber qué torrents hace más tiempo que están inactivos, o cual es nuestro SR ("Share Ratio") en ellos.
El programa es trivial, y muestra lo simple que es utilizar la tecnología de persistencia:
[jcea@XXXX BitTornado-0.3.17]$ cat z-showtraffic.py
#!/usr/local/bin/python
from durus.connection import Connection
from durus.client_storage import ClientStorage
from BitTornado.bencode import bencode,bdecode
import time,sys,sha
root=None
for i in sys.argv[1:] :
f=open(i,"rb").read(1024*1024)
metainfo=bdecode(f)
info=metainfo["info"]
info_hash = sha.new(bencode(info)).digest()
if root==None :
connection=Connection(ClientStorage(address="/video/0/durus-berkeleydbstorage/db/unix_socket"))
root=connection.get_root()
connection.abort()
trafico=root["BT"][info_hash]
up,down=trafico[0],trafico[1]
print metainfo["info"]["name"]
print metainfo["announce"]
print "UP: %d - DOWN: %d - SR: %.2f - %s" %(up,down,up/(1.0+down),time.ctime(trafico[2]))
print
El programa se crea dentro de la carpeta BitTorrent, para que tenga acceso a sus módulos. En la línea de comando le indicamos uno o más torrents de los que queremos que nos informe. El programa carga los torrents y muestra la información relevante, extraída del sistema de persistencia.
Algunos puntos interesantes:
Tras un mes de utilizar el programa y encontrarle algunas pegas, publico aquí la versión mejorada:
[jcea@XXXX BitTornado-0.3.17]$ cat z-showtraffic.py
#!/usr/local/bin/python
from durus.connection import Connection
from durus.client_storage import ClientStorage
from BitTornado.bencode import bencode,bdecode
import time,sys,sha
root=None
for i in sys.argv[1:] :
try :
f=open(i,"rb").read(1024*1024)
metainfo=bdecode(f)
info=metainfo["info"]
info_hash = sha.new(bencode(info)).digest()
except KeyboardInterrupt :
raise
except :
import traceback
print "*****",i
traceback.print_exc()
print
continue
if root==None :
connection=Connection(ClientStorage(address="/video/0/durus-berkeleydbstorage/db/unix_socket"))
root=connection.get_root()
connection.abort()
print metainfo["info"]["name"]
print metainfo["announce"]
trafico=root["BT"].get(info_hash,None)
if trafico!=None :
up,down=trafico[0],trafico[1]
print "UP: %d - DOWN: %d - SR: %.2f - %s" %(up,down,up/(1.0+down),time.ctime(trafico[2]))
else :
print "?????"
print
Las mejoras son:
Nótese cómo procesamos "KeyboardInterrupt", por si pulsamos CONTROL+C durante la ejecución.
Más información sobre los OpenBadges
Donación BitCoin: 19niBN42ac2pqDQFx6GJZxry2JQSFvwAfS
