1
|
|
|
|
2
|
|
|
#"Pool Stale%": 0, |
3
|
|
|
#"Discarded": 86497, |
4
|
|
|
#"Diff": "65.5K", |
5
|
|
|
#"Rejected": 15, |
6
|
|
|
#"Proxy Type": "", |
7
|
|
|
#"Getworks": 3311, |
8
|
|
|
#"Last Share Time": "0:00:20", |
9
|
|
|
#"Pool Rejected%": 0.1838, |
10
|
|
|
#"Accepted": 8148, |
11
|
|
|
#"Last Share Difficulty": 65536, |
12
|
|
|
#"Difficulty Accepted": 533987328, |
13
|
|
|
#"Has Stratum": true, |
14
|
|
|
#"Priority": 1, |
15
|
|
|
#"Stale": 3, |
16
|
|
|
#"Long Poll": "N", |
17
|
|
|
#"Quota": 1, |
18
|
|
|
#"URL": "stratum+tcp://solo.antpool.com:3333", |
19
|
|
|
#"Proxy": "", |
20
|
|
|
#"Get Failures": 1, |
21
|
|
|
#"Diff1 Shares": 0, |
22
|
|
|
#"Best Share": 255598083, |
23
|
|
|
#"Stratum Active": true, |
24
|
|
|
#"POOL": 0, |
25
|
|
|
#"Has GBT": false, |
26
|
|
|
#"User": "antminer_1", |
27
|
|
|
#"Status": "Alive", |
28
|
|
|
#"Stratum URL": "solo.antpool.com", |
29
|
|
|
#"Remote Failures": 1, |
30
|
|
|
#"Difficulty Rejected": 983040, |
31
|
|
|
#"Difficulty Stale": 0 |
32
|
|
|
|
33
|
|
|
class MinerStatistics(object): |
34
|
|
|
'''Statistics for a miner |
35
|
|
|
temperature and hash |
36
|
|
|
''' |
37
|
|
|
def __init__(self, miner, when=None, minercount=0, currenthash=0, |
38
|
|
|
controllertemp=0, |
39
|
|
|
tempboard1=0, tempboard2=0, tempboard3=0, |
40
|
|
|
elapsed=0, |
41
|
|
|
fan1='', fan2='', fan3='', |
42
|
|
|
boardstatus1='', boardstatus2='', boardstatus3='', |
43
|
|
|
frequency='', hardware_errors=0, hash_avg=0, rawstats=None): |
44
|
|
|
self.miner = miner |
45
|
|
|
self.when = when |
46
|
|
|
self.minercount = minercount |
47
|
|
|
self.currenthash = currenthash |
48
|
|
|
self.controllertemp = controllertemp |
49
|
|
|
self.tempboard1 = tempboard1 |
50
|
|
|
self.tempboard2 = tempboard2 |
51
|
|
|
self.tempboard3 = tempboard3 |
52
|
|
|
#elapsed time in seconds |
53
|
|
|
self.elapsed = elapsed |
54
|
|
|
self.fan1 = fan1 |
55
|
|
|
self.fan2 = fan2 |
56
|
|
|
self.fan3 = fan3 |
57
|
|
|
self.boardstatus1 = boardstatus1 |
58
|
|
|
self.boardstatus2 = boardstatus2 |
59
|
|
|
self.boardstatus3 = boardstatus3 |
60
|
|
|
self.frequency = frequency |
61
|
|
|
self.hardware_errors = hardware_errors |
62
|
|
|
self.hash_avg = hash_avg |
63
|
|
|
self.rawstats = rawstats |
64
|
|
|
|
65
|
|
|
@property |
66
|
|
|
def hardware_errors_per_second(self): |
67
|
|
|
if self.elapsed == 0: |
68
|
|
|
return None |
69
|
|
|
return self.hardware_errors/self.elapsed |
70
|
|
|
|
71
|
|
|
@property |
72
|
|
|
def hardware_errors_per_minute(self): |
73
|
|
|
if self.elapsed == 0: |
74
|
|
|
return None |
75
|
|
|
seconds_per_minute = 60 |
76
|
|
|
if self.elapsed < seconds_per_minute: |
77
|
|
|
return None |
78
|
|
|
minutes = self.elapsed / seconds_per_minute |
79
|
|
|
return self.hardware_errors/minutes |
80
|
|
|
|
81
|
|
|
@property |
82
|
|
|
def hardware_errors_per_hour(self): |
83
|
|
|
if self.elapsed == 0: |
84
|
|
|
return None |
85
|
|
|
seconds_per_hour = 60 * 60 |
86
|
|
|
if self.elapsed < seconds_per_hour: |
87
|
|
|
return None |
88
|
|
|
hours = self.elapsed / seconds_per_hour |
89
|
|
|
return self.hardware_errors/hours |
90
|
|
|
|
91
|
|
|
@property |
92
|
|
|
def hardware_errors_per_day(self): |
93
|
|
|
if self.elapsed == 0: |
94
|
|
|
return None |
95
|
|
|
seconds_per_day = 60 * 60 * 24 |
96
|
|
|
if self.elapsed < seconds_per_day: |
97
|
|
|
return None |
98
|
|
|
day = self.elapsed / seconds_per_day |
99
|
|
|
return self.hardware_errors/day |
100
|
|
|
|
101
|
|
|
def tempboardmax(self): |
102
|
|
|
return max(self.tempboard1, self.tempboard2, self.tempboard3) |
103
|
|
|
|
104
|
|
|
def format_elapsed(self): |
105
|
|
|
seconds = self.elapsed |
106
|
|
|
numdays = seconds // 86400 |
107
|
|
|
numhours = (seconds % 86400) // 3600 |
108
|
|
|
numminutes = ((seconds % 86400) % 3600) // 60 |
109
|
|
|
numseconds = ((seconds % 86400) % 3600) % 60 |
110
|
|
|
return '{0}:{1}:{2}:{3}'.format(numdays, numhours, numminutes, numseconds) |
111
|
|
|
|
112
|
|
|
def stats_summary(self): |
113
|
|
|
return '{0} {1}/{2} {3}'.format(self.currenthash, self.controllertemp, self.tempboardmax(), self.format_elapsed()) |
114
|
|
|
|