Allow count_exceptions to add the error type as a label
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- À l'abandon
- Stack technique
- python
- Domaine
- observability-sre
Piste de recherche
Commencez par Counter.count_exceptions et context_managers.ExceptionCounter, puis suivez la manière dont la méthode with gère les types d’exception et les labels. Définissez comment ajouter un label d’erreur tout en préservant les appels et le comportement existants, puis vérifiez l’endpoint demandé et le cas d’utilisation des labels d’exception avec des tests de rétrocompatibilité.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
I'd like count_exceptions to add the error type as a label so I can track what errors are occurring against what endpoints for my application.
I'd like to do this via the with method.
from prometheus_client import Counter
ERRORS = Counter(
'http_request_errors_count',
'Count of exceptions that happen during an HTTP request',
['method', 'endpoint', 'error']
)
async def error_middleware(request, handler):
try:
with ERRORS.count_exceptions(request.method, request.path):
return await handler(request)
except SomeHTTPException as e:
...
To do this I've created my own custom Counter classes.
from prometheus_client import Counter, context_managers
class CustomExceptionCounter(context_managers.ExceptionCounter):
def __init__(self, counter, exception, *labels):
self._counter = counter
self._exception = exception
self._labels = labels
def __exit__(self, typ, value, traceback):
if isinstance(value, self._exception):
self._counter.labels(*(*self._labels, typ.__name__)).inc() # Append exception's name as a label
class CustomCounter(Counter):
def count_exceptions(self, *labels, exception=Exception):
return CustomExceptionCounter(self, exception, *labels)
ERRORS = CustomCounter(
'http_request_errors_count',
'Count of CancelledError exceptions',
['method', 'endpoint', 'error']
)
I think there is a general solution that's backward compatible, I've just not figured it out. Is this something you'd support? I'd be happy to submit a PR if I can figure out how to make this backward compatible.
- Langage dominant
- Python
- Étoiles
- 4.4k
- Forks
- 876
- Merge moyen
- 8 j 4 h
- PR mergées (30 j)
- 1
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de prometheus/client_python
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
prometheus/client_python#1177 · 1 commentaire ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 45/100
prometheus/client_python#1210 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 58/100
prometheus/client_python#1199 · 1 réaction ·
-
Difficulté 5/5 Plus d'une semaine Accessibilité débutants 35/100
prometheus/client_python#1176 ·
-
WSL and MultiProcessCollector Ouverte
Difficulté 1/5 1-3 heures Accessibilité débutants 52/100
prometheus/client_python#1126 · 2 commentaires ·
Toutes les issues de prometheus/client_python
Issues similaires
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
stephrobert/dsoxlab#238 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
sublimehq/package_control#1780 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
nwg-piotr/nwg-displays#145 ·