Changeset - 3f9fff4c9811
[Not reviewed]
default
0 3 0
Laman - 7 years ago 2017-10-10 17:02:35

fixed long running server, fixed logging
3 files changed with 18 insertions and 8 deletions:
0 comments (0 inline, 0 general)
src/config.py
Show inline comments
 
import os
 
import logging as log
 
from logging.handlers import TimedRotatingFileHandler
 

	
 

	
 
log.basicConfig(
 
	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))
 
logger.setLevel(log.INFO)
 
formatter=log.Formatter("%(asctime)s %(levelname)s: %(message)s",datefmt="%Y-%m-%d %H:%M:%S")
 
handler=TimedRotatingFileHandler("/var/log/morevna/mor.log",when="midnight",backupCount=9)
 
handler.setFormatter(formatter)
 
logger.addHandler(handler)
 

	
 

	
 
version=0
 

	
 
hosts=["127.0.0.1"]
 
port=9901
 

	
src/morevna.py
Show inline comments
 
import sys
 
import os.path
 
import logging as log
 
from argparse import ArgumentParser
 

	
 
from util import spawnDaemon
 
import config as conf
 
import stats
 
from hashtree import HashTree
 
@@ -38,13 +39,16 @@ def serve(args):
 
	if args.tree:
 
		_checkFile(args.tree)
 
	if args.host: conf.hosts.insert(0,args.host)
 
	if args.port: conf.port=args.port
 

	
 
	s=Server(args.datafile,args.tree)
 
	try:
 
	spawnDaemon(s.serve)
 
	except Exception as e:
 
		log.exception("exception: %s",e)
 

	
 

	
 
parser=ArgumentParser()
 
subparsers=parser.add_subparsers()
 

	
 
pBuild=subparsers.add_parser("build")
src/server.py
Show inline comments
 
@@ -48,13 +48,19 @@ class Server:
 

	
 
		self._ss = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
 
		self._ss.bind(("", conf.port))
 
		self._ss.listen(1)
 

	
 
		self._lastIndex=-1
 
		self._dataFile=None
 
		self._dataFileHandle=None
 

	
 
	@property
 
	def _dataFile(self):
 
		if not self._dataFileHandle:
 
			self._dataFileHandle=open(self._filename, mode="rb+")
 
		return self._dataFileHandle
 

	
 
	def serve(self):
 
		while True:
 
			with Connection(self._ss,self._ssl) as (incoming, outcoming):
 
				try:
 
					while self._serveOne(incoming,outcoming):
 
@@ -110,28 +116,26 @@ class Server:
 

	
 
		return (jsonResponse,binResponse)
 

	
 
	def _receiveData(self,jsonData,binData):
 
		log.info("received data block #{0}: {1}...{2}".format(jsonData["index"],binData[:5],binData[-5:]))
 

	
 
		if not self._dataFile:
 
			self._dataFile=open(self._filename, mode="rb+")
 
		i=jsonData["index"]
 
		if self._lastIndex+1!=i:
 
			self._dataFile.seek(i*self.BLOCK_SIZE)
 
		self._dataFile.write(binData)
 
		self._lastIndex=i
 
		if self._treeFile:
 
			self._newLeaves[i+self._tree.leafStart]=hashlib.sha256(binData).digest()[HashTree.HASH_LEN:]
 

	
 
		return ({"command": "ack", "index": i},)
 

	
 
	def _finalize(self):
 
		log.info("closing session...")
 
		if self._dataFile:
 
			self._dataFile.close()
 
		self._dataFileHandle=None
 
		if self._treeFile:
 
			log.info("updating hash tree...")
 
			for (k,v) in self._newLeaves.items():
 
				self._tree.updateLeaf(k, v)
 
			self._tree.save(self._treeFile)
 
		log.info("done")
0 comments (0 inline, 0 general)