From ee311c9af3acd338425e8253b6bab2a79ac764fa Mon Sep 17 00:00:00 2001 From: Sweetbread Date: Sun, 18 Jun 2023 01:46:54 +0300 Subject: [PATCH] [perf]: Make db writes only on change, turn per day writes off --- cogs/economic.py | 2 ++ cogs/timeble.py | 28 +++++++++------------------- 2 files changed, 11 insertions(+), 19 deletions(-) diff --git a/cogs/economic.py b/cogs/economic.py index 853c52d..bd9ff5c 100644 --- a/cogs/economic.py +++ b/cogs/economic.py @@ -514,6 +514,8 @@ class Economic(commands.Cog, name="Экономика"): else: vals = [info[key] for key in info.keys() if int(key) >= ts-period*60**2] + if not vals: continue + ax.plot(list(map(int, info.keys()))[-len(vals):], vals, marker=marker, label=self.bot.get_user(user['id']).name) ax.xaxis.set_major_formatter(ticker.FuncFormatter(lambda x, pos: datetime.fromtimestamp(x).strftime('%d.%m'))) diff --git a/cogs/timeble.py b/cogs/timeble.py index 944ed5c..b70e4dd 100644 --- a/cogs/timeble.py +++ b/cogs/timeble.py @@ -13,30 +13,20 @@ async def save_activity(): {"type": "server", "id": data['id']}, { "$push": - {f"avarage.{i}": data['current'][str(i)] for i in range(24)}, + {f"avarage.{i}": data['current'][str(i)] for i in range(24)} | {f"history.{daysoftheweek[day]}.{i}": data['current'][str(i)] for i in range(24)}, "$set": - {f'yesterday.{i}': data['current'][str(i)] for i in range(24)} - } - ) - await db.history.update_one( - {"type": "server", "id": data['id']}, - { - "$push": - {f"history.{daysoftheweek[day]}.{i}": data['current'][str(i)] for i in range(24)}, - "$set": - {f"current.{i}": 0 for i in range(24)} + {f'yesterday.{i}': data['current'][str(i)] for i in range(24)} | {f"current.{i}": 0 for i in range(24)} } ) async def db_sync_hour(): - logger.info("Регистрация за час") async for member in db.members.find(): - await db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.hour.{int(datetime.now().timestamp())}": member["exp"]}}) - if 'guild_stat' in member.keys(): - for guild in member["guild_stat"].keys(): - await db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.hour.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}}) - logger.info("Регистрация завершена") - + if member['history']['hour'][list(member['history']['hour'].keys())[-1]] != member['exp']: + await db.members.update_one({"_id": member["_id"]}, {"$set": {f"history.hour.{int(datetime.now().timestamp())}": member["exp"]}}) + if 'guild_stat' in member.keys(): + for guild in member["guild_stat"].keys(): + if member['guild_stat'][guild]['history']['hour'][list(member['guild_stat'][guild]['history']['hour'].keys())[-1]] != member['guild_stat'][guild]['exp']: + await db.members.update_one({"_id": member["_id"]}, {"$set": {f"guild_stat.{guild}.history.hour.{int(datetime.now().timestamp())}": member["guild_stat"][guild]["exp"]}}) async def db_sync_day(): logger.info("Регистрация за день") @@ -53,7 +43,7 @@ async def main(bot): every().day.at('00:00:00').do(lambda: asyncio.run_coroutine_threadsafe(save_activity(), bot.loop)) every().hours.at("00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_hour(), bot.loop)) - every().day.at("00:00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_day(), bot.loop)) + # every().day.at("00:00:00").do(lambda: asyncio.run_coroutine_threadsafe(db_sync_day(), bot.loop)) while True: run_pending()