Ú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