backend.when_offline.main()   A
last analyzed

Complexity

Conditions 1

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nop 0
dl 0
loc 3
rs 10
c 0
b 0
f 0
1
'''#what to do when miner is offline?
2
#maybe send alert?
3
#maybe disable the miner after a while?
4
'''
5
from helpers.queuehelper import QueueName, QueueEntries
6
from domain import mining
7
from backend.fcmapp import Component
8
9
OFFLINE = Component('offline')
10
11
def when_offline(channel, method, properties, body):
12
    '''when miner goes offline'''
13
    print("[{0}] Received miner offline message".format(OFFLINE.app.now()))
14
    try:
15
        entries = dooffline(OFFLINE.app.messagedecodeminer(body))
16
        OFFLINE.app.enqueue(entries)
17
    except Exception as ex:
18
        OFFLINE.app.logexception(ex)
19
20
def dooffline(miner: mining.Miner):
21
    '''notify user'''
22
    entries = QueueEntries()
23
    savedminer = OFFLINE.app.getminer(miner)
24
    if not savedminer.is_disabled():
25
        if savedminer.is_send_offline_alert():
26
            #update status to offline and alert
27
            savedminer.status = mining.MinerStatus.Offline
28
            alertmsg = OFFLINE.app.stamp('miner {0} is offline! since {1}'.format(savedminer.name, savedminer.laststatuschanged))
29
            OFFLINE.app.putminer(savedminer)
30
            entries.addalert(alertmsg)
31
            print("Sent offline alert '{0}'".format(alertmsg))
32
        else:
33
            #stop annoying the user, disable the miner to stop sending alerts
34
            savedminer.status = mining.MinerStatus.Disabled
35
            alertmsg = OFFLINE.app.stamp('miner {0} is Disabled after many offline alerts. No more alerts will be sent for this miner.'.format(savedminer.name))
36
            OFFLINE.app.putminer(savedminer)
37
            entries.addalert(alertmsg)
38
            print("Sent disabled alert for {0}".format(savedminer.name))
39
    else:
40
        if not savedminer.is_manually_disabled():
41
            print('Disabled miner {0} is offline. manually disable miner to get rid of this message'.format(miner.name))
42
43
    return entries
44
45
def main():
46
    OFFLINE.listeningqueue = OFFLINE.app.subscribe(QueueName.Q_OFFLINE, when_offline)
47
    OFFLINE.listen()
48
49
if __name__ == "__main__":
50
    main()
51