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:
parent
aae1022c79
commit
185424b815
9 changed files with 18 additions and 9 deletions
|
@ -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')
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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:
|
||||||
|
|
|
@ -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())
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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)
|
||||||
|
|
|
@ -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"])
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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])
|
||||||
|
|
Loading…
Reference in a new issue