Add prometheus
This commit is contained in:
parent
488234ba79
commit
1983e6135c
9 changed files with 271 additions and 8 deletions
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
{
|
||||
"python.formatting.provider": "black"
|
||||
}
|
|
@ -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:
|
||||
|
|
26
jarvis_tasks/prometheus/serve.py
Normal file
26
jarvis_tasks/prometheus/serve.py
Normal file
|
@ -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()
|
38
jarvis_tasks/prometheus/stats.py
Normal file
38
jarvis_tasks/prometheus/stats.py
Normal file
|
@ -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"],
|
||||
)
|
|
@ -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 <t:{timestamp}:f>",
|
||||
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:
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
||||
|
|
|
@ -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 <t:{timestamp}:f>",
|
||||
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))
|
||||
|
|
171
poetry.lock
generated
171
poetry.lock
generated
|
@ -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"},
|
||||
|
|
|
@ -1,20 +1,23 @@
|
|||
[tool.poetry]
|
||||
name = "jarvis-tasks"
|
||||
version = "0.7.1"
|
||||
version = "0.8.0"
|
||||
description = ""
|
||||
authors = ["Your Name <you@example.com>"]
|
||||
|
||||
[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"]
|
||||
|
|
Loading…
Add table
Reference in a new issue