diff --git a/docker-compose.yml b/docker-compose.yml index 68bcfe12..28cc9519 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -7,7 +7,6 @@ services: - bot_main.py depends_on: - db - - influx environment: - CLIENT_ID - TOKEN @@ -17,9 +16,6 @@ services: - "DATABASE_NAME=postgres" - "DATABASE_HOST=db" - "DATABASE_PORT=5432" - - "INFLUX_HOST=influx" - - "INFLUX_PORT=8086" - - "INFLUX_DB=pluralkit" restart: always api: build: src/ @@ -42,22 +38,6 @@ services: volumes: - "db_data:/var/lib/postgresql/data" restart: always - influx: - image: influxdb:alpine - volumes: - - "influx_data:/var/lib/influxdb:Z" - restart: always - grafana: - build: grafana - depends_on: - - influx - ports: - - "2938:3000" - environment: - GF_SECURITY_ADMIN_USER: "${GRAFANA_USERNAME}" - GF_SECURITY_ADMIN_PASSWORD: "${GRAFANA_PASSWORD}" - restart: always volumes: - db_data: - influx_data: \ No newline at end of file + db_data: \ No newline at end of file diff --git a/src/pluralkit/bot/__init__.py b/src/pluralkit/bot/__init__.py index ba186eec..3a432e83 100644 --- a/src/pluralkit/bot/__init__.py +++ b/src/pluralkit/bot/__init__.py @@ -11,7 +11,6 @@ import discord from pluralkit import db from pluralkit.bot import channel_logger, commands, proxy, embeds -from pluralkit.stats import InfluxStatCollector, NullStatCollector logging.basicConfig(level=logging.INFO, format="[%(asctime)s] [%(name)s] [%(levelname)s] %(message)s") @@ -29,13 +28,9 @@ class PluralKitBot: self.client.event(self.on_message) self.client.event(self.on_socket_raw_receive) - self.stats = NullStatCollector() - self.channel_logger = channel_logger.ChannelLogger(self.client) - # "stats" passed here will be a NullStatsCollector, will get overwritten inside - # the Proxy object when the actual connection occurs - self.proxy = proxy.Proxy(self.client, token, self.channel_logger, self.stats) + self.proxy = proxy.Proxy(self.client, token, self.channel_logger) async def on_error(self, evt, *args, **kwargs): self.logger.exception("Error while handling event {} with arguments {}:".format(evt, args)) @@ -110,12 +105,6 @@ class PluralKitBot: await self.client.send_message(channel, "```python\n{}```".format(traceback.format_exc()), embed=embed) - async def periodical_stat_timer(self, pool): - async with pool.acquire() as conn: - while True: - await self.stats.report_periodical_stats(conn) - await asyncio.sleep(30) - async def run(self): try: self.logger.info("Connecting to database...") @@ -131,20 +120,6 @@ class PluralKitBot: async with self.pool.acquire() as conn: await db.create_tables(conn) - if "INFLUX_HOST" in os.environ: - self.logger.info("Connecting to InfluxDB...") - self.stats = await InfluxStatCollector.connect( - os.environ["INFLUX_HOST"], - os.environ["INFLUX_PORT"], - os.environ["INFLUX_DB"] - ) - - # Overwrite the NullCollector passed to proxy - self.proxy.stats = self.stats - - self.logger.info("Starting periodical stat reporting...") - asyncio.get_event_loop().create_task(self.periodical_stat_timer(self.pool)) - self.logger.info("Connecting to Discord...") await self.client.start(self.token) finally: diff --git a/src/pluralkit/bot/proxy.py b/src/pluralkit/bot/proxy.py index 469563c1..5d084150 100644 --- a/src/pluralkit/bot/proxy.py +++ b/src/pluralkit/bot/proxy.py @@ -9,7 +9,6 @@ import discord from pluralkit import db from pluralkit.bot import channel_logger, utils, embeds -from pluralkit.stats import StatCollector logger = logging.getLogger("pluralkit.bot.proxy") @@ -87,13 +86,12 @@ class DeletionPermissionError(Exception): class Proxy: - def __init__(self, client: discord.Client, token: str, logger: channel_logger.ChannelLogger, stats: StatCollector): + def __init__(self, client: discord.Client, token: str, logger: channel_logger.ChannelLogger): self.logger = logging.getLogger("pluralkit.bot.proxy") self.session = aiohttp.ClientSession() self.client = client self.token = token self.channel_logger = logger - self.stats = stats async def save_channel_webhook(self, conn, channel: discord.Channel, id: str, token: str) -> (str, str): await db.add_webhook(conn, channel.id, id, token) @@ -172,9 +170,6 @@ class Proxy: if resp.status == 200: message = await resp.json() - # Report webhook stats to Influx - await self.stats.report_webhook(time.perf_counter() - time_before, True) - await db.add_message(conn, message["id"], message["channel_id"], member.id, original_message.author.id) try: @@ -212,9 +207,6 @@ class Proxy: message["timestamp"]), message_id=message["id"]) elif resp.status == 404 and not has_already_retried: - # Report webhook stats to Influx - await self.stats.report_webhook(time.perf_counter() - time_before, False) - # Webhook doesn't exist. Delete it from the DB, create, and add a new one self.logger.warning("Webhook registered in DB doesn't exist, deleting hook from DB, re-adding, and trying again (channel={}, hook={})".format(original_message.channel.id, hook_id)) await db.delete_webhook(conn, original_message.channel.id) @@ -223,9 +215,6 @@ class Proxy: # Then try again all over, making sure to not retry again and go in a loop should it continually fail return await self.do_proxy_message(conn, member, original_message, text, attachment_url, has_already_retried=True) else: - # Report webhook stats to Influx - await self.stats.report_webhook(time.perf_counter() - time_before, False) - raise discord.HTTPException(resp, await resp.text()) async def try_proxy_message(self, conn, message: discord.Message): diff --git a/src/pluralkit/db.py b/src/pluralkit/db.py index e4d54498..747c1320 100644 --- a/src/pluralkit/db.py +++ b/src/pluralkit/db.py @@ -8,7 +8,6 @@ import asyncpg import asyncpg.exceptions from discord.utils import snowflake_time -from pluralkit import stats from pluralkit.system import System from pluralkit.member import Member @@ -29,12 +28,8 @@ def db_wrap(func): after = time.perf_counter() logger.debug(" - DB call {} took {:.2f} ms".format(func.__name__, (after - before) * 1000)) - # TODO: find some way to give this func access to the bot's stats object - #await stats.report_db_query(func.__name__, after - before, True) - return res except asyncpg.exceptions.PostgresError: - #await stats.report_db_query(func.__name__, time.perf_counter() - before, False) logger.exception("Error from database query {}".format(func.__name__)) return inner diff --git a/src/pluralkit/stats.py b/src/pluralkit/stats.py deleted file mode 100644 index d4e0e86d..00000000 --- a/src/pluralkit/stats.py +++ /dev/null @@ -1,69 +0,0 @@ -from aioinflux import InfluxDBClient - - -class StatCollector: - async def report_db_query(self, query_name, time, success): - pass - - async def report_command(self, command_name, execution_time, response_time): - pass - - async def report_webhook(self, time, success): - pass - - async def report_periodical_stats(self, conn): - pass - - -class NullStatCollector(StatCollector): - pass - - -class InfluxStatCollector(StatCollector): - @staticmethod - async def connect(host: str, port: int, db: str): - client = InfluxDBClient(host=host, port=port, db=db) - await client.create_database(db=db) - - return InfluxStatCollector(client) - - def __init__(self, client): - self.client = client - - async def report_db_query(self, query_name, time, success): - await self.client.write({ - "measurement": "database_query", - "tags": {"query": query_name}, - "fields": {"response_time": time, "success": int(success)} - }) - - async def report_command(self, command_name, execution_time, response_time): - await self.client.write({ - "measurement": "command", - "tags": {"command": command_name}, - "fields": {"execution_time": execution_time, "response_time": response_time} - }) - - async def report_webhook(self, time, success): - await self.client.write({ - "measurement": "webhook", - "fields": {"response_time": time, "success": int(success)} - }) - - async def report_periodical_stats(self, conn): - from pluralkit import db - - systems = await db.system_count(conn) - members = await db.member_count(conn) - messages = await db.message_count(conn) - accounts = await db.account_count(conn) - - await self.client.write({ - "measurement": "stats", - "fields": { - "systems": systems, - "members": members, - "messages": messages, - "accounts": accounts - } - })