Exemple #1
0
def main():
    if not is_running():
        jlog.info('{}'.format('Starting bot'))
        writePidFile()
        main()

        #dev1_t = threading.Thread(target=dev1, args=(), name='dev1')
        #dev1_t.start()

        trxs_t = threading.Thread(target=trxs, args=(), name='trxs')
        trxs_t.start()
Exemple #2
0
def add_db(col, slug=False, tag=False, data=False, owner=False, block=False):
    d = {}
    d['created_at'] = datetime.now()
    d['slug'] = slug
    d['tag'] = tag
    d['owner'] = owner
    d['block'] = block
    d['data'] = data
    try:
        ref = db[col].insert_one(d)
    except:
        jlog.critical("{} {}".format(tag, sys.exc_info()))

    jlog.info("col:{} tag:{}".format(col, tag))
Exemple #3
0
def main():
    if not is_running():
        jlog.info('{}'.format('Starting bot'))
        writePidFile()
        main()

        producers_fast_thread = threading.Thread(target=producers_fast,
                                                 args=(),
                                                 name='producers_fast')
        producers_fast_thread.start()

        producers_slow_thread = threading.Thread(target=producers_slow,
                                                 args=(),
                                                 name='producers_slow')
        producers_slow_thread.start()

        pruning_thread = threading.Thread(target=pruning,
                                          args=(),
                                          name='pruning')
        pruning_thread.start()

        trxs5_thread = threading.Thread(target=trxs, args=[5], name='trxs')
        trxs5_thread.start()

        trxs300_thread = threading.Thread(target=trxs, args=[300], name='trxs')
        trxs300_thread.start()

        trxs3600 = threading.Thread(target=trxs, args=[3600], name='trxs')
        trxs3600.start()

        trxs86400 = threading.Thread(target=trxs, args=[86400], name='trxs')
        trxs86400.start()

        cpu_usage_us_thread = threading.Thread(target=cpu_usage_us,
                                               args=(),
                                               name='cpu_usage_us')
        cpu_usage_us_thread.start()

        transactions_thread = threading.Thread(target=transactions,
                                               args=(),
                                               name='transactions')
        transactions_thread.start()

        #notify_thread = threading.Thread(target=notify, args=(), name='notify')
        #notify_thread.start()
    else:
        jlog.info("allready running".format())
Exemple #4
0
def transactions(slaap=2):
    while True:
        last = db.transactions.find_one({"tag": 'transactions'}, {
            "_id": 0,
            "created_at": 0
        },
                                        sort=([('created_at',
                                                pymongo.DESCENDING)]))
        i = remcli_get_info()
        if i and 'head_block_num' in i:
            stop = i['head_block_num']

        if last and 'block' in last:
            start = last['block'] + 1
        else:
            start = i['head_block_num'] - 10

        blocks = []
        for block in range(start, stop):
            blocks.append(get_block(block))
        for b in blocks:
            if b['transactions']:
                for t in b['transactions']:
                    try:
                        for action in t['trx']['transaction']['actions']:
                            print('x0', action)
                            d = {}
                            d['account'] = action['account']
                            d['id'] = b['id']
                            d['producer'] = b['producer']
                            d['block_num'] = b['block_num']
                            d['timestamp'] = parse(b['timestamp'])
                            d['cpu_usage_us'] = t['cpu_usage_us']
                            add_db(col='transactions',
                                   slug='transactions',
                                   tag='transactions',
                                   data=d,
                                   owner=False,
                                   block=b['block_num'])
                    except:
                        jlog.critical("{}".format(sys.exc_info()))

        jlog.info('Transacions sleeping for: {} seconds'.format(slaap))
        sleep(slaap)
