3
3
4
4
import time
5
5
import os
6
+ import sys
6
7
import socket
7
8
8
9
from stratum import settings
12
13
if __name__ == '__main__' :
13
14
if len (settings .WALLET )!= 42 and len (settings .WALLET )!= 40 :
14
15
log .error ("Wrong WALLET!" )
15
- quit ()
16
+ sys . exit ()
16
17
settings .CUSTOM_EMAIL = settings .MONITORING_EMAIL if settings .MONITORING_EMAIL and settings .MONITORING else ""
17
18
18
19
from twisted .internet import reactor , defer , protocol
26
27
from mining_libs import client_service
27
28
from mining_libs import jobs
28
29
from mining_libs import version
29
- from mining_libs .jobs import Job
30
30
31
31
def on_shutdown (f ):
32
32
'''Clean environment properly'''
@@ -42,7 +42,10 @@ def ping(f):
42
42
return
43
43
try :
44
44
yield (f .rpc ('eth_getWork' , [], '' ))
45
- reactor .callLater (60 , ping , f )
45
+ if f .is_failover :
46
+ reactor .callLater (30 , ping , f )
47
+ else :
48
+ reactor .callLater (5 , ping , f )
46
49
except Exception :
47
50
pass
48
51
@@ -53,18 +56,18 @@ def on_connect(f):
53
56
f .is_connected = True
54
57
f .remote_ip = f .client ._get_ip ()
55
58
#reactor.callLater(30, f.client.transport.loseConnection)
56
-
59
+
57
60
# Hook to on_connect again
58
61
f .on_connect .addCallback (on_connect )
59
-
62
+
60
63
# Get first job and user_id
61
64
debug = "_debug" if settings .DEBUG else ""
62
65
initial_job = (yield f .rpc ('eth_submitLogin' , [settings .WALLET , settings .CUSTOM_EMAIL ], 'Proxy_' + version .VERSION + debug ))
63
66
64
67
reactor .callLater (0 , ping , f )
65
68
66
69
defer .returnValue (f )
67
-
70
+
68
71
def on_disconnect (f ):
69
72
'''Callback when proxy get disconnected from the pool'''
70
73
log .info ("Disconnected from Stratum pool at %s:%d" % f .main_host )
@@ -82,28 +85,52 @@ def main():
82
85
f = SocketTransportClientFactory (settings .POOL_HOST , settings .POOL_PORT ,
83
86
debug = settings .DEBUG , proxy = None ,
84
87
event_handler = client_service .ClientMiningService )
85
- f .is_failover = False
86
88
87
- ff = None
89
+ f1 = None
90
+ f2 = None
91
+ f3 = None
88
92
if settings .POOL_FAILOVER_ENABLE :
89
- log .warning ("Trying to connect to failover Stratum pool at %s:%d" % (settings .POOL_HOST_FAILOVER , settings .POOL_PORT_FAILOVER ))
90
- ff = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER , settings .POOL_PORT_FAILOVER ,
93
+ log .warning ("Trying to connect to failover Stratum pool-1 at %s:%d" % (settings .POOL_HOST_FAILOVER1 , settings .POOL_PORT_FAILOVER1 ))
94
+ f1 = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER1 , settings .POOL_PORT_FAILOVER1 ,
91
95
debug = settings .DEBUG , proxy = None ,
92
96
event_handler = client_service .ClientMiningService )
93
- ff .is_failover = True
97
+ f1 .is_failover = True
94
98
95
- job_registry = jobs .JobRegistry (f ,ff )
99
+ log .warning ("Trying to connect to failover Stratum pool-2 at %s:%d" % (settings .POOL_HOST_FAILOVER2 , settings .POOL_PORT_FAILOVER2 ))
100
+ f2 = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER2 , settings .POOL_PORT_FAILOVER2 ,
101
+ debug = settings .DEBUG , proxy = None ,
102
+ event_handler = client_service .ClientMiningService )
103
+ f2 .is_failover = True
104
+
105
+ log .warning ("Trying to connect to failover Stratum pool-3 at %s:%d" % (settings .POOL_HOST_FAILOVER3 , settings .POOL_PORT_FAILOVER3 ))
106
+ f3 = SocketTransportClientFactory (settings .POOL_HOST_FAILOVER3 , settings .POOL_PORT_FAILOVER3 ,
107
+ debug = settings .DEBUG , proxy = None ,
108
+ event_handler = client_service .ClientMiningService )
109
+ f3 .is_failover = True
110
+
111
+ job_registry = jobs .JobRegistry (f ,f1 ,f2 ,f3 )
96
112
client_service .ClientMiningService .job_registry = job_registry
97
113
client_service .ClientMiningService .reset_timeout ()
98
114
99
115
f .on_connect .addCallback (on_connect )
100
116
f .on_disconnect .addCallback (on_disconnect )
101
117
# Cleanup properly on shutdown
102
118
reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f )
103
- if ff :
104
- ff .on_connect .addCallback (on_connect )
105
- ff .on_disconnect .addCallback (on_disconnect )
106
- reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , ff )
119
+ if f1 :
120
+ f1 .on_connect .addCallback (on_connect )
121
+ f1 .on_disconnect .addCallback (on_disconnect )
122
+ reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f1 )
123
+
124
+ if f2 :
125
+ f2 .on_connect .addCallback (on_connect )
126
+ f2 .on_disconnect .addCallback (on_disconnect )
127
+ reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f2 )
128
+
129
+ if f3 :
130
+ f3 .on_connect .addCallback (on_connect )
131
+ f3 .on_disconnect .addCallback (on_disconnect )
132
+ reactor .addSystemEventTrigger ('before' , 'shutdown' , on_shutdown , f3 )
133
+
107
134
108
135
# Block until proxy connect to the pool
109
136
try :
@@ -112,6 +139,7 @@ def main():
112
139
log .warning ("First pool server must be online first time during start" )
113
140
return
114
141
142
+
115
143
conn = reactor .listenTCP (settings .PORT , Site (getwork_listener .Root (job_registry , settings .ENABLE_WORKER_ID )), interface = settings .HOST )
116
144
117
145
try :
0 commit comments