From 185424b815ae3c461d984a1f5a76b3f1f37ab4f3 Mon Sep 17 00:00:00 2001 From: HelloZeroNet Date: Fri, 16 Jan 2015 11:52:42 +0100 Subject: [PATCH] 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 --- src/Config.py | 4 +++- src/File/FileRequest.py | 2 +- src/File/FileServer.py | 2 +- src/Peer/Peer.py | 1 + src/Site/Site.py | 5 +++-- src/Ui/UiWebsocket.py | 1 + src/Worker/Worker.py | 2 +- src/Worker/WorkerManager.py | 2 +- src/main.py | 8 ++++++-- 9 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/Config.py b/src/Config.py index dc455d91..11592e2f 100644 --- a/src/Config.py +++ b/src/Config.py @@ -3,7 +3,7 @@ import ConfigParser class Config(object): def __init__(self): - self.version = "0.1" + self.version = "0.1.1" self.parser = self.createArguments() argv = sys.argv[:] # Copy command line arguments argv = self.parseConfig(argv) # Add arguments from config file @@ -43,6 +43,8 @@ class Config(object): # SitePublish action = subparsers.add_parser("sitePublish", help='Publish site to other peers: address') 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 action = subparsers.add_parser("siteVerify", help='Verify site files using md5: address') diff --git a/src/File/FileRequest.py b/src/File/FileRequest.py index 6bb4a29b..e9c5926a 100644 --- a/src/File/FileRequest.py +++ b/src/File/FileRequest.py @@ -61,7 +61,7 @@ class FileRequest: elif valid == None: # Not changed 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 if task["peers"]: site.needFile(task["inner_path"], peer=peer, update=True, blocking=False) # Download file from this peer too if its peer locked diff --git a/src/File/FileServer.py b/src/File/FileServer.py index dce3d8b7..9899460d 100644 --- a/src/File/FileServer.py +++ b/src/File/FileServer.py @@ -149,7 +149,7 @@ class FileServer: return if check_sites: # Open port, Update sites, Check files integrity gevent.spawn(self.checkSites) - + gevent.spawn(self.announceSites) while True: diff --git a/src/Peer/Peer.py b/src/Peer/Peer.py index 002f9111..43c31659 100644 --- a/src/Peer/Peer.py +++ b/src/Peer/Peer.py @@ -40,6 +40,7 @@ class Peer: # Send a command to peer def sendCmd(self, cmd, params = {}): if not self.socket: self.connect() + self.log.debug("sendCmd: %s" % cmd) try: self.socket.send(msgpack.packb({"cmd": cmd, "params": params}, use_bin_type=True)) response = msgpack.unpackb(self.socket.recv()) diff --git a/src/Site/Site.py b/src/Site/Site.py index 6d7f818a..163862e1 100644 --- a/src/Site/Site.py +++ b/src/Site/Site.py @@ -384,7 +384,7 @@ class Site: def signContent(self, privatekey=None): if not self.content: # New site 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) @@ -409,7 +409,8 @@ class Site: content["address"] = self.address # Add files sha1 hash content["files"] = hashed_files # Add files sha1 hash 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 from Crypt import CryptBitcoin diff --git a/src/Ui/UiWebsocket.py b/src/Ui/UiWebsocket.py index 6b7b2520..e5736287 100644 --- a/src/Ui/UiWebsocket.py +++ b/src/Ui/UiWebsocket.py @@ -158,6 +158,7 @@ class UiWebsocket: "fileserver_port": config.fileserver_port, "ui_ip": config.ui_ip, "ui_port": config.ui_port, + "version": config.version, "debug": config.debug } self.response(to, ret) diff --git a/src/Worker/Worker.py b/src/Worker/Worker.py index 239d2394..797bc35c 100644 --- a/src/Worker/Worker.py +++ b/src/Worker/Worker.py @@ -20,6 +20,7 @@ class Worker: if not task: # Die, no more task self.manager.log.debug("%s: No task found, stopping" % self.key) 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 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"])) if task["done"] == False: - if not task["time_started"]: task["time_started"] = time.time() # Task started now self.task = task task["workers_num"] += 1 buff = self.peer.getFile(task["site"].address, task["inner_path"]) diff --git a/src/Worker/WorkerManager.py b/src/Worker/WorkerManager.py index 6e42dc7e..a2ea1dac 100644 --- a/src/Worker/WorkerManager.py +++ b/src/Worker/WorkerManager.py @@ -77,7 +77,7 @@ class WorkerManager: # Start workers to process tasks 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 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 diff --git a/src/main.py b/src/main.py index 21955a81..ab8fc25f 100644 --- a/src/main.py +++ b/src/main.py @@ -135,7 +135,7 @@ def siteNeedFile(address, inner_path): print site.needFile(inner_path, update=True) -def sitePublish(address): +def sitePublish(address, peer_ip=None, peer_port=15441): from Site import Site from File import FileServer # We need fileserver to handle incoming file requests logging.info("Creating FileServer....") @@ -147,7 +147,11 @@ def sitePublish(address): return site = file_server.sites[address] 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 logging.info("Serving files....") gevent.joinall([file_server_thread])