コード例 #1
0
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)
コード例 #2
0
    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)
コード例 #3
0
    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
コード例 #4
0
 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
コード例 #5
0
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