A Python mongodb monitor and profiler for development.
Install using pip/pipenv/etc. (we recommend poetry for sane dependency management):
$ poetry add mongomon --dev
Initialize before you set up your MongoDB connection:
from mongomon import Monitor, Config
Monitor(Config(file_capture=".*/(wiki.*)")).monitor()
Actually, use an environment flag to guard against activating mongomon in production (unless this is something you want):
from mongomon import Monitor, Config
import os
if os.getenv("MGMON"):
Monitor(Config(file_capture=".*/(wiki.*)", low_watermark_us=0)).monitor()
Use file_capture
to specify how to extract relevant project file paths from traces, rather than absolute file paths.
We've taken the example from Flask-PyMongo to show how easy it is to have mongomon integrated and running.
You can look at the integration here. To run it:
$ poetry shell
$ cd examples/wiki && pip install -r requirements
$ python wiki.py
Your main configuration points for mongomon are:
file_capture
- an aesthetic configuration point for capturing files for your project. Usually of the form.*/(your-project.*)
, content in parenthesis are a regular expression capture group, and is what we actually extract.low_watermark_us
- a threshold in microseconds (us) above which mongomon starts working (yellow).high_watermark_us
- a high threshold in microseconds (us) above which mongomon displays timing as alert (red).
Rest of configuration looks like so (with their defaults and comments):
# cleans up stack trace with uninteresting things. Usually packages, standard library, etc.
ignores = attrib(
default=[
".*/site-packages/.*",
".*traceback.format_stack.*",
r".*/lib/python\d\.\d+/.*",
]
)
# shows a file, cleans up absolute path to a file
file_capture = attrib(default="(.*)")
# above this value mongomon starts working
low_watermark_us = attrib(default=5000)
# above this value mongomon flags as alert
high_watermark_us = attrib(default=40000)
# customize how mongodb query looks like before printing to screen
query_filter = attrib(default=identity)
# want to print to something else? replace this
print_fn = attrib(default=print_)
# want shorter stack traces? customize this
stack_preprocess = attrib(default=trim_last)
To all Contributors - you make this happen, thanks!
Copyright (c) 2019 @jondot. See LICENSE for further details.