diff --git a/frontend/theseven/cursesui.py b/frontend/theseven/cursesui.py index ccbf054..588bf67 100644 --- a/frontend/theseven/cursesui.py +++ b/frontend/theseven/cursesui.py @@ -86,7 +86,7 @@ class CursesUI(object): for pool in pools: bold = "B" if len(pool["children"]) > 0 else "" uptime = 1 - try: uptime = (datetime.datetime.utcnow() - pool["starttime"]).total_seconds() + try: uptime = (time.time() - pool["starttime"]) except: pass try: failedpercent = 100. * pool["failedreqs"] / pool["requests"] except: failedpercent = 0 @@ -117,7 +117,7 @@ class CursesUI(object): for worker in workers: bold = "B" if len(worker["children"]) > 0 else "" uptime = 1 - try: uptime = (datetime.datetime.utcnow() - worker["starttime"]).total_seconds() + try: uptime = (time.time() - worker["starttime"]) except: pass try: stalepercent = 100. * worker["rejected"] / (worker["accepted"] + worker["rejected"]) except: stalepercent = 0 diff --git a/miner.py b/miner.py index f39310f..111bf1f 100755 --- a/miner.py +++ b/miner.py @@ -94,7 +94,7 @@ class OutputRedirector(object): class Blockchain(object): def __init__(self, miner): self.miner = miner - self.lastlongpoll = datetime.datetime.utcnow() - datetime.timedelta(seconds = self.miner.longpollgrouptime) + self.lastlongpoll = time.time() - self.miner.longpollgrouptime self.longpollepoch = 0 class Miner(object): @@ -184,12 +184,12 @@ class Miner(object): self.fetchersrunning = self.fetchersrunning + 1 queuedelay = self.queuelength / self.jobspersecond while True: - now = datetime.datetime.utcnow() + now = time.time() best = None pool = None for p in self.pools: p.score = p.score * self.biasdecay - excessmhashes = p.mhashes - ((now - p.starttime).total_seconds() + queuedelay) * p.hashrate + excessmhashes = p.mhashes - ((now - p.starttime) + queuedelay) * p.hashrate score = excessmhashes - p.score if excessmhashes - max(0, p.score) >= 0: if p.priority > 0: score = max(0, score / p.priority) @@ -207,11 +207,11 @@ class Miner(object): def fetcher(self, pool): with self.queuelock: - if (datetime.datetime.utcnow() - pool.blockchain.lastlongpoll).total_seconds() > self.longpollgrouptime: + if (time.time() - pool.blockchain.lastlongpoll) > self.longpollgrouptime: pool.longpollepoch = pool.blockchain.longpollepoch epoch = pool.longpollepoch if epoch < pool.blockchain.longpollepoch: - pool.blockeduntil = pool.blockchain.lastlongpoll + datetime.timedelta(seconds = self.longpollgrouptime) + pool.blockeduntil = pool.blockchain.lastlongpoll + self.longpollgrouptime with self.fetcherlock: self.fetchersrunning = self.fetchersrunning - 1 self.adjustfetchers() @@ -227,7 +227,7 @@ class Miner(object): pool.failedreqs = pool.failedreqs + 1 pool.score = pool.score + self.getworkfailbias with self.queuelock: - pool.blockeduntil = datetime.datetime.utcnow() + datetime.timedelta(seconds = 3) + pool.blockeduntil = time.time() + 3 if job != None: self.queuelock.acquire() if epoch == pool.blockchain.longpollepoch: @@ -272,9 +272,9 @@ class Miner(object): with self.queuelock: job.pool.longpollepoch = job.pool.longpollepoch + 1 if job.pool.longpollepoch >= job.pool.blockchain.longpollepoch: - job.pool.blockeduntil = datetime.datetime.utcnow() + job.pool.blockeduntil = time.time() if job.pool.longpollepoch > job.pool.blockchain.longpollepoch: - job.pool.blockchain.lastlongpoll = datetime.datetime.utcnow() + job.pool.blockchain.lastlongpoll = time.time() job.pool.blockchain.longpollepoch = job.pool.longpollepoch for w in self.workers: try: w.cancel(job.pool.blockchain) diff --git a/pool/theseven/bcjsonrpc.py b/pool/theseven/bcjsonrpc.py index 9a58f9d..66e92f0 100644 --- a/pool/theseven/bcjsonrpc.py +++ b/pool/theseven/bcjsonrpc.py @@ -43,7 +43,7 @@ import sys import common import base64 -import datetime +import time import json import threading import curses @@ -84,8 +84,8 @@ class JSONRPCPool(object): self.rejected = 0 self.score = 0 self.mhashes = 0 - self.starttime = datetime.datetime.utcnow() - self.blockeduntil = datetime.datetime.utcnow() + self.starttime = time.time() + self.blockeduntil = time.time() self.difficulty = 0 def getstatistics(self, childstats): diff --git a/worker/fpgamining/x6500.py b/worker/fpgamining/x6500.py index 8ecbfb2..93a6d09 100644 --- a/worker/fpgamining/x6500.py +++ b/worker/fpgamining/x6500.py @@ -39,7 +39,6 @@ import common import binascii import threading import time -import datetime import hashlib import struct import atexit @@ -99,7 +98,7 @@ class X6500Worker(object): self.accepted = 0 # Number of accepted shares produced by this worker * difficulty self.rejected = 0 # Number of rejected shares produced by this worker * difficulty self.invalid = 0 # Number of invalid shares produced by this worker - self.starttime = datetime.datetime.utcnow() # Start timestamp (to get average MH/s from MHashes) + self.starttime = time.time() # Start timestamp (to get average MH/s from MHashes) # Statistics lock, ensures that the UI can get a consistent statistics state # Needs to be acquired during all operations that affect the above values @@ -251,7 +250,7 @@ class X6500FPGA(object): self.accepted = 0 # Number of accepted shares produced by this worker * difficulty self.rejected = 0 # Number of rejected shares produced by this worker * difficulty self.invalid = 0 # Number of invalid shares produced by this worker - self.starttime = datetime.datetime.utcnow() # Start timestamp (to get average MH/s from MHashes) + self.starttime = time.time() # Start timestamp (to get average MH/s from MHashes) self.temperature = None # Statistics lock, ensures that the UI can get a consistent statistics state @@ -484,7 +483,7 @@ class X6500FPGA(object): # In that case, just restart things to clean up the situation. if oldjob == None: raise Exception("Mining device sent a share before even getting a job") # Stop time measurement - oldjob.endtime = datetime.datetime.utcnow() + oldjob.endtime = time.time() # Pass the nonce that we found to the work source, if there is one. # Do this before calculating the hash rate as it is latency critical. if oldjob != None: @@ -503,7 +502,7 @@ class X6500FPGA(object): if self.seconditeration == True: with self.wakeup: # This is the second iteration. We now know the actual nonce rotation time. - delta = (oldjob.endtime - oldjob.starttime).total_seconds() + delta = (oldjob.endtime - oldjob.starttime) # Calculate the hash rate based on the nonce rotation time. self.mhps = 2**32 / 1000000. / delta # Tell the MPBM core that our hash rate has changed, so that it can adjust its work buffer. @@ -521,7 +520,7 @@ class X6500FPGA(object): self.seconditeration = True else: # Adjust hash rate tracking - delta = (oldjob.endtime - self.lasttime).total_seconds() + delta = (oldjob.endtime - self.lasttime) nonce = struct.unpack("