Beispiel #1
0
 def test_miner_no_update(self):
     miner = Miner('test')
     miner.ipaddress = 'ip1'
     minerupdate = Miner('test')
     minerupdate.ipaddress = None
     miner.updatefrom(minerupdate)
     self.assertTrue(miner.ipaddress != minerupdate.ipaddress)
Beispiel #2
0
 def test_miner_update_port(self):
     miner = Miner('test')
     miner.port = 'port1'
     minerupdate = Miner('test')
     minerupdate.port = 'port2'
     miner.updatefrom(minerupdate)
     self.assertTrue(miner.port == minerupdate.port)
Beispiel #3
0
 def test_miner_can_monitor(self):
     miner = Miner("test", '', '', '', '', '', '', '', '')
     self.assertFalse(miner.can_monitor())
     miner.ipaddress = '123.123.123.123'
     self.assertFalse(miner.can_monitor())
     miner.port = '4028'
     self.assertTrue(miner.can_monitor())
Beispiel #4
0
    def test_miner_status_no_you_cant(self):
        miner = Miner('test')

        def set_status_test():
            miner.status = 'you can be anyting'

        self.assertRaises(ValueError, set_status_test)
Beispiel #5
0
 def make_minermessage(self, data):
     '''reconstitute a minermessage'''
     miner = None
     command = None
     minerstats = None
     minerpool = None
     if 'miner' in data:
         #miner comes in as dict instead of entity when there is an error in the schema
         if isinstance(data['miner'], Miner):
             miner = data['miner']
         else:
             miner = Miner(**data['miner'])
     if 'command' in data:
         if isinstance(data['command'], MinerCommand):
             command = data['command']
         else:
             command = MinerCommand(**data['command'])
     if 'minerstats' in data:
         #minerstats = MinerStatistics(Miner=miner,**data['minerstats'])
         minerstats = data['minerstats']
     if 'minerpool' in data:
         #minerpool = MinerCurrentPool(Miner=miner, **data['minerpool'])
         minerpool = data['minerpool']
     entity = MinerMessage(miner, command, minerstats, minerpool)
     return entity
    def test_minerserialization(self):
        sch = MinerSchema()
        miner = Miner('test')
        miner.status = MinerStatus.Offline
        miner.status = MinerStatus.Online
        miner.minerinfo = MinerInfo('Antminer S9', '123')
        miner.minerpool = MinerCurrentPool(miner,
                                           'test pool',
                                           'test worker',
                                           allpools={})
        miner.minerpool.poolname = 'unittest'
        miner.minerstats = MinerStatistics(miner, datetime.datetime.utcnow(),
                                           0, 1, 0, 99, 98, 97, 123, '', '',
                                           '')
        miner.minerstats.boardstatus1 = 'o'
        miner.minerstats.boardstatus2 = 'oo'
        miner.minerstats.boardstatus3 = 'ooo'
        jminer = sch.dumps(miner).data

        #rehydrate miner
        reminer = MinerSchema().loads(jminer).data
        self.assertTrue(isinstance(reminer.minerinfo, MinerInfo))
        self.assertTrue(isinstance(reminer.minerpool, MinerCurrentPool))
        self.assertTrue(reminer.minerpool.poolname == 'unittest')
        self.assertTrue(isinstance(reminer.minerstats, MinerStatistics))
        self.assertTrue(reminer.laststatuschanged)
        self.assertTrue(reminer.minerstats.boardstatus1 == 'o')
        self.assertTrue(reminer.minerstats.boardstatus2 == 'oo')
        self.assertTrue(reminer.minerstats.boardstatus3 == 'ooo')
Beispiel #7
0
 def readminers(self, file_name):
     with open(file_name, encoding='utf-8-sig') as config_file:
         jsonarray = json.loads(config_file.read())
     miners = [Miner(**k) for k in jsonarray]
     #TODO: Remove disabled miners
     #if miner.name.startswith("#"):
     return miners