Exemple #5
0
def trxs(slaap=2):
    while True:
        last = db.trxs.find_one( { "tag": 'trxs' },
                                 { "_id": 0, "created_at": 0 },sort=([('created_at', pymongo.DESCENDING)]))
        i = remcli_get_info()
        if i and 'head_block_num' in i:
           stop = i['head_block_num']
        if last and 'block' in last:
            start = last['block'] + 1
        else:
            start = i['head_block_num'] - 10
        blocks = []
        for block in range(start, stop):
            blocks.append(get_block(block))
        for b in blocks:
            if b['transactions'] and isinstance(b['transactions'], list):
                add_db(col='trxs', slug='trxs', tag='trxs', data=b, owner=b['producer'], block=b['block_num'])
        jlog.info('trxs sleeping for: {} seconds'.format(slaap))
        sleep(slaap)
Exemple #6
0
def pruning(slaap=3600):
    while True:
        dt = (datetime.now() - timedelta(days=1))
        trxs = db.trxs.find(
            {"$and": [{
                "created_at": {
                    "$lt": dt
                }
            }, {
                "tag": 5
            }]})

        for trx in trxs:
            _id = trx['_id']
            p = db.trxs.remove({"_id": _id})
            jlog.info('pruning {} {}'.format(_id, p))

        transactions = db.transactions.find(
            {"$and": [{
                "created_at": {
                    "$lt": dt
                }
            }, {
                "tag": 'transactions'
            }]})

        for transaction in transactions:
            _id = transaction['_id']
            p = db.transactions.remove({"_id": _id})
            jlog.info('pruning {} {}'.format(_id, p))

        jlog.info('Pruning sleeping for: {} seconds'.format(slaap))
        sleep(slaap)
Exemple #7
0
def trxs(slaap):
    while True:
        dt = (datetime.now() - timedelta(seconds=slaap))
        y = 0
        logs = db.logs.find({"time": {"$gt": dt}})
        if logs:
            for log in logs:
                msg = log['msg'].split()
                if len(msg) == 24:
                    try:
                        produced_on = parse(msg[11])
                        y += int(msg[16].replace(',', ''))
                    except:
                        jlog.critical('trxs ERROR: {}'.format(sys.exc_info()))
                else:
                    jlog.warning('trxs WARN len(msg) not 24: {}'.format(msg))

        t = datetime.now()
        d = {'t': t, 'y': y}
        add_db('trxs', slug='trxs', tag=slaap, data=d)

        jlog.info('Sleeping trxs for: {} seconds'.format(slaap))
        sleep(slaap)
Exemple #8
0
def notify(slaap=300):
    while True:
        ''' unreg not seeing blocks for slaap seconds '''
        m = ['josiendotnet', 'josientester']
        lp = listproducers()
        if lp and isinstance(lp, dict):
            if 'rows' in lp:
                for row in lp['rows']:
                    if row['is_active'] and row['owner'] in m:
                        try:
                            ldt = parse(row['last_block_time'])
                            ld = datetime.now() - ldt
                            if ld.seconds > 300:
                                msg = '{} {} Go unreg'.format(
                                    row['owner'], ld.seconds)
                                jlog.info('GO GO GO GO unreg: {}'.format(msg))
                                po(msg)
                        except:
                            print(sys.exc_info())
                            jlog.critical("unreg {}".format(sys.exc_info()))

        jlog.info('Sleeping for: {} seconds'.format(slaap))
        sleep(slaap)
