Changeset - 259f29140f23
[Not reviewed]
default
0 4 0
Laman - 8 years ago 2017-10-09 21:55:09

server forked into background
4 files changed with 47 insertions and 8 deletions:
0 comments (0 inline, 0 general) First comment
src/config.py
Show inline comments
 
import os
 
import datetime
 
import logging as log
 
from logging.handlers import TimedRotatingFileHandler
 

	
 

	
 
logName="/tmp/mor{0}.log".format(datetime.datetime.now().timestamp())
 
log.basicConfig(
 
	level=log.INFO,format="%(asctime)s %(levelname)s: %(message)s",datefmt="%Y-%m-%d %H:%M:%S",
 
	filename=logName
 
	level=log.INFO,format="%(asctime)s %(levelname)s: %(message)s",datefmt="%Y-%m-%d %H:%M:%S"
 
)
 
logger=log.getLogger()
 
logger.addHandler(TimedRotatingFileHandler("/var/log/morevna.log",when="midnight",backupCount=9))
 

	
 
version=0
 

	
 
hosts=["127.0.0.1"]
 
port=9001
 
port=9901
 

	
 
directory=os.path.join(os.path.dirname(__file__),"..")
 
certfile=os.path.join(directory,"certs/cert.pem")
src/morevna.py
Show inline comments
 
@@ -2,6 +2,7 @@ import sys
 
import os.path
 
from argparse import ArgumentParser
 

	
 
from util import spawnDaemon
 
import config as conf
 
import stats
 
from hashtree import HashTree
 
@@ -40,7 +41,7 @@ def serve(args):
 
	if args.port: conf.port=args.port
 

	
 
	s=Server(args.datafile,args.tree)
 
	s.serve()
 
	spawnDaemon(s.serve)
 

	
 

	
 
parser=ArgumentParser()
src/server.py
Show inline comments
 
@@ -32,6 +32,7 @@ class Server:
 
	def __init__(self,filename,treeFile=""):
 
		self._filename=filename
 
		self._treeFile=treeFile
 
		self._locked=False
 

	
 
		if treeFile:
 
			self._tree=HashTree.load(treeFile)
 
@@ -56,8 +57,8 @@ class Server:
 
		while True:
 
			with Connection(self._ss,self._ssl) as (incoming, outcoming):
 
				try:
 
					while True:
 
						if not self._serveOne(incoming,outcoming): return
 
					while self._serveOne(incoming,outcoming):
 
						pass
 
				except AssertionError:
 
					continue
 

	
 
@@ -67,6 +68,7 @@ class Server:
 
		if jsonData["command"]=="init":
 
			assert jsonData["blockSize"]==self.BLOCK_SIZE
 
			assert jsonData["blockCount"]==self._tree.leafCount
 
			self._locked=True
 
			outcoming.writeMsg({"command": "ack"})
 

	
 
		elif jsonData["command"]=="req":
 
@@ -80,6 +82,7 @@ class Server:
 

	
 
		elif jsonData["command"]=="end":
 
			self._finalize()
 
			self._locked=False
 
			return False
 

	
 
		else:
src/util.py
Show inline comments
 
import os
 
import sys
 

	
 

	
 
def spawnDaemon(fun):
 
	# do the UNIX double-fork magic, see Stevens' "Advanced
 
	# Programming in the UNIX Environment" for details (ISBN 0201563177)
 
	try:
 
		pid = os.fork()
 
		if pid > 0:
 
			# parent process, return and keep running
 
			return
 
	except OSError as e:
 
		print("fork #1 failed: {0} ({1})".format(e.errno,e.strerror),file=sys.stderr)
 
		sys.exit(1)
 

	
 
	os.setsid()
 

	
 
	# do second fork
 
	try:
 
		pid = os.fork()
 
		if pid > 0:
 
			# exit from second parent
 
			print("[{0}] server running".format(pid))
 
			sys.exit(0)
 
	except OSError as e:
 
		print("fork #2 failed: {0} ({1})".format(e.errno,e.strerror),file=sys.stderr)
 
		sys.exit(1)
 

	
 
	fun()
 

	
 
	# all done
 
	os._exit(os.EX_OK)
 

	
 

	
 
class Progress:
 
	def __init__(self,n,i0=0):
 
		self._n=n
0 comments (0 inline, 0 general) First comment
You need to be logged in to comment. Login now