"""Utils about alert""" import json import os from datetime import datetime, timezone import requests from jira import JIRA from requests.auth import HTTPBasicAuth from sliutil.secret import get_secret JIRA_USERNAME = os.getenv("JIRA_USERNAME") JIRA_PASSWORD = get_secret("JIRA_PASSWORD") JIRA_URL = os.getenv("JIRA_URL") def search(jql: str) -> dict: """Search issues by jql""" url = f"{JIRA_URL}/rest/api/3/search/jql" auth = HTTPBasicAuth(JIRA_USERNAME, JIRA_PASSWORD) headers = {"Accept": "application/json"} query = { "jql": jql, "fields": "key,summary,status,customfield_10149", "maxResults": "200", } response = requests.request("GET", url, headers=headers, params=query, auth=auth) return json.loads(response.text)["issues"] def create_alerts(alerts: list) -> None: """Create alert issues to Jira, and send events to record break sla""" if len(alerts) > 0: jira = JIRA( server=JIRA_URL, basic_auth=(JIRA_USERNAME, JIRA_PASSWORD), ) issues = jira.create_issues(field_list=alerts) print(f"create jira issues, len: {len(alerts)}, issues: {issues}") def send_events(events: list) -> None: """Send event to record break sla""" if len(events) > 0: for event in events: try: resp = requests.post( url="https://b9u12esjuf.execute-api.us-west-2.amazonaws.com/activity", data=event, timeout=5, ) resp.raise_for_status() print(f"send event, resp: {resp.read()}") except requests.exceptions.HTTPError: pass def generate_alert_content(cluster_id: str, summary: str) -> dict: """Generate content of alert""" return { "project": {"key": "O11Y"}, "summary": summary, "description": f"cluster_id={cluster_id}", "issuetype": {"name": "Task"}, "priority": {"name": "Warning"}, "components": [{"name": "sli"}], } def generate_event_content(name: str) -> bytes: """Generate content of event""" return bytes( json.dumps( { "type": "Event", "name": name, "target_id": "clusterid", "calibration_time": int(datetime.now(timezone.utc).timestamp()), "source": "manual", "source_key": "test", } ), "utf8", ) if __name__ == "__main__": jql = "project = O11Y AND summary ~ DedicatedTierSLABreak AND created >= -7d ORDER BY created DESC" issues = search(jql) cluster_issue = {} for issue in issues: cluster_issue[issue["fields"]["customfield_10149"]] = { "key": issue["key"], "status": f"{issue['fields']['status']['name']}", } print(cluster_issue)