<!-- omit in toc -->
# Prometheus Alert Model *for Python*
[![Current Package Version](https://badge.fury.io/py/prometheus-alert-model.svg)](https://pypi.python.org/pypi/prometheus-alert-model)
[![Maintenance](https://img.shields.io/badge/maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)
[![Supported Python Versions](https://img.shields.io/pypi/pyversions/prometheus-alert-model.svg)](https://pypi.python.org/pypi/prometheus-alert-model)
[![Downloads](https://pepy.tech/badge/prometheus-alert-model/month)](https://pepy.tech/project/prometheus-alert-model/month)
[![docs](https://img.shields.io/badge/docs-here-blue)](https://trallnag.github.io/prometheus-alert-model-for-python/)
![release](https://github.com/trallnag/prometheus-alert-model-for-python/workflows/release/badge.svg)
![commit](https://github.com/trallnag/prometheus-alert-model-for-python/workflows/commit/badge.svg)
[![codecov](https://codecov.io/gh/trallnag/prometheus-alert-model-for-python/branch/master/graph/badge.svg)](https://codecov.io/gh/trallnag/prometheus-alert-model-for-python)
[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
This project provides the Pydantic models `AlertGroup` and `Alert` that
represent a payload from Prometheus Alertmanager. In addition, it also includes
a number of useful utility methods that perform actions on alert data. It can
be used as a drop-in wherever you want to work with Prometheus Alertmanager
alert payload data.
A prominent example for using it is a FastAPI route that receives alert payloads.
Simply add `AlertGroup` as a parameter to the handler.
<!-- omit in toc -->
## Features
- Pydantic models that matches the official Alertmanager payload schema.
- Fields `specific_annotations` and `specific_labels` in every alert that
contain elements that are specific to the respective alert.
- Methods to update common annotations and labels.
- Methods to remove, add, update, override and prefix annotations and labels.
- Every single method is well covered by tests.
<!-- omit in toc -->
## Table of Contents
- [Usage](#usage)
- [Motivation](#motivation)
- [Development](#development)
## Usage
Using the model is pretty straight-forward. Take a look at the automatically
generated docs or the source code itself.
Here is a very short example how you could use the model. It removes all
annotations and labels starting with two underscores and adds a prefix that
contains namespace info to the summary label. Finally it prints specific
elements for all alerts in the group.
```python
from prometheus_alert_model import AlertGroup
from fastapi import FastAPI
from re import compile
app = FastAPI()
@app.post("/alert")
def post_alert(alert_group: AlertGroup):
alert_group.remove_re(
annotations=r"^(__.*)$",
labels=compile(r"^(__.*)$")
)
alert_group.add_prefix(labels={"summary": "Prototyping system: "})
for alert in alert_group.alerts:
print(alert.specific_annotations
print(alert.specific_labels)
```
<!-- omit in toc -->
### `Alert` Model
In the following all attributes you can find within a `Alert`. Notice
the custom attributes `specific_annotations` and `specific_labels` that
include elements that are specific to the respective alert in context of the
complete `AlertGroup` / payload.
```python
fingerprint: str
status: str
starts_at: datetime
ends_at: datetime
generator_url: str
annotations: Dict[str, str]
labels: Dict[str, str]
specific_annotations: Dict[str, str]
specific_labels: Dict[str, str]
```
<!-- omit in toc -->
### `AlertGroup` Model
In the following all attributes you can find within a `AlertGroup`. It
represents a single payload from Alertmanager.
```python
receiver: str
status: str
external_url: str
version: str
group_key: str
truncated_alerts: int = =0
group_labels: Dict[str, str]
common_annotations: Dict[str, str]
common_labels: Dict[str, str]
alerts: List[Alert]
```
Here is a short summary over the included utility methods (for full
documentation please refer to type hints or the automatically generated docs):
- `update_specific_elements`: Updates specific labels and annotations.
- `update_specific_annotations`: Updates specific annotations.
- `update_specific_labels`: Updates specific labels.
- `update_common_elements`: Updates common annotations and labels.
- `update_common_annotations`: Updates common annotations.
- `update_common_labels`: Updates common labels.
- `remove`: Removes annotations and labels by name.
- `remove_re`: Removes annotations and labels by matching names with regex.
- `add`: Adds annotations and labels but skips existing elements.
- `override`: Adds annotations and labels and overrides existing elements.
- `add_prefix`: Adds prefix to annotations and labels.
## Motivation
I have a bunch of Python scripts that work in some shape or form with Prometheus
Alertmanager data. Instead of duplicating the model across all of them I prefer
to have a single small package that is well tested and reuse it again and again.
This way I don't have to reimplement utility functions / methods.
## Development
Please refer to ["DEVELOPMENT.md"](DEVELOPMENT.md).
Raw data
{
"_id": null,
"home_page": "https://github.com/trallnag/prometheus-alert-model-for-python",
"name": "prometheus-alert-model-leo",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8,<4.0",
"maintainer_email": "",
"keywords": "prometheus,alertmanager,alerting,pydantic",
"author": "Tim Schwenke",
"author_email": "tim.and.trallnag+code@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/6c/89/19e695f5a6246c8d99528b0947c34f7e2de9abfc5edf5bfaf6fc48b75609/prometheus_alert_model_leo-1.1.0.tar.gz",
"platform": null,
"description": "<!-- omit in toc -->\n# Prometheus Alert Model *for Python*\n\n[![Current Package Version](https://badge.fury.io/py/prometheus-alert-model.svg)](https://pypi.python.org/pypi/prometheus-alert-model)\n[![Maintenance](https://img.shields.io/badge/maintained%3F-yes-green.svg)](https://GitHub.com/Naereen/StrapDown.js/graphs/commit-activity)\n[![Supported Python Versions](https://img.shields.io/pypi/pyversions/prometheus-alert-model.svg)](https://pypi.python.org/pypi/prometheus-alert-model)\n[![Downloads](https://pepy.tech/badge/prometheus-alert-model/month)](https://pepy.tech/project/prometheus-alert-model/month)\n[![docs](https://img.shields.io/badge/docs-here-blue)](https://trallnag.github.io/prometheus-alert-model-for-python/)\n\n![release](https://github.com/trallnag/prometheus-alert-model-for-python/workflows/release/badge.svg)\n![commit](https://github.com/trallnag/prometheus-alert-model-for-python/workflows/commit/badge.svg)\n[![codecov](https://codecov.io/gh/trallnag/prometheus-alert-model-for-python/branch/master/graph/badge.svg)](https://codecov.io/gh/trallnag/prometheus-alert-model-for-python)\n[![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)\n\nThis project provides the Pydantic models `AlertGroup` and `Alert` that\nrepresent a payload from Prometheus Alertmanager. In addition, it also includes\na number of useful utility methods that perform actions on alert data. It can\nbe used as a drop-in wherever you want to work with Prometheus Alertmanager\nalert payload data.\n\nA prominent example for using it is a FastAPI route that receives alert payloads.\nSimply add `AlertGroup` as a parameter to the handler.\n\n<!-- omit in toc -->\n## Features\n\n- Pydantic models that matches the official Alertmanager payload schema.\n- Fields `specific_annotations` and `specific_labels` in every alert that\n contain elements that are specific to the respective alert.\n- Methods to update common annotations and labels.\n- Methods to remove, add, update, override and prefix annotations and labels.\n- Every single method is well covered by tests.\n\n<!-- omit in toc -->\n## Table of Contents\n\n- [Usage](#usage)\n- [Motivation](#motivation)\n- [Development](#development)\n\n## Usage\n\nUsing the model is pretty straight-forward. Take a look at the automatically\ngenerated docs or the source code itself. \n\nHere is a very short example how you could use the model. It removes all\nannotations and labels starting with two underscores and adds a prefix that\ncontains namespace info to the summary label. Finally it prints specific\nelements for all alerts in the group.\n\n```python\n\nfrom prometheus_alert_model import AlertGroup\nfrom fastapi import FastAPI\nfrom re import compile\n\napp = FastAPI()\n\n@app.post(\"/alert\")\ndef post_alert(alert_group: AlertGroup):\n alert_group.remove_re(\n annotations=r\"^(__.*)$\",\n labels=compile(r\"^(__.*)$\")\n )\n\n alert_group.add_prefix(labels={\"summary\": \"Prototyping system: \"})\n \n for alert in alert_group.alerts:\n print(alert.specific_annotations\n print(alert.specific_labels)\n```\n\n<!-- omit in toc -->\n### `Alert` Model\n\nIn the following all attributes you can find within a `Alert`. Notice\nthe custom attributes `specific_annotations` and `specific_labels` that\ninclude elements that are specific to the respective alert in context of the\ncomplete `AlertGroup` / payload.\n\n```python\nfingerprint: str\nstatus: str\nstarts_at: datetime\nends_at: datetime\ngenerator_url: str\nannotations: Dict[str, str]\nlabels: Dict[str, str]\nspecific_annotations: Dict[str, str]\nspecific_labels: Dict[str, str]\n```\n\n<!-- omit in toc -->\n### `AlertGroup` Model\n\nIn the following all attributes you can find within a `AlertGroup`. It\nrepresents a single payload from Alertmanager.\n\n```python\nreceiver: str\nstatus: str\nexternal_url: str\nversion: str\ngroup_key: str\ntruncated_alerts: int = =0\ngroup_labels: Dict[str, str]\ncommon_annotations: Dict[str, str]\ncommon_labels: Dict[str, str]\nalerts: List[Alert]\n```\n\nHere is a short summary over the included utility methods (for full\ndocumentation please refer to type hints or the automatically generated docs):\n\n- `update_specific_elements`: Updates specific labels and annotations.\n- `update_specific_annotations`: Updates specific annotations.\n- `update_specific_labels`: Updates specific labels.\n- `update_common_elements`: Updates common annotations and labels.\n- `update_common_annotations`: Updates common annotations.\n- `update_common_labels`: Updates common labels.\n- `remove`: Removes annotations and labels by name.\n- `remove_re`: Removes annotations and labels by matching names with regex.\n- `add`: Adds annotations and labels but skips existing elements.\n- `override`: Adds annotations and labels and overrides existing elements.\n- `add_prefix`: Adds prefix to annotations and labels.\n\n## Motivation\n\nI have a bunch of Python scripts that work in some shape or form with Prometheus\nAlertmanager data. Instead of duplicating the model across all of them I prefer\nto have a single small package that is well tested and reuse it again and again.\nThis way I don't have to reimplement utility functions / methods.\n\n## Development\n\nPlease refer to [\"DEVELOPMENT.md\"](DEVELOPMENT.md).\n\n",
"bugtrack_url": null,
"license": "Apache-2.0",
"summary": "Pydantic model of the Prometheus Alertmanager alert payload",
"version": "1.1.0",
"project_urls": {
"Homepage": "https://github.com/trallnag/prometheus-alert-model-for-python",
"Repository": "https://github.com/trallnag/prometheus-alert-model-for-python"
},
"split_keywords": [
"prometheus",
"alertmanager",
"alerting",
"pydantic"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "39d0854032325e9dcc60b82e4da66aea6359675441a62c5953f16c7d7035d8fd",
"md5": "dce9610f7d112367f4c2eb9d5e747510",
"sha256": "68df12dcfa3bdae68fe93f80ea2b4fc573a4f5a1e7c390c6a2a723b923b6d1e0"
},
"downloads": -1,
"filename": "prometheus_alert_model_leo-1.1.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "dce9610f7d112367f4c2eb9d5e747510",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8,<4.0",
"size": 10568,
"upload_time": "2023-10-07T10:29:01",
"upload_time_iso_8601": "2023-10-07T10:29:01.478766Z",
"url": "https://files.pythonhosted.org/packages/39/d0/854032325e9dcc60b82e4da66aea6359675441a62c5953f16c7d7035d8fd/prometheus_alert_model_leo-1.1.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "6c8919e695f5a6246c8d99528b0947c34f7e2de9abfc5edf5bfaf6fc48b75609",
"md5": "5e347c607efffdd30339272c0f90bb62",
"sha256": "27308fd89d7fb3bc9efa209fb65c8dc5c03aeb3fda47903ae756c7e415a70e37"
},
"downloads": -1,
"filename": "prometheus_alert_model_leo-1.1.0.tar.gz",
"has_sig": false,
"md5_digest": "5e347c607efffdd30339272c0f90bb62",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.8,<4.0",
"size": 9066,
"upload_time": "2023-10-07T10:29:02",
"upload_time_iso_8601": "2023-10-07T10:29:02.367824Z",
"url": "https://files.pythonhosted.org/packages/6c/89/19e695f5a6246c8d99528b0947c34f7e2de9abfc5edf5bfaf6fc48b75609/prometheus_alert_model_leo-1.1.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-07 10:29:02",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "trallnag",
"github_project": "prometheus-alert-model-for-python",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "prometheus-alert-model-leo"
}