version bump, allow to publihs to specified peer, log sendCmd, add zeronet version to content.js, version to websocket api, force start worker specificed for specificed peer

This commit is contained in:
HelloZeroNet 2015-01-16 11:52:42 +01:00
parent aae1022c79
commit 185424b815
9 changed files with 18 additions and 9 deletions

View File

@ -3,7 +3,7 @@ import ConfigParser
class Config(object): class Config(object):
def __init__(self): def __init__(self):
self.version = "0.1" self.version = "0.1.1"
self.parser = self.createArguments() self.parser = self.createArguments()
argv = sys.argv[:] # Copy command line arguments argv = sys.argv[:] # Copy command line arguments
argv = self.parseConfig(argv) # Add arguments from config file argv = self.parseConfig(argv) # Add arguments from config file
@ -43,6 +43,8 @@ class Config(object):
# SitePublish # SitePublish
action = subparsers.add_parser("sitePublish", help='Publish site to other peers: address') action = subparsers.add_parser("sitePublish", help='Publish site to other peers: address')
action.add_argument('address', help='Site to publish') action.add_argument('address', help='Site to publish')
action.add_argument('peer_ip', help='Peer ip to publish (default: random peers ip from tracker)', default=None, nargs='?')
action.add_argument('peer_port', help='Peer port to publish (default: random peer port from tracker)', default=15441, nargs='?')
# SiteVerify # SiteVerify
action = subparsers.add_parser("siteVerify", help='Verify site files using md5: address') action = subparsers.add_parser("siteVerify", help='Verify site files using md5: address')

View File

@ -61,7 +61,7 @@ class FileRequest:
elif valid == None: # Not changed elif valid == None: # Not changed
peer = site.addPeer(*params["peer"], return_peer = True) # Add or get peer peer = site.addPeer(*params["peer"], return_peer = True) # Add or get peer
self.log.debug("New peer for locked files: %s, tasks: %s" % (peer.key, len(site.worker_manager.tasks)) ) self.log.debug("Same version, adding new peer for locked files: %s, tasks: %s" % (peer.key, len(site.worker_manager.tasks)) )
for task in site.worker_manager.tasks: # New peer add to every ongoing task for task in site.worker_manager.tasks: # New peer add to every ongoing task
if task["peers"]: site.needFile(task["inner_path"], peer=peer, update=True, blocking=False) # Download file from this peer too if its peer locked if task["peers"]: site.needFile(task["inner_path"], peer=peer, update=True, blocking=False) # Download file from this peer too if its peer locked

View File

@ -149,7 +149,7 @@ class FileServer:
return return
if check_sites: # Open port, Update sites, Check files integrity if check_sites: # Open port, Update sites, Check files integrity
gevent.spawn(self.checkSites) gevent.spawn(self.checkSites)
gevent.spawn(self.announceSites) gevent.spawn(self.announceSites)
while True: while True:

View File

@ -40,6 +40,7 @@ class Peer:
# Send a command to peer # Send a command to peer
def sendCmd(self, cmd, params = {}): def sendCmd(self, cmd, params = {}):
if not self.socket: self.connect() if not self.socket: self.connect()
self.log.debug("sendCmd: %s" % cmd)
try: try:
self.socket.send(msgpack.packb({"cmd": cmd, "params": params}, use_bin_type=True)) self.socket.send(msgpack.packb({"cmd": cmd, "params": params}, use_bin_type=True))
response = msgpack.unpackb(self.socket.recv()) response = msgpack.unpackb(self.socket.recv())

View File

@ -384,7 +384,7 @@ class Site:
def signContent(self, privatekey=None): def signContent(self, privatekey=None):
if not self.content: # New site if not self.content: # New site
self.log.info("Site not exits yet, loading default content.json values...") self.log.info("Site not exits yet, loading default content.json values...")
self.content = {"files": {}, "title": "%s - ZeroNet_" % self.address, "sign": "", "modified": 0.0, "description": "", "address": self.address, "ignore": ""} # Default content.json self.content = {"files": {}, "title": "%s - ZeroNet_" % self.address, "sign": "", "modified": 0.0, "description": "", "address": self.address, "ignore": "", "zeronet_version": config.version} # Default content.json
self.log.info("Opening site data directory: %s..." % self.directory) self.log.info("Opening site data directory: %s..." % self.directory)
@ -409,7 +409,8 @@ class Site:
content["address"] = self.address # Add files sha1 hash content["address"] = self.address # Add files sha1 hash
content["files"] = hashed_files # Add files sha1 hash content["files"] = hashed_files # Add files sha1 hash
content["modified"] = time.time() # Add timestamp content["modified"] = time.time() # Add timestamp
del(content["sign"]) # Delete old site content["zeronet_version"] = config.version # Signer's zeronet version
del(content["sign"]) # Delete old sign
# Signing content # Signing content
from Crypt import CryptBitcoin from Crypt import CryptBitcoin

