Passed
Push — master ( 964ae0...fcc2df )
by Dave
58s
created

domain.minerstatistics.MinerStatistics.__init__()   A

Complexity

Conditions 1

Size

Total Lines 27
Code Lines 26

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 26
nop 20
dl 0
loc 27
rs 9.256
c 0
b 0
f 0

How to fix   Many Parameters   

Many Parameters

Methods with many parameters are not only hard to understand, but their parameters also often become inconsistent when you need more, or different data.

There are several approaches to avoid long parameter lists:

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