Exemple #9
0
def cpu_usage_us(slaap=10):
    while True:
        trxs = False
        bl = db.cpu_usage_us.find().limit(400)
        blocks = []
        start = 168517  # first benchmark block
        if bl:
            for row in bl:
                for cpu in row['data']:
                    blocks.append(cpu['block'])
            if blocks:
                start = max(blocks) + 1

        i = remcli_get_info()
        stop = i['last_irreversible_block_num']

        for block in range(start, stop):
            b = get_block(block)
            try:
                timestamp = parse(b['timestamp'])
            except:
                timestamp = False
                jlog.critical('timestamp ERROR: {}'.format(sys.exc_info()))
            if timestamp:
                d = db.cpu_usage_us.find_one(
                    {"producer": "{}".format(b['producer'])})
            if timestamp and b['transactions']:
                for transaction in b['transactions']:
                    if isinstance(transaction['trx'], dict):
                        for action in transaction['trx']['transaction'][
                                'actions']:
                            if 'account' in action and 'name' in action and action[
                                    'account'] == 'rembenchmark' and action[
                                        'name'] == 'cpu':
                                trxs = True
                                cpu_usage_us = transaction['cpu_usage_us']
                                if d and not list(
                                        filter(lambda xo: xo['block'] == block,
                                               d['data'])):
                                    d['data'].append({
                                        "timestamp": timestamp,
                                        "cpu_usage_us": cpu_usage_us,
                                        "block": block
                                    })
                                else:
                                    d = {}
                                    d['producer'] = b['producer']
                                    d['data'] = []
                                    d['data'].append({
                                        "timestamp": timestamp,
                                        "cpu_usage_us": cpu_usage_us,
                                        "block": block
                                    })

                                ref = db.cpu_usage_us.update(
                                    {"producer": '{}'.format(b['producer'])},
                                    {"$set": d},
                                    upsert=True)
                                jlog.info('{} {} {}'.format(
                                    block, timestamp, ref))
        if not trxs:
            jlog.info('Sleeping for: {} seconds'.format(slaap))
            sleep(slaap)
Exemple #10
0
def producers_slow(slaap=300):
    while True:

        url = "https://min-api.cryptocompare.com/data/price?fsym=REM&tsyms=USD&api_key={}".format(
            os.getenv('cryptocompare_key', False))
        r = requests.get(url)
        if r and r.ok and r.json:
            add_db(col='cache', tag='usd_rem', slug='usd_rem', data=r.json())

        headers = {
            'User-Agent':
            'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36'
        }
        #producers = db.producers.find({"name":"josiendotnet"}).limit(100)
        producers = db.producers.find().limit(100)
        if producers:
            for p in producers:
                if 'producer' in p and 'url' in p['producer']:
                    if p['producer']['url']:
                        url = '{}/bp.json'.format(
                            p['producer']['url'].rstrip('//'))
                        data = p
                        data['updated_at'] = datetime.now(timezone.utc)
                        data['bp_json'] = False
                        data['bp_json_url'] = ''
                        health = data['health']

                        r = False
                        try:
                            r = requests.get(url,
                                             headers=headers,
                                             verify=False)
                        except:
                            jlog.critical("bp.json error: {} {}".format(
                                sys.exc_info(), p['name']))

                        if r and r.ok and r.json:
                            try:
                                data['bp_json'] = r.json()
                                data['bp_json_url'] = url
                            except:
                                jlog.critical("bp.json error: {} {}".format(
                                    p['name'], sys.exc_info()))

                        if not data['bp_json']:
                            health.append({'title': 'No bp.json'})

                        if data['bp_json']:
                            bp_json = r.json()
                            if 'org' in bp_json and 'social' in bp_json[
                                    'org'] and isinstance(
                                        bp_json['org']['social'], dict):
                                o = '<div><ul class="social-network">'
                                for k, v in bp_json['org']['social'].items():
                                    if v:
                                        if k == 'facebook':
                                            o += '<li><a data-toggle="tooltip" data-placement="top" data-html="true" title="{0}" target="_blank" href="https://facebook.com/{1}""><i class="fab fa-{0}"></i></a></li>'.format(
                                                k, v)
                                        if k == 'twitter':
                                            o += '<li><a data-toggle="tooltip" data-placement="top" data-html="true" target="_blank" href="https://twitter.com/{1}" title="{0}"><i class="fab fa-{0}"></i></a></li>'.format(
                                                k, v)
                                        if k == 'telegram':
                                            o += '<li><a data-toggle="tooltip" data-placement="top" data-html="true" target="_blank" href="https://t.me/{1}" title="{0}"><i class="fab fa-{0}"></i></a></li>'.format(
                                                k, v)
                                        if k == 'reddit':
                                            o += '<li><a data-toggle="tooltip" data-placement="top" data-html="true" target="_blank" href="https://reddit.com/user/{1}" title="{0}"><i class="fab fa-{0}"></i></a></li>'.format(
                                                k, v)
                                        if k == 'github':
                                            o += '<li><a data-toggle="tooltip" data-placement="top" data-html="true" target="_blank" href="https://github.com/{1}" title="{0}"><i class="fab fa-{0}"></i></a></li>'.format(
                                                k, v)
                                        if k == 'linkedin':
                                            o += '<li><a data-toggle="tooltip" data-placement="top" data-html="true" target="_blank" href="https://linkedin.com/in/{1}" title="{0}"><i class="fab fa-{0}"></i></a></li>'.format(
                                                k, v)

                                o += '</ul></div>'
                                data['social'] = o

                        data['health'] = health
                        ref = db.producers.update(
                            {"name": '{}'.format(p['name'])}, {"$set": data},
                            upsert=True)

        jlog.info('Sleeping for: {} seconds'.format(slaap))
        sleep(slaap)
