Example #1
0
def update(config_path, verbose):
    '''
    Run updates. Pass me path to config file which contains settings for redis
    as well as which soldat servers to process data for.
  '''

    with acquire_lock():

        start = time.time()
        # Parse our config yaml file
        config = Config(config_path)

        r = redis.Redis(**config.redis_connect)

        for server in config.servers:
            print(
                'Updating stats for {server.url_slug} ({server.title}) ({server.log_source})'
                .format(server=server))

            # Redis key name manager
            keys = Keys(config, server)

            # Limit our data to however much retention
            retention = Retention(r, keys, config, server)

            # Parse each of our soldat DIRs
            for soldat_dir in server.dirs:

                # Support getting logs via local files or ssh or ftp
                if server.log_source == 'local':
                    filemanager = LocalFileManager(r, keys, soldat_dir,
                                                   retention)
                elif server.log_source == 'ssh':
                    filemanager = SshFileManager(r, keys, soldat_dir,
                                                 retention,
                                                 server.connection_options)
                elif server.log_source == 'ftp':
                    filemanager = FtpFileManager(r, keys, soldat_dir,
                                                 retention,
                                                 server.connection_options)

                # Console logs
                try:
                    update_events(r, keys, retention, filemanager, server,
                                  verbose)
                except Exception:
                    logging.exception('Failed updating stats for %s (%s) (%s)',
                                      server.url_slug, server.title,
                                      server.log_source)

            # Trim old events
            retention.run_retention()
            print('Updating took {0} seconds'.format(
                round(time.time() - start, 2)))
Example #2
0
def test_keys():
    k = Keys(FakeConfig(), FakeServer())

    assert k.top_players == 'pystats:server1:top_players'
    assert k.player_search == 'pystats:server1:player_search'
    assert k.kill_log == 'pystats:server1:kill_log'
    assert k.top_weapons == 'pystats:server1:top_weapons'
    assert k.top_countries == 'pystats:server1:top_countries'
    assert k.top_maps == 'pystats:server1:top_maps'
    assert k.kills_per_day(
        '2016-10-30') == 'pystats:server1:kills_per_day:2016-10-30'
    assert k.player_hash('jrgp') == 'pystats:server1:player:jrgp'
    assert k.player_top_enemies(
        'jrgp') == 'pystats:server1:player_top_enemies:jrgp'
    assert k.player_top_victims(
        'jrgp') == 'pystats:server1:player_top_victims:jrgp'
    assert k.weapon_top_killers(
        'HK MP5') == 'pystats:server1:weapon_top_killers:HK MP5'
    assert k.map_hash('Adore') == 'pystats:server1:map:Adore'
    assert k.round_hash(1) == 'pystats:server1:round_data:1'
    assert k.player_id_to_names(1) == 'pystats:server1:player_id_to_names:1'
Example #3
0
 def __init__(self, config, server):
   self.r = redis.Redis(connection_pool=config.redis_connection_pool)
   self.keys = Keys(config, server)
   self.server = server