Пример #1
0
def load_and_store_stats(match_id, player_faceit_id):
    req = Requester()
    logger.warning(
        f'[STARTED] match: {match_id} for player: {player_faceit_id}')
    file_name = req.download_demo(match_id)
    try:
        out_file_name = f'matches/{file_name}.json'
        subprocess.run([
            './csminify', '-demo', f'matches/{file_name}.dem', '-format',
            'json', '-freq', '8', '-out', out_file_name
        ])
        logger.warning(
            f'[DEMO PARSED] match: {match_id} for player: {player_faceit_id}')
        faceit_stats, player_nickname = req.get_match_stats(
            match_id, player_faceit_id)
        result = DemoParser.parse(out_file_name, chosen_player=player_nickname)
        logger.warning(
            f'[PARSED] match: {match_id} for player: {player_faceit_id}')

        sql = f"""
                            UPDATE matches SET
                             kills = {result['stats']['kills']},
                             deaths = {result['stats']['deaths']},
                             assists = {result['stats']['assists']},
                             damage = {result['stats']['adr']},
                             headshots = {faceit_stats['Headshots %']},
                             mk_2k = {result['stats']['2k']},
                             mk_3k = {result['stats']['3k']},
                             mk_4k = {result['stats']['4k']},
                             mk_5k = {result['stats']['5k']},
                             mvps = {faceit_stats['MVPs']},
                             kd_ratio = {faceit_stats['K/D Ratio']},
                             kr_ratio = {faceit_stats['K/R Ratio']},
                             first_blood = {result['stats']['f_blood']},
                             first_death = {result['stats']['f_death']},
                             kast = {result['stats']['kast']},
                             hltv = {result['stats']['hltv_rating']},
                             flash_thrown = {result['flashes']['flashes_amount']},
                             useful_flash = {result['flashes']['successful_flashes_amount']},
                             flash_duration = {result['flashes']['total_duration']},
                             he_thrown = {result['grenades']['grenades_amount']},
                             useful_he = {result['grenades']['successful_grenades_amount']},
                             he_damage = {result['grenades']['total_damage']},
                             bomb_defused = {result['stats']['bomb_defused']},
                             bomb_planted = {result['stats']['bomb_planted']},
                             bomb_actions_total = {result['stats']['bomb_defused'] + result['stats']['bomb_planted']}
                             WHERE faceit_id = '{match_id}' AND player_faceit_id = '{player_faceit_id}'
                            """
        con = psycopg2.connect(
            "host=13.53.197.126 port=5432 dbname=csgo user=csgo password=csgo")
        cur = con.cursor()
        cur.execute(sql, ())
        cur.close()
        con.commit()
        con.close()
    except Exception as ex:
        logger.warning(
            f'[ERROR] match: {match_id} for player: {player_faceit_id}')
        logger.warning(ex)
        raise ex
    finally:
        if os.path.exists(f'matches/{file_name}.json'):
            os.remove(f'matches/{file_name}.json')
        if os.path.exists(f'matches/{file_name}.dem'):
            os.remove(f'matches/{file_name}.dem')
        if os.path.exists(f'matches/{file_name}.dem.gz'):
            os.remove(f'matches/{file_name}.dem.gz')
    logger.warning(f'[ENDED] match: {match_id} for player: {player_faceit_id}')