Exemple #11
0
def producers_fast(slaap=20):
    while True:
        actions_seconds = slaap + 60
        get_actions(actions_seconds)
        lv = listvoters()
        lp = listproducers()
        position = 0

        if lp and 'rows' in lp:
            swaps = remcli_get_action_swap()
            swap_it = []
            if swaps and 'rows' in swaps:
                for swap in swaps['rows']:
                    swap_it = swap_it + swap['provided_approvals']

            rows = sorted(lp['rows'],
                          key=lambda k: (float(k['total_votes'])),
                          reverse=True)
            for p in rows:
                health = []

                o = db.producers.find_one({"name": "{}".format(p['owner'])})
                if o:
                    data = o
                    data['updated_at'] = datetime.now(timezone.utc)
                    data['health'] = []
                else:
                    ''' init producer '''
                    data = {}
                    data['name'] = p['owner']
                    data['position'] = 99
                    data['producer'] = p
                    data['slug'] = 'producers'
                    data['tag'] = 'producers'
                    data['cpu_usage_us'] = ''
                    data['social'] = ''
                    data['bp_json'] = ''
                    data['bp_json_url'] = ''
                    data['health'] = []
                    data['color'] = random_color()
                    data['created_at'] = datetime.now(timezone.utc)

                usage = db.cpu_usage_us.find(
                    {"producer": "{}".format(p['owner'])})
                dt = (datetime.now() - timedelta(seconds=3600))
                if usage:
                    l = []
                    for use in usage:
                        for cpu in use['data']:
                            if cpu['timestamp'] > dt:
                                l.append(cpu['cpu_usage_us'])

                    if l:
                        try:
                            data['cpu_usage_us'] = mean(l)
                        except:
                            jlog.critical("cpu_usage_us error: {} {}".format(
                                p['name'], sys.exc_info()))

                data['producer'] = p

                if p['is_active'] == 1:
                    position += 1
                    data['position'] = position
                else:
                    health.append({'title': 'Not Active'})
                    data['position'] = 99

                if p['owner'] in swap_it:
                    data['swaps'] = True
                else:
                    data['swaps'] = False
                    health.append({'title': 'Not swapping'})

                owner = get_account(p['owner'])
                data['owner'] = owner

                voters = []
                data['voters'] = []
                if lv and 'rows' in lv and isinstance(lv['rows'], list):
                    for voter in lv['rows']:
                        if isinstance(voter,
                                      dict) and 'error' not in voter.keys():
                            if p['owner'] in voter['producers']:
                                voters.append(voter['owner'])
                                data['voters'] = voters

                data['voters_count'] = len(voters)

                data['health'] = health
                ref = db.producers.update({"name": '{}'.format(p['owner'])},
                                          {"$set": data},
                                          upsert=True)

        jlog.info('Sleeping for: {} seconds'.format(slaap))
        sleep(slaap)
Exemple #12
0
def dev1(slaap=2):
    while True:
        jlog.info('Sleeping for: {} seconds'.format(slaap))
        sleep(slaap)