Beispiel #8
0
    def setUp(self):
        '''create test miner'''
        self.minerinfo = MinerInfo('Antminer S9', '')
        self.miner = Miner('Test',
                           'Online',
                           'Antminer S9',
                           '',
                           '',
                           '',
                           '',
                           '',
                           '',
                           '',
                           lastmonitor=None,
                           offlinecount=0,
                           defaultpool='',
                           minerinfo=self.minerinfo)

        self.minerstats = MinerStatistics(self.miner,
                                          datetime.datetime.utcnow(),
                                          3,
                                          currenthash=9999,
                                          controllertemp=0,
                                          tempboard1=0,
                                          tempboard2=0,
                                          tempboard3=0)
Beispiel #9
0
 def test_miner_status_change_keeps_original(self):
     miner = Miner('test')
     miner.status = MinerStatus.Offline
     self.assertTrue(miner.laststatuschanged)
     originalstatuschangetime = miner.laststatuschanged
     miner.status = MinerStatus.Offline
     self.assertTrue(miner.laststatuschanged == originalstatuschangetime)
Beispiel #10
0
 def test_miner_monitored_timer(self):
     miner = Miner('test')
     stats = domain.minerstatistics.MinerStatistics(miner)
     apicall = MinerApiCall(miner)
     apicall.start()
     apicall.stop()
     miner.monitored(stats, pool=None, info=None, sec=apicall.elapsed())
     self.assertFalse(miner.lastmonitor is None)
Beispiel #11
0
 def test_miner_monitored_pool(self):
     miner = Miner('test')
     stats = domain.minerstatistics.MinerStatistics(miner)
     miner.monitored(stats,
                     pool=MinerCurrentPool(miner),
                     info=None,
                     sec=None)
     self.assertTrue(miner.minerpool)
Beispiel #12
0
 def test_miner_summary(self):
     miner = Miner("test", '', '', '', '', '', '', '', '')
     self.assertTrue(miner.summary() is not None)
     miner.status = MinerStatus.Online
     self.assertTrue(miner.summary() is not None)
     miner.minerstats = None
     self.assertTrue(miner.summary() is not None)
     miner.minerstats = domain.minerstatistics.MinerStatistics(miner)
     self.assertTrue(miner.summary() is not None)
Beispiel #13
0
 def test_miner_update(self):
     miner = Miner('test')
     miner.minerid = 'test'
     miner.ipaddress = 'ip1'
     miner.location = 'location1'
     miner.in_service_date = datetime.datetime.now().replace(second=0,
                                                             microsecond=0)
     minerupdate = Miner('test1')
     minerupdate.minerid = 'test1'
     minerupdate.ipaddress = 'ip2'
     minerupdate.location = 'location2'
     minerupdate.in_service_date = datetime.datetime.now()
     miner.updatefrom(minerupdate)
     self.assertFalse(miner.ipaddress == minerupdate.ipaddress)
     minerupdate.minerid = miner.minerid
     miner.updatefrom(minerupdate)
     self.assertTrue(miner.ipaddress == minerupdate.ipaddress)
     self.assertTrue(miner.location == minerupdate.location)
     self.assertTrue(miner.in_service_date == minerupdate.in_service_date)
Beispiel #14
0
 def test_miner_should_monitor(self):
     miner = Miner("#test", '', '', '', '', '', '', '', '')
     self.assertTrue(miner.should_monitor())
     miner.monitored(domain.minerstatistics.MinerStatistics(miner), None,
                     None, None)
     self.assertFalse(miner.should_monitor())
     miner.name = "test"
     self.assertTrue(miner.should_monitor())
     miner.status = MinerStatus.Disabled
     self.assertTrue(miner.should_monitor())
Beispiel #15
0
 def test_miner_currentpoolname(self):
     miner = Miner('test')
     self.assertTrue(miner.currentpoolname() == '?')
     miner.minerpool = MinerCurrentPool(miner,
                                        'test pool',
                                        'test worker',
                                        allpools={},
                                        poolname='unit test')
     self.assertTrue(miner.currentpoolname() == 'unit test')
     self.assertFalse(
         miner.minerpool.findpoolnumberforpool('test pool', 'test worker'))
Beispiel #16
0
def findminerbyname(minertofind):
    miners = MinerRepository()
    miner = miners.getminerbyname(minertofind, APP.getconfigfilename('config/miners.conf'))
    if miner is None:
        miner = APP.getknownminerbyname(minertofind)
    if miner is None:
        miner = APP.getminer(Miner(name=minertofind))
    if miner is None:
        print('Miner {0} does not exist'.format(minertofind))
        sys.exit(1)
    return miner
