From 1983e6135cc5b076ae92bd2879410216af439921 Mon Sep 17 00:00:00 2001 From: zevaryx Date: Fri, 10 Jun 2022 09:54:54 -0600 Subject: [PATCH] Add prometheus --- .vscode/settings.json | 3 + jarvis_tasks/__init__.py | 4 +- jarvis_tasks/prometheus/serve.py | 26 +++++ jarvis_tasks/prometheus/stats.py | 38 +++++++ jarvis_tasks/tasks/reddit.py | 10 ++ jarvis_tasks/tasks/reminder.py | 10 +- jarvis_tasks/tasks/twitter.py | 10 ++ poetry.lock | 171 ++++++++++++++++++++++++++++++- pyproject.toml | 7 +- 9 files changed, 271 insertions(+), 8 deletions(-) create mode 100644 .vscode/settings.json create mode 100644 jarvis_tasks/prometheus/serve.py create mode 100644 jarvis_tasks/prometheus/stats.py diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..163c984 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "python.formatting.provider": "black" +} diff --git a/jarvis_tasks/__init__.py b/jarvis_tasks/__init__.py index 6d0d5c8..c4b8016 100644 --- a/jarvis_tasks/__init__.py +++ b/jarvis_tasks/__init__.py @@ -9,6 +9,7 @@ from naff import Client, Intents from jarvis_tasks import const from jarvis_tasks.config import TaskConfig +from jarvis_tasks.prometheus.serve import StatTracker from jarvis_tasks.tasks import ( autokick, ban, @@ -52,6 +53,7 @@ async def _start(config: Optional[str] = "config.yaml") -> None: bot = Client(intents=intents, loop=loop) await bot.login(config.token) logger.info(f"Logged in as {bot.user.username}#{bot.user.discriminator}") + tracker = StatTracker() # Start tasks try: @@ -67,7 +69,7 @@ async def _start(config: Optional[str] = "config.yaml") -> None: twitter.twitter, warning.unwarn, ] - tasks = [loop.create_task(f(bot)) for f in functions] + tasks = [loop.create_task(f(bot)) for f in functions] + [loop.create_task(tracker.start())] for task in tasks: await task except KeyboardInterrupt: diff --git a/jarvis_tasks/prometheus/serve.py b/jarvis_tasks/prometheus/serve.py new file mode 100644 index 0000000..391305a --- /dev/null +++ b/jarvis_tasks/prometheus/serve.py @@ -0,0 +1,26 @@ +"""Prometheus scraping server""" +import logging + +import prometheus_client +import uvicorn + +from jarvis_tasks import const +from jarvis_tasks.prometheus.stats import tasks_info + +logger = logging.getLogger(__name__) + + +class StatTracker: + def __init__(self, host: str = "0.0.0.0", port: int = 8878, interval: int = 5) -> None: + self.host = host + self.port = port + self.interval = interval + + app = prometheus_client.make_asgi_app() + config = uvicorn.Config(app=app, host=self.host, port=self.port, access_log=False) + self.server = uvicorn.Server(config) + + async def start(self) -> None: + """Start the Prometheus server.""" + tasks_info.info({"version": const.__version__}) + await self.server.serve() diff --git a/jarvis_tasks/prometheus/stats.py b/jarvis_tasks/prometheus/stats.py new file mode 100644 index 0000000..ca76566 --- /dev/null +++ b/jarvis_tasks/prometheus/stats.py @@ -0,0 +1,38 @@ +"""Prometheus stats.""" +from prometheus_client import Counter, Gauge, Info + +tasks_info = Info("jarvis_tasks_info", "JARVIS Task info") + +reddit_gauge = Gauge( + "jarvis_tasks_reddit_follows", + "JARVIS Reddit follows", + labelnames=["guild_id", "guild_name", "subreddit_name"], +) +reddit_count = Counter( + "jarvis_tasks_reddit_count", + "JARVIS Reddit sync count", + labelnames=["guild_id", "guild_name", "subreddit_name"], +) + +twitter_gauge = Gauge( + "jarvis_tasks_twitter_follows", + "JARVIS twitter follows", + labelnames=["guild_id", "guild_name", "twitter_handle"], +) +twitter_count = Counter( + "jarvis_tasks_twitter_count", + "JARVIS twitter sync count", + labelnames=["guild_id", "guild_name", "twitter_handle"], +) + +# Gauge currently not used +reminder_gauge = Gauge( + "jarvis_tasks_reminders", + "JARVIS reminders gauge", + labelnames=["guild_id", "guild_name"], +) +reminder_count = Counter( + "jarvis_tasks_reminders_count", + "JARVIS reminders notified count", + labelnames=["guild_id", "guild_name"], +) diff --git a/jarvis_tasks/tasks/reddit.py b/jarvis_tasks/tasks/reddit.py index b4e522d..0dd2742 100644 --- a/jarvis_tasks/tasks/reddit.py +++ b/jarvis_tasks/tasks/reddit.py @@ -16,6 +16,7 @@ from naff.models.discord.embed import Embed, EmbedField from jarvis_tasks import const from jarvis_tasks.config import TaskConfig +from jarvis_tasks.prometheus.stats import reddit_count, reddit_gauge from jarvis_tasks.util import build_embed DEFAULT_USER_AGENT = f"python:JARVIS-Tasks:{const.__version__} (by u/zevaryx)" @@ -151,6 +152,10 @@ async def _stream(sub: Sub, bot: Client, reddit: Reddit) -> None: f"`r/{sub.display_name}` was posted to at ", embeds=embeds, ) + count = reddit_count.labels( + guild_id=guild.id, guild_name=guild.name, subreddit_name=sub.display_name + ) + count.inc() except DNotFound: logger.warning(f"Follow {follow.id}'s channel no longer exists, deleting") await follow.delete() @@ -161,6 +166,11 @@ async def _stream(sub: Sub, bot: Client, reddit: Reddit) -> None: f"Failed to send message to {channel.id} in {channel.guild.name}", exc_info=True ) + gauge = reddit_gauge.labels( + guild_id=guild.id, guild_name=guild.name, subreddit_name=sub.display_name + ) + gauge.set(num_follows) + if num_follows == 0: s = await Subreddit.find_one(q(display_name=sub.display_name)) if s: diff --git a/jarvis_tasks/tasks/reminder.py b/jarvis_tasks/tasks/reminder.py index a7f59eb..b90fe5f 100644 --- a/jarvis_tasks/tasks/reminder.py +++ b/jarvis_tasks/tasks/reminder.py @@ -11,6 +11,7 @@ from naff.models.discord.channel import GuildText from naff.models.discord.embed import Embed from naff.models.discord.user import User +from jarvis_tasks.prometheus.stats import reminder_count from jarvis_tasks.util import build_embed, runat queue = [] @@ -24,9 +25,11 @@ async def _remind( channel: Optional[GuildText] = None, ) -> None: delete = True + reminded = False try: await user.send(embed=embed) - logger.debug(f"Reminder {reminder.id} send to user") + reminded = True + logger.debug(f"Reminder {reminder.id} sent to user") except Exception: logger.debug("Failed to DM user, falling back to channel") if channel: @@ -36,6 +39,7 @@ async def _remind( else: if channel and not reminder.private: await channel.send(f"{member.mention}", embed=embed) + reminded = True logger.debug(f"Reminder {reminder.id} sent to origin channel") elif channel: await channel.send( @@ -43,6 +47,7 @@ async def _remind( " but I couldn't send it to you.\n" f"Use `/reminder fetch {str(reminder.id)}` to view" ) + reminded = True logger.debug( f"Reminder {reminder.id} private, sent notification to origin channel" ) @@ -53,6 +58,9 @@ async def _remind( logger.warning(f"Reminder {reminder.id} failed, no way to contact user.") if delete: await reminder.delete() + if reminded: + count = reminder_count.labels(guild_id=channel.guild.id, guild_name=channel.guild.name) + count.inc() queue.remove(reminder.id) diff --git a/jarvis_tasks/tasks/twitter.py b/jarvis_tasks/tasks/twitter.py index e882796..f48c182 100644 --- a/jarvis_tasks/tasks/twitter.py +++ b/jarvis_tasks/tasks/twitter.py @@ -13,6 +13,7 @@ from tweepy.asynchronous import AsyncStream from tweepy.models import Status from jarvis_tasks.config import TaskConfig +from jarvis_tasks.prometheus.stats import twitter_count, twitter_gauge from jarvis_tasks.util import build_embed config = TaskConfig.from_yaml() @@ -136,6 +137,10 @@ class JARVISTwitterStream(AsyncStream): f"`@{status.user.screen_name}` {mod}tweeted this at ", embeds=embeds, ) + count = twitter_count.labels( + guild_id=guild.id, guild_name=guild.name, twitter_handle=status.user.screen_name + ) + count.inc() except NotFound: logger.warn(f"Follow {follow.id} invalid, deleting") await follow.delete() @@ -144,6 +149,11 @@ class JARVISTwitterStream(AsyncStream): except Exception: logger.debug(f"Failed to send message to {channel.id} in {channel.guild.name}") + gauge = twitter_gauge.labels( + guild_id=guild.id, guild_name=guild.name, twitter_handle=status.user.screen_name + ) + gauge.set(num_follows) + if num_follows == 0: logger.warning(f"Account {status.author.screen_name} no longer has followers, removing") account = await TwitterAccount.find_one(q(twitter_id=status.author.id)) diff --git a/poetry.lock b/poetry.lock index b4aac93..7283645 100644 --- a/poetry.lock +++ b/poetry.lock @@ -48,6 +48,17 @@ python-versions = ">=3.6" [package.dependencies] typing_extensions = ">=3.7.2" +[[package]] +name = "asgiref" +version = "3.5.2" +description = "ASGI specs, helper code, and adapters" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.extras] +tests = ["pytest", "pytest-asyncio", "mypy (>=0.800)"] + [[package]] name = "async-generator" version = "1.10" @@ -141,6 +152,27 @@ docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] +[[package]] +name = "black" +version = "22.3.0" +description = "The uncompromising code formatter." +category = "dev" +optional = false +python-versions = ">=3.6.2" + +[package.dependencies] +click = ">=8.0.0" +mypy-extensions = ">=0.4.3" +pathspec = ">=0.9.0" +platformdirs = ">=2" +tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} + +[package.extras] +colorama = ["colorama (>=0.4.3)"] +d = ["aiohttp (>=3.7.4)"] +jupyter = ["ipython (>=7.8.0)", "tokenize-rt (>=3.2.0)"] +uvloop = ["uvloop (>=0.15.2)"] + [[package]] name = "certifi" version = "2021.10.8" @@ -160,11 +192,22 @@ python-versions = ">=3.5.0" [package.extras] unicode_backport = ["unicodedata2"] +[[package]] +name = "click" +version = "8.1.3" +description = "Composable command line interface toolkit" +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +colorama = {version = "*", markers = "platform_system == \"Windows\""} + [[package]] name = "colorama" version = "0.4.4" description = "Cross-platform colored terminal text." -category = "dev" +category = "main" optional = false python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" @@ -232,6 +275,14 @@ category = "main" optional = false python-versions = "*" +[[package]] +name = "h11" +version = "0.13.0" +description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" +category = "main" +optional = false +python-versions = ">=3.6" + [[package]] name = "idna" version = "3.3" @@ -250,7 +301,7 @@ python-versions = "*" [[package]] name = "jarvis-core" -version = "0.9.2" +version = "0.10.2" description = "JARVIS core" category = "main" optional = false @@ -271,7 +322,7 @@ umongo = "^3.1.0" type = "git" url = "https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git" reference = "main" -resolved_reference = "83117c1b3c5540acadeac3005f4d8e69cbf743fc" +resolved_reference = "7bb9b25f636fbcbea97e0924f2192a1e497258dd" [[package]] name = "marshmallow" @@ -312,6 +363,14 @@ category = "main" optional = false python-versions = ">=3.7" +[[package]] +name = "mypy-extensions" +version = "0.4.3" +description = "Experimental type system extensions for programs checked with the mypy typechecker." +category = "dev" +optional = false +python-versions = "*" + [[package]] name = "nanoid" version = "2.0.0" @@ -352,6 +411,26 @@ python-versions = ">=3.6" [package.dependencies] pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +[[package]] +name = "pathspec" +version = "0.9.0" +description = "Utility library for gitignore style pattern matching of file paths." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" + +[[package]] +name = "platformdirs" +version = "2.5.2" +description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." +category = "dev" +optional = false +python-versions = ">=3.7" + +[package.extras] +docs = ["furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)", "sphinx (>=4)"] +test = ["appdirs (==1.4.4)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)", "pytest (>=6)"] + [[package]] name = "pluggy" version = "1.0.0" @@ -364,6 +443,17 @@ python-versions = ">=3.6" dev = ["pre-commit", "tox"] testing = ["pytest", "pytest-benchmark"] +[[package]] +name = "prometheus-client" +version = "0.14.1" +description = "Python client for the Prometheus monitoring system." +category = "main" +optional = false +python-versions = ">=3.6" + +[package.extras] +twisted = ["twisted"] + [[package]] name = "protobuf" version = "3.20.1" @@ -623,6 +713,22 @@ brotli = ["brotlicffi (>=0.8.0)", "brotli (>=1.0.9)", "brotlipy (>=0.6.0)"] secure = ["pyOpenSSL (>=0.14)", "cryptography (>=1.3.4)", "idna (>=2.0.0)", "certifi", "ipaddress"] socks = ["PySocks (>=1.5.6,!=1.5.7,<2.0)"] +[[package]] +name = "uvicorn" +version = "0.17.6" +description = "The lightning-fast ASGI server." +category = "main" +optional = false +python-versions = ">=3.7" + +[package.dependencies] +asgiref = ">=3.4.0" +click = ">=7.0" +h11 = ">=0.8" + +[package.extras] +standard = ["websockets (>=10.0)", "httptools (>=0.4.0)", "watchgod (>=0.6)", "python-dotenv (>=0.13)", "PyYAML (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "colorama (>=0.4)"] + [[package]] name = "websocket-client" version = "1.3.2" @@ -651,7 +757,7 @@ multidict = ">=4.0" [metadata] lock-version = "1.1" python-versions = "^3.10" -content-hash = "edd9dde4eb50716c4d5a4ab85c56ccc2bcd2391a2f21ba05382491c2bb797172" +content-hash = "5e1dd02bf3166bc33c20313f2184351a0ff6a7c0025f5dc69f780cafd55839d9" [metadata.files] aiofiles = [ @@ -740,6 +846,10 @@ aiosqlite = [ {file = "aiosqlite-0.17.0-py3-none-any.whl", hash = "sha256:6c49dc6d3405929b1d08eeccc72306d3677503cc5e5e43771efc1e00232e8231"}, {file = "aiosqlite-0.17.0.tar.gz", hash = "sha256:f0e6acc24bc4864149267ac82fb46dfb3be4455f99fe21df82609cc6e6baee51"}, ] +asgiref = [ + {file = "asgiref-3.5.2-py3-none-any.whl", hash = "sha256:1d2880b792ae8757289136f1db2b7b99100ce959b2aa57fd69dab783d05afac4"}, + {file = "asgiref-3.5.2.tar.gz", hash = "sha256:4a29362a6acebe09bf1d6640db38c1dc3d9217c68e6f9f6204d72667fc19a424"}, +] async-generator = [ {file = "async_generator-1.10-py3-none-any.whl", hash = "sha256:01c7bf666359b4967d2cda0000cc2e4af16a0ae098cbffcb8472fb9e8ad6585b"}, {file = "async_generator-1.10.tar.gz", hash = "sha256:6ebb3d106c12920aaae42ccb6f787ef5eefdcdd166ea3d628fa8476abe712144"}, @@ -768,6 +878,31 @@ attrs = [ {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, ] +black = [ + {file = "black-22.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2497f9c2386572e28921fa8bec7be3e51de6801f7459dffd6e62492531c47e09"}, + {file = "black-22.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5795a0375eb87bfe902e80e0c8cfaedf8af4d49694d69161e5bd3206c18618bb"}, + {file = "black-22.3.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e3556168e2e5c49629f7b0f377070240bd5511e45e25a4497bb0073d9dda776a"}, + {file = "black-22.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67c8301ec94e3bcc8906740fe071391bce40a862b7be0b86fb5382beefecd968"}, + {file = "black-22.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:fd57160949179ec517d32ac2ac898b5f20d68ed1a9c977346efbac9c2f1e779d"}, + {file = "black-22.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:cc1e1de68c8e5444e8f94c3670bb48a2beef0e91dddfd4fcc29595ebd90bb9ce"}, + {file = "black-22.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d2fc92002d44746d3e7db7cf9313cf4452f43e9ea77a2c939defce3b10b5c82"}, + {file = "black-22.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:a6342964b43a99dbc72f72812bf88cad8f0217ae9acb47c0d4f141a6416d2d7b"}, + {file = "black-22.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:328efc0cc70ccb23429d6be184a15ce613f676bdfc85e5fe8ea2a9354b4e9015"}, + {file = "black-22.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:06f9d8846f2340dfac80ceb20200ea5d1b3f181dd0556b47af4e8e0b24fa0a6b"}, + {file = "black-22.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4efa5fad66b903b4a5f96d91461d90b9507a812b3c5de657d544215bb7877a"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:e8477ec6bbfe0312c128e74644ac8a02ca06bcdb8982d4ee06f209be28cdf163"}, + {file = "black-22.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:637a4014c63fbf42a692d22b55d8ad6968a946b4a6ebc385c5505d9625b6a464"}, + {file = "black-22.3.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:863714200ada56cbc366dc9ae5291ceb936573155f8bf8e9de92aef51f3ad0f0"}, + {file = "black-22.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:10dbe6e6d2988049b4655b2b739f98785a884d4d6b85bc35133a8fb9a2233176"}, + {file = "black-22.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:cee3e11161dde1b2a33a904b850b0899e0424cc331b7295f2a9698e79f9a69a0"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5891ef8abc06576985de8fa88e95ab70641de6c1fca97e2a15820a9b69e51b20"}, + {file = "black-22.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:30d78ba6bf080eeaf0b7b875d924b15cd46fec5fd044ddfbad38c8ea9171043a"}, + {file = "black-22.3.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ee8f1f7228cce7dffc2b464f07ce769f478968bfb3dd1254a4c2eeed84928aad"}, + {file = "black-22.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6ee227b696ca60dd1c507be80a6bc849a5a6ab57ac7352aad1ffec9e8b805f21"}, + {file = "black-22.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:9b542ced1ec0ceeff5b37d69838106a6348e60db7b8fdd245294dc1d26136265"}, + {file = "black-22.3.0-py3-none-any.whl", hash = "sha256:bc58025940a896d7e5356952228b68f793cf5fcb342be703c3a2669a1488cb72"}, + {file = "black-22.3.0.tar.gz", hash = "sha256:35020b8886c022ced9282b51b5a875b6d1ab0c387b31a065b84db7c33085ca79"}, +] certifi = [ {file = "certifi-2021.10.8-py2.py3-none-any.whl", hash = "sha256:d62a0163eb4c2344ac042ab2bdf75399a71a2d8c7d47eac2e2ee91b9d6339569"}, {file = "certifi-2021.10.8.tar.gz", hash = "sha256:78884e7c1d4b00ce3cea67b44566851c4343c120abd683433ce934a68ea58872"}, @@ -776,6 +911,10 @@ charset-normalizer = [ {file = "charset-normalizer-2.0.12.tar.gz", hash = "sha256:2857e29ff0d34db842cd7ca3230549d1a697f96ee6d3fb071cfa6c7393832597"}, {file = "charset_normalizer-2.0.12-py3-none-any.whl", hash = "sha256:6881edbebdb17b39b4eaaa821b438bf6eddffb4468cf344f09f89def34a8b1df"}, ] +click = [ + {file = "click-8.1.3-py3-none-any.whl", hash = "sha256:bb4d8133cb15a609f44e8213d9b391b0809795062913b383c62be0ee95b1db48"}, + {file = "click-8.1.3.tar.gz", hash = "sha256:7682dc8afb30297001674575ea00d1814d808d6a36af415a82bd481d37ba7b8e"}, +] colorama = [ {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, @@ -861,6 +1000,10 @@ funcsigs = [ {file = "funcsigs-1.0.2-py2.py3-none-any.whl", hash = "sha256:330cc27ccbf7f1e992e69fef78261dc7c6569012cf397db8d3de0234e6c937ca"}, {file = "funcsigs-1.0.2.tar.gz", hash = "sha256:a7bb0f2cf3a3fd1ab2732cb49eba4252c2af4240442415b4abce3b87022a8f50"}, ] +h11 = [ + {file = "h11-0.13.0-py3-none-any.whl", hash = "sha256:8ddd78563b633ca55346c8cd41ec0af27d3c79931828beffb46ce70a379e7442"}, + {file = "h11-0.13.0.tar.gz", hash = "sha256:70813c1135087a248a4d38cc0e1a0181ffab2188141a93eaf567940c3957ff06"}, +] idna = [ {file = "idna-3.3-py3-none-any.whl", hash = "sha256:84d9dd047ffa80596e0f246e2eab0b391788b0503584e8945f2368256d2735ff"}, {file = "idna-3.3.tar.gz", hash = "sha256:9d643ff0a55b762d5cdb124b8eaa99c66322e2157b69160bc32796e824360e6d"}, @@ -939,6 +1082,10 @@ multidict = [ {file = "multidict-6.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:4bae31803d708f6f15fd98be6a6ac0b6958fcf68fda3c77a048a4f9073704aae"}, {file = "multidict-6.0.2.tar.gz", hash = "sha256:5ff3bd75f38e4c43f1f470f2df7a4d430b821c4ce22be384e1459cb57d6bb013"}, ] +mypy-extensions = [ + {file = "mypy_extensions-0.4.3-py2.py3-none-any.whl", hash = "sha256:090fedd75945a69ae91ce1303b5824f428daf5a028d2f6ab8a299250a846f15d"}, + {file = "mypy_extensions-0.4.3.tar.gz", hash = "sha256:2d82818f5bb3e369420cb3c4060a7970edba416647068eb4c5343488a6c604a8"}, +] nanoid = [ {file = "nanoid-2.0.0-py3-none-any.whl", hash = "sha256:90aefa650e328cffb0893bbd4c236cfd44c48bc1f2d0b525ecc53c3187b653bb"}, {file = "nanoid-2.0.0.tar.gz", hash = "sha256:5a80cad5e9c6e9ae3a41fa2fb34ae189f7cb420b2a5d8f82bd9d23466e4efa68"}, @@ -985,10 +1132,22 @@ packaging = [ {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, ] +pathspec = [ + {file = "pathspec-0.9.0-py2.py3-none-any.whl", hash = "sha256:7d15c4ddb0b5c802d161efc417ec1a2558ea2653c2e8ad9c19098201dc1c993a"}, + {file = "pathspec-0.9.0.tar.gz", hash = "sha256:e564499435a2673d586f6b2130bb5b95f04a3ba06f81b8f895b651a3c76aabb1"}, +] +platformdirs = [ + {file = "platformdirs-2.5.2-py3-none-any.whl", hash = "sha256:027d8e83a2d7de06bbac4e5ef7e023c02b863d7ea5d079477e722bb41ab25788"}, + {file = "platformdirs-2.5.2.tar.gz", hash = "sha256:58c8abb07dcb441e6ee4b11d8df0ac856038f944ab98b7be6b27b2a3c7feef19"}, +] pluggy = [ {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, ] +prometheus-client = [ + {file = "prometheus_client-0.14.1-py3-none-any.whl", hash = "sha256:522fded625282822a89e2773452f42df14b5a8e84a86433e3f8a189c1d54dc01"}, + {file = "prometheus_client-0.14.1.tar.gz", hash = "sha256:5459c427624961076277fdc6dc50540e2bacb98eebde99886e59ec55ed92093a"}, +] protobuf = [ {file = "protobuf-3.20.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:3cc797c9d15d7689ed507b165cd05913acb992d78b379f6014e013f9ecb20996"}, {file = "protobuf-3.20.1-cp310-cp310-manylinux2014_aarch64.whl", hash = "sha256:ff8d8fa42675249bb456f5db06c00de6c2f4c27a065955917b28c4f15978b9c3"}, @@ -1275,6 +1434,10 @@ urllib3 = [ {file = "urllib3-1.26.9-py2.py3-none-any.whl", hash = "sha256:44ece4d53fb1706f667c9bd1c648f5469a2ec925fcf3a776667042d645472c14"}, {file = "urllib3-1.26.9.tar.gz", hash = "sha256:aabaf16477806a5e1dd19aa41f8c2b7950dd3c746362d7e3223dbe6de6ac448e"}, ] +uvicorn = [ + {file = "uvicorn-0.17.6-py3-none-any.whl", hash = "sha256:19e2a0e96c9ac5581c01eb1a79a7d2f72bb479691acd2b8921fce48ed5b961a6"}, + {file = "uvicorn-0.17.6.tar.gz", hash = "sha256:5180f9d059611747d841a4a4c4ab675edf54c8489e97f96d0583ee90ac3bfc23"}, +] websocket-client = [ {file = "websocket-client-1.3.2.tar.gz", hash = "sha256:50b21db0058f7a953d67cc0445be4b948d7fc196ecbeb8083d68d94628e4abf6"}, {file = "websocket_client-1.3.2-py3-none-any.whl", hash = "sha256:722b171be00f2b90e1d4fb2f2b53146a536ca38db1da8ff49c972a4e1365d0ef"}, diff --git a/pyproject.toml b/pyproject.toml index 7c53b2d..6d21c41 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,20 +1,23 @@ [tool.poetry] name = "jarvis-tasks" -version = "0.7.1" +version = "0.8.0" description = "" authors = ["Your Name "] [tool.poetry.dependencies] python = "^3.10" jarvis-core = {git = "https://git.zevaryx.com/stark-industries/jarvis/jarvis-core.git", rev = "main"} -dis-snek = "*" +naff = "^1.2.0" aiohttp = "^3.8.1" tweepy = {extras = ["async"], version = "^4.8.0"} asyncpraw = "^7.5.0" rook = "^0.1.170" +uvicorn = "^0.17.6" +prometheus-client = "^0.14.1" [tool.poetry.dev-dependencies] pytest = "^7.1" +black = {version = "^22.3.0", allow-prereleases = true} [build-system] requires = ["poetry-core>=1.0.0"]