View File

@ -158,6 +158,7 @@ class UiWebsocket:
"fileserver_port": config.fileserver_port, "fileserver_port": config.fileserver_port,
"ui_ip": config.ui_ip, "ui_ip": config.ui_ip,
"ui_port": config.ui_port, "ui_port": config.ui_port,
"version": config.version,
"debug": config.debug "debug": config.debug
} }
self.response(to, ret) self.response(to, ret)

View File

@ -20,6 +20,7 @@ class Worker:
if not task: # Die, no more task if not task: # Die, no more task
self.manager.log.debug("%s: No task found, stopping" % self.key) self.manager.log.debug("%s: No task found, stopping" % self.key)
break break
if not task["time_started"]: task["time_started"] = time.time() # Task started now
if task["workers_num"] > 0: # Wait a bit if someone already working on it if task["workers_num"] > 0: # Wait a bit if someone already working on it
self.manager.log.debug("%s: Someone already working on %s, sleeping 1 sec..." % (self.key, task["inner_path"])) self.manager.log.debug("%s: Someone already working on %s, sleeping 1 sec..." % (self.key, task["inner_path"]))
@ -27,7 +28,6 @@ class Worker:
self.manager.log.debug("%s: %s, task done after sleep: %s" % (self.key, task["inner_path"], task["done"])) self.manager.log.debug("%s: %s, task done after sleep: %s" % (self.key, task["inner_path"], task["done"]))
if task["done"] == False: if task["done"] == False:
if not task["time_started"]: task["time_started"] = time.time() # Task started now
self.task = task self.task = task
task["workers_num"] += 1 task["workers_num"] += 1
buff = self.peer.getFile(task["site"].address, task["inner_path"]) buff = self.peer.getFile(task["site"].address, task["inner_path"])

View File

@ -77,7 +77,7 @@ class WorkerManager:
# Start workers to process tasks # Start workers to process tasks
def startWorkers(self, peers=None): def startWorkers(self, peers=None):
if len(self.workers) >= MAX_WORKERS: return False # Workers number already maxed if len(self.workers) >= MAX_WORKERS and not peers: return False # Workers number already maxed
if not self.tasks: return False # No task for workers if not self.tasks: return False # No task for workers
for key, peer in self.site.peers.iteritems(): # One worker for every peer for key, peer in self.site.peers.iteritems(): # One worker for every peer
if peers and peer not in peers: continue # If peers definied and peer not valid if peers and peer not in peers: continue # If peers definied and peer not valid

View File

@ -135,7 +135,7 @@ def siteNeedFile(address, inner_path):
print site.needFile(inner_path, update=True) print site.needFile(inner_path, update=True)
def sitePublish(address): def sitePublish(address, peer_ip=None, peer_port=15441):
from Site import Site from Site import Site
from File import FileServer # We need fileserver to handle incoming file requests from File import FileServer # We need fileserver to handle incoming file requests
logging.info("Creating FileServer....") logging.info("Creating FileServer....")
@ -147,7 +147,11 @@ def sitePublish(address):
return return
site = file_server.sites[address] site = file_server.sites[address]
site.settings["serving"] = True # Serving the site even if its disabled site.settings["serving"] = True # Serving the site even if its disabled
site.announce() # Gather peers if peer_ip: # Announce ip specificed
site.addPeer(peer_ip, peer_port)
else: # Just ask the tracker
logging.info("Gathering peers from tracker")
site.announce() # Gather peers
site.publish(20) # Push to 20 peers site.publish(20) # Push to 20 peers
logging.info("Serving files....") logging.info("Serving files....")
gevent.joinall([file_server_thread]) gevent.joinall([file_server_thread])