Fixed the f-string typo on line 240: change_type = f"Severity changed: {prev.get('severity')} → {entry['severity']}"
This commit is contained in:
parent
4e352e01fb
commit
3f5cb1a1c5
@ -17,7 +17,7 @@ FEED_URL = "https://aastatus.net/atom.cgi"
|
||||
WEBHOOK_URL = "https://discord.com/api/webhooks/XXXXXXX" # Discord webhook URL
|
||||
STATE_FILE = Path("/tmp/aaisp_atom_state.json")
|
||||
|
||||
# Event colors (default fallbacks)
|
||||
# Event colors
|
||||
COLOR_MINOR_OPEN = 0xFFFF00 # yellow
|
||||
COLOR_MAJOR_OPEN = 0xFF0000 # red
|
||||
COLOR_CLOSED = 0x2ECC71 # green
|
||||
@ -54,7 +54,9 @@ def fetch_feed(url):
|
||||
raise
|
||||
|
||||
|
||||
def get_first_valid_entry(feed_xml):
|
||||
def parse_feed_entries(feed_xml):
|
||||
"""Return a list of all valid entries in the feed."""
|
||||
entries = []
|
||||
try:
|
||||
root = ET.fromstring(feed_xml)
|
||||
atom_ns = "{http://www.w3.org/2005/Atom}"
|
||||
@ -104,7 +106,7 @@ def get_first_valid_entry(feed_xml):
|
||||
updated = entry.findtext(f"{atom_ns}updated", "")
|
||||
published = entry.findtext(f"{atom_ns}published", "")
|
||||
|
||||
return {
|
||||
entries.append({
|
||||
"id": id_elem.text.strip(),
|
||||
"title": html.unescape(title_text),
|
||||
"link": link,
|
||||
@ -114,9 +116,9 @@ def get_first_valid_entry(feed_xml):
|
||||
"severity": severity,
|
||||
"status": status,
|
||||
"content": html.unescape(content_text)
|
||||
}
|
||||
})
|
||||
|
||||
return None
|
||||
return entries
|
||||
|
||||
except ET.ParseError as e:
|
||||
logger.error(f"XML parsing error: {e}")
|
||||
@ -134,26 +136,18 @@ def html_to_markdown(html_content):
|
||||
return md.strip()[:3500]
|
||||
|
||||
|
||||
### COLOR LOGIC (refactored, table-driven) ###
|
||||
### COLOR LOGIC (table-driven) ###
|
||||
|
||||
def get_event_color(status, severity):
|
||||
"""
|
||||
Determines the Discord embed colour based on status & severity.
|
||||
Uses a lookup table for clarity and easy extensions.
|
||||
"""
|
||||
|
||||
# Special case colours for Planned Maintenance (PEW)
|
||||
SPECIAL_COLORS = {
|
||||
("PEW", "Open"): 0x51D3D4,
|
||||
("PEW", "Planned"): 0x51D3D4,
|
||||
}
|
||||
|
||||
# Direct match first
|
||||
key = (severity, status)
|
||||
if key in SPECIAL_COLORS:
|
||||
return SPECIAL_COLORS[key]
|
||||
|
||||
# Normal rules
|
||||
if status == "Closed":
|
||||
return COLOR_CLOSED
|
||||
|
||||
@ -212,18 +206,18 @@ def main():
|
||||
logger.info("[*] Fetching feed...")
|
||||
feed_xml = fetch_feed(FEED_URL)
|
||||
|
||||
logger.info("[*] Parsing...")
|
||||
entry = get_first_valid_entry(feed_xml)
|
||||
if not entry:
|
||||
logger.warning("No entry found")
|
||||
logger.info("[*] Parsing feed entries...")
|
||||
entries = parse_feed_entries(feed_xml)
|
||||
if not entries:
|
||||
logger.warning("No entries found")
|
||||
return
|
||||
|
||||
incident_id = entry["id"]
|
||||
state = load_state()
|
||||
|
||||
for entry in entries:
|
||||
incident_id = entry["id"]
|
||||
prev = state.get(incident_id)
|
||||
|
||||
# Determine if an update is needed
|
||||
must_post = False
|
||||
change_type = "New entry"
|
||||
|
||||
@ -231,13 +225,12 @@ def main():
|
||||
must_post = True
|
||||
change_type = "New Incident Detected"
|
||||
else:
|
||||
# Compare important fields
|
||||
if entry["status"] != prev.get("status"):
|
||||
must_post = True
|
||||
change_type = f"Status changed: {prev.get('status')} → {entry['status']}"
|
||||
elif entry["severity"] != prev.get("severity"):
|
||||
must_post = True
|
||||
change_type = f"Severity changed: {prev.get('severity']} → {entry['severity']}"
|
||||
change_type = f"Severity changed: {prev.get('severity')} → {entry['severity']}"
|
||||
elif entry["updated"] != prev.get("updated"):
|
||||
must_post = True
|
||||
change_type = "Feed updated"
|
||||
@ -246,17 +239,18 @@ def main():
|
||||
change_type = "Content updated"
|
||||
|
||||
if must_post:
|
||||
logger.info(f"[+] Posting update: {change_type}")
|
||||
logger.info(f"[+] Posting update: {change_type} ({entry['title']})")
|
||||
payload = build_discord_payload(entry, change_type)
|
||||
post_to_discord(WEBHOOK_URL, payload)
|
||||
|
||||
# Save state no matter what
|
||||
# Save state
|
||||
state[incident_id] = {
|
||||
"status": entry["status"],
|
||||
"severity": entry["severity"],
|
||||
"updated": entry["updated"],
|
||||
"content": entry["content"]
|
||||
}
|
||||
|
||||
save_state(state)
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user