def update_chatters_stage2(self, chatters): points = 1 if self.bot.is_online else 0 log.debug('Updating {0} chatters'.format(len(chatters))) self.bot.stream_manager.update_chatters(chatters, self.update_chatters_interval) with RedisManager.pipeline_context() as pipeline: with DBManager.create_session_scope() as db_session: user_models = UserManager.get().bulk_load_user_models(chatters, db_session) users = [] for username in chatters: user_model = user_models.get(username, None) user = UserManager.get().get_user(username, db_session=db_session, user_model=user_model, redis=pipeline) users.append(user) more_update_data = {} if self.bot.is_online: more_update_data['minutes_in_chat_online'] = self.update_chatters_interval else: more_update_data['minutes_in_chat_offline'] = self.update_chatters_interval points_to_give_out = {} dt_now = datetime.datetime.now().timestamp() for user in users: user._set_last_seen(dt_now) num_points = points if user.subscriber: num_points *= 5 # TODO: Load user tags during the pipeline redis data fetch if self.bot.streamer == 'forsenlol' and 'trumpsc_sub' in user.get_tags(): num_points *= 0.5 num_points = int(num_points) if num_points not in points_to_give_out: points_to_give_out[num_points] = [] points_to_give_out[num_points].append(user.username) user.save(save_to_db=False) for num_points, usernames in points_to_give_out.items(): payload = { User.points: User.points + num_points, } if self.bot.is_online: payload[User.minutes_in_chat_online] = User.minutes_in_chat_online + self.update_chatters_interval else: payload[User.minutes_in_chat_offline] = User.minutes_in_chat_offline + self.update_chatters_interval db_session.query(User).filter(User.username.in_(usernames)).\ update(payload, synchronize_session=False) pipeline.execute()
def upgrade(): bind = op.get_bind() session = Session(bind=bind) config_data = RedisManager.get().config_get('maxmemory') max_memory = config_data['maxmemory'] print('redis max memory: {}'.format(max_memory)) RedisManager.get().config_set('maxmemory', str(int(max_memory) * 10)) with RedisManager.pipeline_context() as pipeline: streamer = pb_config['main']['streamer'] num_lines_key = '{streamer}:users:num_lines'.format(streamer=streamer) ignored_key = '{streamer}:users:ignored'.format(streamer=streamer) last_active_key = '{streamer}:users:last_active'.format(streamer=streamer) last_seen_key = '{streamer}:users:last_seen'.format(streamer=streamer) banned_key = '{streamer}:users:banned'.format(streamer=streamer) username_raw_key = '{streamer}:users:username_raw'.format(streamer=streamer) pipeline.delete(num_lines_key, ignored_key, last_active_key, last_seen_key, banned_key, username_raw_key) for user in session.query(User): if user.num_lines > 0: pipeline.zadd(num_lines_key, user.username, user.num_lines) if user.ignored: pipeline.hset(ignored_key, user.username, 1) if user.banned: pipeline.hset(banned_key, user.username, 1) if user.username != user.username_raw: pipeline.hset(username_raw_key, user.username, user.username_raw) if user._last_seen: pipeline.hset(last_seen_key, user.username, user._last_seen.timestamp()) if user._last_active: pipeline.hset(last_active_key, user.username, user._last_active.timestamp()) RedisManager.get().config_set('maxmemory', int(max_memory)) ### commands auto generated by Alembic - please adjust! ### with op.batch_alter_table('tb_user') as batch_op: batch_op.drop_column('num_lines') batch_op.drop_column('ignored') batch_op.drop_column('last_active') batch_op.drop_column('last_seen') batch_op.drop_column('banned') ### end Alembic commands ### session.commit()
def upgrade(): bind = op.get_bind() session = Session(bind=bind) with RedisManager.pipeline_context() as pipeline: streamer = pb_config['main']['streamer'] count_key = '{streamer}:emotes:count'.format(streamer=streamer) epmrecord_key = '{streamer}:emotes:epmrecord'.format(streamer=streamer) pipeline.delete(count_key, epmrecord_key) for emote in session.query(Emote): if emote.stats: pipeline.zincrby(count_key, emote.code, emote.stats.count) pipeline.zincrby(epmrecord_key, emote.code, emote.stats.tm_record) op.drop_table('tb_emote_stats') op.drop_table('tb_emote')