def __init__(self, config): self.config = config self.cgminer = CgminerAPI(config['cgminer']['host'], config['cgminer']['port']) self.coinwarz = CoinwarzAPI(config['coinwarz']) self.cryptsy = CryptsyAPI(config['cryptsy']) self.hashrate = self.config['hashrate']
class CPC(object): def __init__(self, config): self.config = config self.cgminer = CgminerAPI(config['cgminer']['host'], config['cgminer']['port']) self.coinwarz = CoinwarzAPI(config['coinwarz']) self.cryptsy = CryptsyAPI(config['cryptsy']) self.hashrate = self.config['hashrate'] def restart_cgminer(self): logger.info('Restarting CGMiner...') try: self.cgminer.restart() except ValueError: pass while True: try: self.cgminer.version() except socket.error: time.sleep(1) else: break logger.info('CGMiner restarted') def cgminer_pools(self): pools = [] for pool in self.cgminer.pools()['POOLS']: currency = self.config['pool_currency'].get(pool['URL']) if pool['Status'] != 'Alive': logger.warning('Pool %s status is %s', pool['URL'], pool['Status']) if not currency: logger.error('Unknown currency for pool %s', pool['URL']) continue pool['Currency'] = currency pools.append(pool) return pools def get_currencies(self): currencies = {} btc_price = None price_data = self.cryptsy.get_data()['return']['markets'] difficulty_data = self.coinwarz.get_data()['Data'] for label, currency_price_data in price_data.items(): if currency_price_data['secondarycode'] != 'BTC': continue currency_data = currencies[currency_price_data['primarycode']] = {} currency_data['id'] = currency_price_data['primarycode'] currency_data['name'] = currency_price_data['primaryname'] currency_data['price'] = float(currency_price_data['lasttradeprice']) currency_data['exchange_volume'] = float(currency_price_data['volume']) for currency_difficulty_data in difficulty_data: currency = currency_difficulty_data['CoinTag'] if currency == 'BTC': btc_price = currency_difficulty_data['ExchangeRate'] continue if currency not in currencies: continue currency_data = currencies[currency] currency_data['profit_growth'] = currency_difficulty_data['ProfitRatio'] / currency_difficulty_data['AvgProfitRatio'] currency_data['difficulty'] = currency_difficulty_data['Difficulty'] currency_data['block_reward'] = currency_difficulty_data['BlockReward'] currency_data['coins_per_day'] = 86400 * self.hashrate * currency_data['block_reward'] / (currency_data['difficulty'] * 2 ** 32) currencies = {k: v for k, v in currencies.iteritems() if 'coins_per_day' in v} for currency_data in currencies.values(): currency_data['usd_per_day'] = currency_data['coins_per_day'] * currency_data['price'] * btc_price currency_data['rating'] = RatingCalculator.rate_currency(currency_data) return currencies