Skip to content

Commit

Permalink
* Fixed metrics generation
Browse files Browse the repository at this point in the history
  • Loading branch information
korsakovs committed Feb 22, 2024
1 parent a652236 commit 8ae03bd
Show file tree
Hide file tree
Showing 6 changed files with 28 additions and 9 deletions.
1 change: 1 addition & 0 deletions docker/bot/dev.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,5 @@ RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev libffi-dev
WORKDIR /merci-bot
COPY . .
RUN pip install -r requirements.txt
RUN mkdir -p /multiprocprometheus
CMD ["python", "-m", "thankyou.slackbot"]
9 changes: 8 additions & 1 deletion docker/bot/gunicorn.Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,11 @@ RUN apk update && apk add postgresql-dev gcc python3-dev musl-dev libffi-dev
WORKDIR /merci-bot
COPY . .
RUN pip install -r requirements.txt
CMD ["gunicorn", "--worker-class=sync", "--worker-connections=100", "--workers", "5", "--bind", "unix:/nginx_sockets/merci_bot.sock", "thankyou.slackbot.utils.wsgi:slack_app()"]
RUN mkdir -p /multiprocprometheus
CMD ["gunicorn", \
"--worker-class=sync", \
"--worker-connections=100", \
"--workers", "5", \
"--bind", "unix:/nginx_sockets/merci_bot.sock", \
"--config=thankyou/slackbot/utils/gunicorn_conf.py", \
"thankyou.slackbot.utils.wsgi:slack_app()"]
1 change: 1 addition & 0 deletions docker/docker-compose.common.yml
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ services:
SLACK_APP_TOKEN: ${SLACK_APP_TOKEN}
DATABASE_ENCRYPTION_SECRET_KEY: ${DATABASE_ENCRYPTION_SECRET_KEY}
MERCI_ENV: ${MERCI_ENV}
PROMETHEUS_MULTIPROC_DIR: /multiprocprometheus
labels:
logging: "promtail"
logging_jobname: "merci-bot"
Expand Down
4 changes: 1 addition & 3 deletions thankyou/slackbot/utils/app.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@
from typing import Callable

from prometheus_client import Histogram
from prometheus_client.utils import INF
from slack_bolt import App
from slack_sdk import WebClient

Expand Down Expand Up @@ -80,7 +79,6 @@ def is_socket_mode() -> bool:
name='slack_handler_metric_histogram',
documentation='Time spent processing request',
labelnames=["merci_handler", "merci_handler_type"],
# buckets=(.1, .2, .5, .75, 1.0, 2.0, 5.0, 10.0, INF)
)


Expand Down Expand Up @@ -116,7 +114,7 @@ def wrapper(*args, **kwargs):
try:
return func(*args, **kwargs)
finally:
logger.info(f"Sending metrics for {func.__name__}")
# logger.info(f"Sending metrics for {func.__name__}")
metric_wrapper.observe(time.time() - now)

return wrapper
Expand Down
3 changes: 3 additions & 0 deletions thankyou/slackbot/utils/gunicorn_conf.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
def worker_exit(server, worker):
from prometheus_client import multiprocess
multiprocess.mark_process_dead(worker.pid)
19 changes: 14 additions & 5 deletions thankyou/slackbot/utils/wsgi.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
from flask import Flask, request, Response
from prometheus_client import make_wsgi_app, start_http_server
from prometheus_client import CollectorRegistry, multiprocess, generate_latest, CONTENT_TYPE_LATEST
from slack_bolt.adapter.flask import SlackRequestHandler
from werkzeug.middleware.dispatcher import DispatcherMiddleware

from thankyou.dao import dao
from thankyou.slackbot.utils.app import app
Expand All @@ -17,9 +16,19 @@ def create_flask_app(slack_app_):

dao.set_scoped_session(flask_scoped_session(dao.session_maker, flask_app))

flask_app.wsgi_app = DispatcherMiddleware(flask_app.wsgi_app, {
'/metrics': make_wsgi_app()
})
@flask_app.route("/metrics")
def metrics():
registry = CollectorRegistry()
multiprocess.MultiProcessCollector(registry)
data = generate_latest(registry)
return Response(data, mimetype=CONTENT_TYPE_LATEST)

@flask_app.route("/slack/metrics")
def slack_metrics():
registry = CollectorRegistry()
multiprocess.MultiProcessCollector(registry)
data = generate_latest(registry)
return Response(data, mimetype=CONTENT_TYPE_LATEST)

@flask_app.route("/slack/events", methods=["POST"])
def slack_events():
Expand Down

0 comments on commit 8ae03bd

Please sign in to comment.