Skip to content
Snippets Groups Projects
Unverified Commit f753a4b6 authored by Varac's avatar Varac
Browse files

Remove stale pylertalertmanager

parent 7ba45f43
Branches
Tags
No related merge requests found
......@@ -13,10 +13,9 @@ from query_alertmanager import get_alerts
def show_alerts(opts):
"""Show alerts."""
alerts = get_alerts(url=opts["url"],
port=opts["port"],
user=opts["user"],
password=opts["password"])
alerts = get_alerts(
url=opts["url"], port=opts["port"], user=opts["user"], password=opts["password"]
)
# Construct waybar output
# https://github.com/Alexays/Waybar/wiki/Module:-Custom#return-type
......@@ -24,35 +23,34 @@ def show_alerts(opts):
# "class": "$class", "percentage": $percentage }.
# This means the output should also be on a single line
output = {}
output["text"] = alerts['summary']
if alerts['summary'] == "Cant connect":
output["text"] = alerts["summary"]
if alerts["summary"] == "Cant connect":
output["alt"] = "error"
output["tooltip"] = "Some error occurred."
else:
if alerts["count"] > 0:
output["alt"] = "firing"
output["tooltip"] = '\n'.join(alerts['alerts'])
output["tooltip"] = "\n".join(alerts["alerts"])
else:
output["alt"] = "snafu"
output["tooltip"] = "Situation normal, all fucked up 😃"
print(json.dumps(output))
@plac.opt('configpath', "Path to alertmanager config", type=Path)
@plac.opt('mode', "Mode", type=str, choices=['waybar', 'indicator'])
@plac.opt("configpath", "Path to alertmanager config", type=Path)
@plac.opt("mode", "Mode", type=str, choices=["waybar", "indicator"])
# plac.flg('debug', "Enable debug mode")
def main(configpath='~/.config/alertmanager_status/config.yml',
mode="wayland"):
def main(configpath="~/.config/alertmanager_status/config.yml", mode="wayland"):
"""Main function."""
# Load config
with open(Path.expanduser(configpath), encoding="UTF8") as config_file: # type:ignore
opts_raw = yaml.load(config_file, Loader=yaml.FullLoader)
opts = {}
opts["url"] = opts_raw.get('url')
opts["port"] = opts_raw.get('port', 443)
opts["user"] = opts_raw.get('user', 'admin')
opts["password"] = opts_raw.get('password')
opts["url"] = opts_raw.get("url")
opts["port"] = opts_raw.get("port", 443)
opts["user"] = opts_raw.get("user", "admin")
opts["password"] = opts_raw.get("password")
opts["icon_red"] = os.path.abspath("./prometheus.svg")
opts["icon_green"] = os.path.abspath("./prometheus-green.svg")
......
......@@ -10,30 +10,38 @@ Usage:
import json
import plac
import requests
from alertmanager import AlertManager
import traceback
# import pprint
def get_alerts(url, password, port=443, user='admin'):
req = requests.Session()
req.auth = (user, password)
AM = AlertManager(host=url, port=port, req_obj=req)
def get_alerts(url, password, port=443, user="admin"):
"""Query alerts.
https://koumoul.com/openapi-viewer/?url=https://raw.githubusercontent.com/prometheus/alertmanager/master/api/v2/openapi.yaml&proxy=false
"""
api_url = f"{url}/api/v2/alerts"
query = {"silenced": "false"}
req = requests.get(api_url, auth=(user, password), params=query)
alerts_json = req.json()
count = 0
alerts = []
state = "unknown"
try:
alerts_raw = AM.get_alerts()
for alert in alerts_raw:
name = alert['labels']['alertname']
severity = alert['labels']['severity']
instance = alert['labels']['instance']
alert_state = alert['status']['state']
release_name = alert['labels']['release_name']
for alert in alerts_json:
# pp = pprint.PrettyPrinter(indent=2)
# pp.pprint(alert)
name = alert["labels"]["alertname"]
severity = alert["labels"]["severity"]
instance = alert["labels"].get("instance", "")
alert_state = alert["status"]["state"]
release_name = alert["labels"].get("release_name", "")
if severity != "none" and alert_state != "suppressed":
count += 1
alert_text = f'{name}: {instance}, {release_name} ({severity})'
alert_text = f"{name}: {instance}, {release_name} ({severity})"
alerts.append(alert_text)
if count > 2:
......@@ -43,28 +51,26 @@ def get_alerts(url, password, port=443, user='admin'):
elif count == 0:
state = "ok"
summary = f'{count} alerts'
except:
summary = f"{count} alerts"
except Exception as e:
print(f"The error is: {e}")
traceback.print_exc()
summary = "Cant connect"
state = "warning"
return_data = {
'summary': summary,
'alerts': alerts,
'state': state,
'count': count}
return_data = {"summary": summary, "alerts": alerts, "state": state, "count": count}
return return_data
@plac.pos('url', "URL of alertmanager instance", type=str)
@plac.pos('password', "Password", type=str)
@plac.opt('port', "Port of alertmanager instance", type=int, abbrev='P')
@plac.opt('user', "User name", type=str)
def main(url, password, port=443, user='admin'):
@plac.pos("url", "URL of alertmanager instance", type=str)
@plac.pos("password", "Password", type=str)
@plac.opt("port", "Port of alertmanager instance", type=int, abbrev="P")
@plac.opt("user", "User name", type=str)
def main(url, password, port=443, user="admin"):
"""Main function."""
alerts = get_alerts(url=url, password=password, port=port, user=user)
print(json.dumps(alerts))
if __name__ == '__main__':
if __name__ == "__main__":
plac.call(main)
plac
pylertalertmanager
# https://pypi.org/project/plac/#history
plac==1.4.3
# https://pypi.org/project/PyYAML/#history
pyyaml==6.0.1
#Only needed for indicator.py
# pygobject
pyyaml
# Dev deps
neovim
pip-tools
......@@ -4,54 +4,33 @@
#
# pip-compile
#
certifi==2024.2.2
# via requests
charset-normalizer==3.3.2
# via requests
dateparser==1.2.0
# via maya
humanize==4.9.0
# via maya
idna==3.6
# via requests
maya==0.6.1
# via pylertalertmanager
pendulum==3.0.0
# via maya
plac==1.4.3
build==1.1.1
# via pip-tools
click==8.1.7
# via pip-tools
greenlet==3.0.3
# via pynvim
msgpack==1.0.8
# via pynvim
neovim==0.3.1
# via -r requirements.in
pylertalertmanager==0.1.1
packaging==23.2
# via build
pip-tools==7.4.1
# via -r requirements.in
python-box==7.1.1
# via pylertalertmanager
python-dateutil==2.8.2
# via
# dateparser
# pendulum
# snaptime
# time-machine
pytz==2024.1
plac==1.4.3
# via -r requirements.in
pynvim==0.5.0
# via neovim
pyproject-hooks==1.0.0
# via
# dateparser
# maya
# snaptime
# build
# pip-tools
pyyaml==6.0.1
# via -r requirements.in
regex==2023.12.25
# via dateparser
requests==2.31.0
# via pylertalertmanager
six==1.16.0
# via python-dateutil
snaptime==0.2.4
# via maya
time-machine==2.13.0
# via pendulum
tzdata==2024.1
# via pendulum
tzlocal==5.2
# via
# dateparser
# maya
urllib3==2.2.1
# via requests
wheel==0.42.0
# via pip-tools
# The following packages are considered to be unsafe in a requirements file:
# pip
# setuptools
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment