Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/env python2
- from __future__ import division
- import sys, csv, time, signal, os, os.path
- from datetime import datetime, timedelta
- def formatValue(v):
- if v > 1000000000:
- return "%.1fG" % (v / 1000000000)
- elif v > 1000000:
- return "%.1fM" % (v / 1000000)
- elif v > 1000:
- return "%.1fk" % (v / 1000)
- else:
- return "%.1f" % (v)
- class LineUpdater(object):
- def __init__(self):
- self.len = 0
- def put(self, text):
- sys.stdout.write('\r')
- if len(text) < self.len:
- sys.stdout.write(' ' * self.len)
- sys.stdout.write('\r')
- sys.stdout.write(text)
- self.len = len(text)
- sys.stdout.flush()
- class Speedometer(object):
- DATE_FMT = "%Y-%m-%d %H:%M:%S.%f"
- def __init__(self, interval):
- self.ts_queue = []
- self.interval = interval
- def feed(self, line):
- # Add
- ts = datetime.strptime(line[0]+"000", self.DATE_FMT)
- end = ts - timedelta(minutes=self.interval)
- self.ts_queue.append(ts)
- # Purge
- while len(self.ts_queue) > 0 and self.ts_queue[0] < end:
- self.ts_queue.pop(0)
- def sharesPerSecond(self):
- return len(self.ts_queue) / (self.interval*60)
- def get_file_id(name):
- return os.stat("log/shares.log").st_ino
- def preload(name, m):
- if not os.path.exists(name):
- return
- f = open(name, 'rb')
- for l in csv.reader(f, delimiter=';', quotechar='"'):
- if prefix and not l[4].startswith(prefix):
- continue
- if l[8] == "1" or l[8] == "2":
- m.feed(l)
- f.close()
- if __name__ == "__main__":
- if len(sys.argv) > 1:
- prefix = sys.argv[1]
- else:
- prefix = None
- signal.signal(signal.SIGINT, signal.SIG_DFL)
- u = LineUpdater()
- m = Speedometer(10)
- #preload('log/shares_2.log', m)
- preload('log/shares_1.log', m)
- v = 0
- i = 0
- fid = get_file_id('log/shares.log')
- f = open('log/shares.log', 'rb')
- c = csv.reader(f, delimiter=';', quotechar='"')
- while True:
- p = f.tell()
- try:
- l = c.next()
- if len(l) < 13:
- raise StopIteration
- if l[8] == "2":
- sys.stdout.write("\n%s - \\o/ Block #%s solved by %s! \\o/\n" % (l[0], l[12], l[4]))
- if prefix is None or l[4].startswith(prefix):
- if l[8] == "1" or l[8] == "2":
- m.feed(l)
- v += 1
- else:
- i += 1
- except StopIteration:
- nfid = get_file_id('log/shares.log')
- if fid != nfid:
- fid = nfid
- f.close()
- f = open('log/shares.log', 'rb')
- c = csv.reader(f, delimiter=';', quotechar='"')
- sys.stdout.write("\nLogfile rotated, resetting counters. %d shares seen.\n" % (v+i))
- i = 0
- v = 0
- else:
- f.seek(p)
- time.sleep(1)
- u.put("Rate: %6sH/s - Stales: %2.2f %%" % (formatValue(m.sharesPerSecond() * 4295032833), 100 * i / (v+i) if (v+i) > 0 else 0))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement