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)))
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'
def __init__(self, config, server): self.r = redis.Redis(connection_pool=config.redis_connection_pool) self.keys = Keys(config, server) self.server = server