Changeset - 41ea9614ce8c
[Not reviewed]
default
0 3 1
Laman - 8 years ago 2017-06-13 22:23:30

collecting basic statistics
4 files changed with 46 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/client.py
Show inline comments
 
@@ -4,6 +4,7 @@ import logging as log
 
from datetime import datetime
 

	
 
import config as conf
 
import stats
 
from util import Progress
 
from hashtree import HashTree
 
from networkers import NetworkReader,NetworkWriter
 
@@ -53,6 +54,7 @@ class Client:
 
				jsonData,binData=incoming.readMsg()
 
				assert jsonData["index"]==i
 
				assert jsonData["dataType"]=="hash"
 
				stats.logExchangedNode()
 

	
 
				if localTree.store[i]!=binData:
 
					if 2*i+3<len(localTree.store): # inner node
 
@@ -82,6 +84,7 @@ class Client:
 
				log.info("block #{0}: {1}...{2}".format(i2,binData[:5],binData[-5:]))
 

	
 
				outcoming.writeMsg(jsonData,binData)
 
				stats.logTransferredBlock()
 
				jsonData,binData=incoming.readMsg()
 
				assert jsonData["command"]=="ack" and jsonData["index"]==i2, jsonData
 
				i1=i2
src/morevna.py
Show inline comments
 
@@ -3,6 +3,7 @@ import os.path
 
from argparse import ArgumentParser
 

	
 
import config as conf
 
import stats
 
from hashtree import HashTree
 
from client import Client
 
from server import Server
 
@@ -28,6 +29,8 @@ def update(args):
 
	c=Client(args.datafile)
 
	blocksToTransfer=c.negotiate()
 
	c.sendData(blocksToTransfer)
 
	print()
 
	print(stats.report())
 

	
 
def serve(args):
 
	_checkFile(args.datafile)
src/networkers.py
Show inline comments
 
import json
 

	
 
import stats
 

	
 

	
 
class NetworkReader:
 
	def __init__(self,stream):
 
@@ -8,15 +10,22 @@ class NetworkReader:
 
	def readMsg(self):
 
		data=self.stream.readline()
 
		assert data
 
		stats.logReceived(data)
 
		jsonLength=int(data.split(b":")[1].strip()) # "json-length: length" -> length
 

	
 
		data=self.stream.readline()
 
		assert data
 
		stats.logReceived(data)
 
		binLength=int(data.split(b":")[1].strip()) # "bin-length: length" -> length
 

	
 
		jsonData=self.stream.read(jsonLength)
 
		assert len(jsonData)==jsonLength
 
		stats.logReceived(jsonData)
 
		jsonData=json.loads(str(jsonData,encoding="utf-8"))
 

	
 
		binData=self.stream.read(binLength)
 
		assert len(binData)==binLength
 
		stats.logReceived(binData)
 
		
 
		return (jsonData,binData)
 
		
 
@@ -26,8 +35,10 @@ class NetworkWriter:
 
		self.stream=stream
 

	
 
	def writeMsg(self,*args):
 
		self.stream.write(self.prepMsg(*args))
 
		msg=self.prepMsg(*args)
 
		self.stream.write(msg)
 
		self.stream.flush()
 
		stats.logSent(msg)
 

	
 
	def prepMsg(self,jsonData,binData=b""):
 
		jsonData=bytes(json.dumps(jsonData)+"\n",encoding="utf-8")
src/stats.py
Show inline comments
 
new file 100644
 
class Stats:
 
	received=0
 
	sent=0
 
	exchangedNodes=0
 
	transferredBlocks=0
 

	
 

	
 
def logReceived(data):
 
	Stats.received+=len(data)
 

	
 

	
 
def logSent(data):
 
	Stats.sent+=len(data)
 

	
 

	
 
def logExchangedNode():
 
	Stats.exchangedNodes+=1
 

	
 

	
 
def logTransferredBlock():
 
	Stats.transferredBlocks+=1
 

	
 

	
 
def report():
 
	return """received {r}B
 
sent {s}B
 
exchanged {nodes} hash tree nodes
 
transferred {blocks} blocks""".format(r=Stats.received, s=Stats.sent, nodes=Stats.exchangedNodes, blocks=Stats.transferredBlocks)
0 comments (0 inline, 0 general)