Beispiel #17
0
def main():
    '''main'''
    if COMPONENTDISCOVERED.app.isrunnow:
        miner = Miner('192.168.1.117')
        dodiscovered(miner)
        COMPONENTDISCOVERED.app.shutdown()
    else:
        print('Waiting for messages on {0}. To exit press CTRL+C'.format(QueueName.Q_DISCOVERED))
        COMPONENTDISCOVERED.listeningqueue = COMPONENTDISCOVERED.app.makequeue(QueueName.Q_DISCOVERED)
        COMPONENTDISCOVERED.listeningqueue.subscribe(when_discovered, no_acknowledge=False)
        COMPONENTDISCOVERED.app.listen(COMPONENTDISCOVERED.listeningqueue)
Beispiel #18
0
 def test_miner_reset_offline_count(self):
     miner = Miner('test')
     self.assertTrue(miner.offlinecount == 0)
     self.assertTrue(miner.is_send_offline_alert())
     miner.offline_now()
     miner.offline_now()
     miner.offline_now()
     miner.offline_now()
     self.assertFalse(miner.is_send_offline_alert())
     miner.online_now()
     self.assertTrue(miner.offlinecount == 0)
     self.assertTrue(miner.is_send_offline_alert())
Beispiel #19
0
 def test_miner_pools_available(self):
     miner = Miner('test')
     self.assertTrue(miner.pools_available is None)
     miner.minerpool = MinerCurrentPool(miner,
                                        'test pool',
                                        'test worker',
                                        allpools={})
     self.assertTrue(len(miner.pools_available) == 0)
     miner.minerpool.allpools = {
         "POOLS": [{
             "Pool Stale%": 0,
             "Accepted": 421743,
             "Difficulty Stale": 0,
             "Stratum URL": "test",
             "Rejected": 85,
             "Difficulty Accepted": 6587318272,
             "Best Share": 4019408192,
             "User": "******",
             "Stratum Active": True,
             "Difficulty Rejected": 1343488,
             "Diff": "16.4K",
             "Remote Failures": 3,
             "Discarded": 1094132,
             "Long Poll": "N",
             "Proxy": "",
             "Priority": 0,
             "Has GBT": False,
             "Pool Rejected%": 0.0204,
             "Stale": 63,
             "Last Share Difficulty": 16384,
             "Diff1 Shares": 0,
             "Has Stratum": True,
             "Status": "Alive",
             "URL": "test",
             "Quota": 1,
             "Last Share Time": "0:00:05",
             "Getworks": 70163,
             "Get Failures": 3,
             "POOL": 3,
             "Proxy Type": ""
         }]
     }
     self.assertTrue(len(miner.pools_available) > 0)
     self.assertTrue(miner.minerpool.findpoolnumberforpool('test', 'test'))
     self.assertFalse(miner.minerpool.findpoolnumberforpool('not', 'found'))
Beispiel #20
0
def doit(args):
    if len(args) < 2:
        print('usage: python runcommand.py nameofcommand [nameofminer] [commandparameter]')
        APP.shutdown(1)

    cmd = args[1]
    if len(args) == 2:
        #single command, no miner specified
        queue_command = Queue(cmd, APP.getservice('rabbit'))
        queue_command.publish('{0} runcommand called on {1}'.format(APP.now(), cmd))
        queue_command.close()
        print('sent command {0}'.format(cmd))
    else:
        minertofind = args[2]
        cmdparam = ''
        if len(args) > 3:
            cmdparam = args[3]
        miners = MinerRepository()
        miner = miners.getminerbyname(minertofind, APP.getconfigfilename('config/miners.conf'))
        if miner is None:
            miner = APP.getknownminerbyname(minertofind)
        if miner is None:
            miner = APP.getminer(Miner(name=minertofind))
        if miner is None:
            print('Miner {0} does not exist'.format(minertofind))
            sys.exit(1)
        qnames = QueueName()
        if not qnames.isvalidqname(cmd):
            print('Queue {0} is not valid'.format(cmd))
            sys.exit(1)
        queue_command = Queue(cmd, APP.getservice('rabbit'))
        #TODO: cleanup logic here. when to call app and when to override with just miner and command
        if cmd:
            qmess = MinerCommand(cmd, cmdparam)
            msg = APP.createmessagecommand(miner, qmess)
            queue_command.publish(msg)
        else:
            queue_command.publish(APP.messageencode(miner))
        queue_command.close()
        print('sent command {0} for miner {1}'.format(cmd, miner.name))
