A Flask extension that provides multi-dimensional profiling capabilities for Flask applications
Project description
Flask-MultiProfiler
A Flask extension that provides multi-dimensional profiling capabilities for Flask applications.
Features
- Code profiling: Statistical profiling using pyinstrument to identify performance bottlenecks
- SQL profiling: Database query profiling using sqltap to track query performance
- Search profiling: Custom profiler for OpenSearch/Elasticsearch operations via trace logging
Installation
pip install flask-multiprofiler
For search profiling support, install with the appropriate extra:
# For OpenSearch
pip install flask-multiprofiler[opensearch]
# For Elasticsearch
pip install flask-multiprofiler[elasticsearch]
Quick Start
from flask import Flask
from flask_multiprofiler import MultiProfiler
app = Flask(__name__)
profiler = MultiProfiler(app)
# Or using the factory pattern
profiler = MultiProfiler()
profiler.init_app(app)
Usage
- Navigate to
/profilerin your Flask application - Start a profiling session by selecting which profilers to enable
- Use your application normally - profiling data is collected automatically
- View profiling reports through the web interface
Configuration
# Storage directory for profiling sessions (default: "{Flask.instance_path}/profiler")
MULTIPROFILER_STORAGE = "/path/to/storage"
# Logger name for search profiling (default: "opensearchpy.trace")
MULTIPROFILER_SEARCH_TRACE_LOGGER = "elasticsearchpy.trace"
# Session lifetime (default: 60 minutes)
MULTIPROFILER_ACTIVE_SESSION_LIFETIME = timedelta(minutes=30)
# Endpoints to ignore during profiling (regex patterns)
MULTIPROFILER_IGNORED_ENDPOINTS = ["static", r"profiler\..+", "api.health"]
# Permission function (default: lambda: True)
MULTIPROFILER_PERMISSION = lambda: current_user.is_admin
Development
This project uses uv for dependency management and just for task automation. Tests use testcontainers to run PostgreSQL and OpenSearch in Docker containers.
# Run tests
just test
# Run all code-quality checks
just check
Architecture
- Each profiling session creates its own SQLite database for storing profiling reports in a self-contained HTML format
- Profilers can be enabled/disabled individually per session
- Web interface provides session management and report viewing
Search Profiler Compatibility
The search profiler currently supports:
- OpenSearch client (opensearch-py)
- Elasticsearch client v7.x only (elasticsearch~=7.17.12)
Both clients use the same logging mechanism (plain Python logger) for trace logging, which our profiler intercepts. Elasticsearch v8.x uses a different tracing approach and is not currently supported.
Future Development
Planned features and improvements:
- Redis profiling: Track Redis operations and performance
- Enhanced search query viewer: Improved visualization and analysis of search queries
- SQL profiler rewrite: Replace sqltap with custom implementation to add stack traces and better integration
Non-Goals
This module intentionally keeps things simple and will not support:
- Customizing rendering: Reports are stored as fully renderable HTML pages to keep complexity low
- REST API: No plans to expose profiling data via API endpoint
- Async support: Focused on traditional Flask applications only
- Full type hints: Minimal type annotations to maintain simplicity
- Translations/I18N: This is an sysadmin/developer interface
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file flask_multiprofiler-0.1.0.tar.gz.
File metadata
- Download URL: flask_multiprofiler-0.1.0.tar.gz
- Upload date:
- Size: 24.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8ce585bbc458325dfc834de7a5094dbe39e3d1cbe6533115a65e8ee5fabf90eb
|
|
| MD5 |
db64522633d397450309b4ae1a8b7c64
|
|
| BLAKE2b-256 |
454bbfac8a8625601878da56c900c38a9333c7d0d1701e8d6c3aa69f96fa6b66
|
File details
Details for the file flask_multiprofiler-0.1.0-py3-none-any.whl.
File metadata
- Download URL: flask_multiprofiler-0.1.0-py3-none-any.whl
- Upload date:
- Size: 34.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1eab18950be506d39bf5cadf17b951a669c6c4fc5fbcce6389b3f034bf21a74c
|
|
| MD5 |
13e006a9039b675bba6d3f628ad2c885
|
|
| BLAKE2b-256 |
29b35ce921d4a904080516b062cb682ec2b1bcdd4e634a24c83906d8387ca0a3
|