1
|
|
|
'''Repositories''' |
2
|
|
|
import json |
3
|
|
|
import domain.mining |
4
|
|
|
import domain.miningrules |
5
|
|
|
|
6
|
|
|
class BaseRepository(object): |
7
|
|
|
def readrawfile(self, file_name): |
8
|
|
|
with open(file_name, encoding='utf-8-sig') as config_file: |
9
|
|
|
raw = config_file.read() |
10
|
|
|
return raw |
11
|
|
|
|
12
|
|
|
|
13
|
|
|
class MinerRepository(BaseRepository): |
14
|
|
|
def readminers(self, file_name): |
15
|
|
|
'''read miners''' |
16
|
|
|
raw = self.readrawfile(file_name) |
17
|
|
|
miners = [domain.mining.Miner(**k) for k in json.loads(raw)] |
18
|
|
|
#TODO: Remove disabled miners |
19
|
|
|
#if miner.name.startswith("#"): |
20
|
|
|
return miners |
21
|
|
|
|
22
|
|
|
def getminerbyname(self, minername, file_name): |
23
|
|
|
'''get miner by name''' |
24
|
|
|
miners = self.readminers(file_name) |
25
|
|
|
for miner in miners: |
26
|
|
|
if miner.name == minername: |
27
|
|
|
return miner |
28
|
|
|
return None |
29
|
|
|
|
30
|
|
|
class PoolRepository(BaseRepository): |
31
|
|
|
def readpools(self, file_name): |
32
|
|
|
raw = self.readrawfile(file_name) |
33
|
|
|
poollist = [domain.mining.Pool(**k) for k in json.loads(raw)] |
34
|
|
|
#TODO:Remove disabled pools |
35
|
|
|
return poollist |
36
|
|
|
|
37
|
|
|
def add(self, pool, file_name, sch): |
38
|
|
|
pools = self.readpools(file_name) |
39
|
|
|
if not any(x.name == pool.name for x in pools): |
40
|
|
|
pools.append(pool) |
41
|
|
|
|
42
|
|
|
jsonpools = [sch.dump(k).data for k in pools] |
43
|
|
|
with open(file_name, 'w') as file: |
44
|
|
|
json.dump(jsonpools, file, sort_keys=True, indent=4, ensure_ascii=False) |
45
|
|
|
|
46
|
|
|
|
47
|
|
|
class LoginRepository(object): |
48
|
|
|
'''login repository''' |
49
|
|
|
def readlogins(self, file_name): |
50
|
|
|
'''get entity from config''' |
51
|
|
|
with open(file_name, encoding='utf-8-sig') as config_file: |
52
|
|
|
jlogin = json.loads(config_file.read()) |
53
|
|
|
login = domain.mining.Login(jlogin['username'], jlogin['password']) |
54
|
|
|
return login |
55
|
|
|
|
56
|
|
|
def getsshlogin(self, miner): |
57
|
|
|
'''TODO: make login per miner''' |
58
|
|
|
return self.readlogins('config/ftp.conf') |
59
|
|
|
|
60
|
|
|
class RuleParametersRepository(BaseRepository): |
61
|
|
|
def readrules(self, file_name): |
62
|
|
|
raw = self.readrawfile(file_name) |
63
|
|
|
ruleslist = [domain.miningrules.RuleParameters(**k) for k in json.loads(raw)] |
64
|
|
|
return ruleslist |
65
|
|
|
|