def handle_triggered_incident(message): global severity_field_id incident = message.get('incident', {}) if incident.get('priority', {}).get('name') != P1_PRIORITY_NAME: # Skip all incidents except with P1 priority. return jira = utils.get_jira() if severity_field_id is None: fields = jira.fields() severity_fields = [f for f in fields if f['name'] == 'Severity'] severity_field_id = severity_fields[0]['id'] entries = message.get('log_entries', []) severity_field_value = 'SEV-0' for entry in entries: issue_dict = { 'project': { 'key': os.environ['JIRA_PROJECT_KEY'] }, 'summary': entry['channel']['summary'], 'description': entry['channel']['details'], 'issuetype': { 'name': 'Bug' }, 'priority': { 'name': 'Highest' }, } if severity_field_id: issue_dict[severity_field_id] = {'value': severity_field_value} issue = jira.create_issue(fields=issue_dict) db.put_incident_issue_relation(incident['id'], issue.key)
def __init__(self, versions, projects): versions = versions projects = projects self.newversions = [] versions.sort(key=LooseVersion) print "Looking for %s through %s" % (versions[0], versions[-1]) newversions = set() for project in projects: url = JIRA_BASE_URL + \ "/rest/api/2/project/%s/versions" % project.upper() try: resp = get_jira(url) except (urllib2.HTTPError, urllib2.URLError, httplib.BadStatusLine): sys.exit(1) datum = json.loads(resp.read()) for data in datum: newversions.add(data['name']) newlist = list(newversions.copy()) newlist.append(versions[0]) newlist.append(versions[-1]) newlist.sort(key=LooseVersion) start_index = newlist.index(versions[0]) end_index = len(newlist) - 1 - newlist[::-1].index(versions[-1]) for newversion in newlist[start_index + 1:end_index]: if newversion in newversions: print "Adding %s to the list" % newversion self.newversions.append(newversion)
def load_jira(params, fail_count): """send query to JIRA and collect with retries""" try: resp = get_jira(JIRA_BASE_URL + "/rest/api/2/search?%s" % params) except (urllib2.URLError, httplib.BadStatusLine) as err: return JiraIter.retry_load(err, params, fail_count) try: data = json.loads(resp.read()) except httplib.IncompleteRead as err: return JiraIter.retry_load(err, params, fail_count) return data
def collect_fields(): """send a query to JIRA and collect field-id map""" try: resp = get_jira(JIRA_BASE_URL + "/rest/api/2/field") data = json.loads(resp.read()) except (urllib2.HTTPError, urllib2.URLError, httplib.BadStatusLine, ValueError): sys.exit(1) field_id_map = {} for part in data: field_id_map[part['name']] = part['id'] return field_id_map
def handle_resolved_incident(message): incident = message.get('incident') issue_key = db.get_issue_key_by_incident_id(incident['id']) if issue_key is not None: jira = utils.get_jira() issue = jira.issue(issue_key) done_transition_ids = [ t['id'] for t in jira.transitions(issue) if t['name'] == 'Done' ] db.delete_relation_by_issue_key(issue_key) if done_transition_ids: try: jira.transition_issue(issue, done_transition_ids[0]) except Exception as e: # Restore relation if something goes wrong is_exists = db.get_issue_key_by_incident_id(incident['id']) if is_exists is None: db.put_incident_issue_relation(incident['id'], issue_key) raise e