Beispiel #21
0
def dosave(msg):
    entries = QueueEntries()
    if msg.entity == 'miner':
        #add or update miner
        minerid = name = ipaddress = port = None
        for pair in msg.values:
            if 'minerid' in pair:
                minerid = pair['minerid']
            if 'name' in pair:
                name = pair['name']
            if 'ipaddress' in pair:
                ipaddress = pair['ipaddress']
            if 'port' in pair:
                port = pair['port']
        miner = Miner(name, '', '', ipaddress, port, '', '')
        COMPONENTSAVE.app.save_miner(miner)
        entries.add(QueueName.Q_MONITORMINER,
                    COMPONENTSAVE.app.messageencode(miner))
        entries.add(QueueName.Q_PROVISION,
                    COMPONENTSAVE.app.messageencode(miner))

    if msg.entity == 'pool':
        #save the new named pool
        pool_type = name = url = user = priority = None
        for pair in msg.values:
            if 'pool_type' in pair:
                pool_type = pair['pool_type']
            if 'name' in pair:
                name = pair['name']
            if 'url' in pair:
                url = pair['url']
            if 'user' in pair:
                user = pair['user']
            if 'priority' in pair:
                priority = pair['priority']
        pool = Pool(pool_type, name, url, user, priority)
        COMPONENTSAVE.app.save_pool(pool)
    return entries
Beispiel #22
0
'''Test saving application data'''
'''
    Requires services to be running.
    Redis
'''

from domain.mining import Miner
from backend.fcmapp import ApplicationService, ComponentName

APP = ApplicationService(ComponentName.fullcycle)

KNOWN = APP.allminers()
CNT = len(KNOWN)

MINER = Miner('New Miner2', '', '', '192.168.1.2', '4028', '', '')
APP.save_miner(MINER)

KNOWN2 = APP.allminers()

CNT2 = len(KNOWN2)
print(CNT2)

APP.save_miner(MINER)

KNOWN3 = APP.allminers()

CNT3 = len(KNOWN3)
print(CNT3)
Beispiel #23
0
 def make(self, data):
     return Miner(**data)
Beispiel #24
0
 def make_miner(self) -> Miner:
     miner = Miner("unittest", None, "", "unitip", "unitport", "", "")
     miner.customerid = 1
     return miner
Beispiel #25
0
 def test_miner_is_not_disabled(self):
     miner = Miner("test", '', '', '', '', '', '', '', '')
     self.assertFalse(miner.is_disabled())
Beispiel #26
0
 def test_miner_status_set_last_update(self):
     miner = Miner('test')
     self.assertTrue(not miner.laststatuschanged)
     miner.status = MinerStatus.Offline
     self.assertTrue(miner.laststatuschanged)
Beispiel #27
0
 def test_miner_uses_default(self):
     miner = Miner('test')
     miner.ftpport = ''
     miner.set_ftp_port('22')
     self.assertTrue(miner.ftpport == '22')
Beispiel #28
0
 def test_miner_uses_custom(self):
     miner = Miner('test')
     miner.ftpport = '99'
     miner.set_ftp_port('22')
     self.assertTrue(miner.ftpport == '99')
Beispiel #29
0
 def test_miner_format_time_with_fraction(self):
     miner = Miner('test')
     miner.lastmonitor = '2018-04-11T01:28:45.3821739+00:00'
     self.assertTrue(miner.formattime(miner.lastmonitor))
Beispiel #30
0
 def test_miner_format_time_string(self):
     miner = Miner('test')
     miner.lastmonitor = '2018-04-11T01:28:45+00:00'
     self.assertTrue(miner.formattime(miner.lastmonitor))