def bug_handler(self, msg):
        """
        Handle a modified or created Bugzilla bug and update Neo4j if necessary.

        :param dict msg: a message to be processed
        """
        bug_data = msg['body']['msg']['bug']
        bug_params = {
            'id_': str(bug_data['id']),
            'creation_time': timestamp_to_datetime(bug_data['creation_time']),
            'modified_time':
            timestamp_to_datetime(bug_data['last_change_time']),
            'priority': bug_data['priority'],
            'product_name': bug_data['product']['name'],
            'product_version': bug_data['version']['name'],
            'resolution': bug_data['resolution'],
            'severity': bug_data['severity'],
            'short_description': bug_data['summary'],
            'status': bug_data['status']['name'],
            'target_milestone': bug_data['target_milestone']['name'],
        }
        assignee = User.create_or_update({
            'username':
            bug_data['assigned_to']['login'].split('@')[0],
            'email':
            bug_data['assigned_to']['login']
        })[0]
        qa_contact = User.create_or_update({
            'username':
            bug_data['qa_contact']['login'].split('@')[0],
            'email':
            bug_data['qa_contact']['login']
        })[0]
        reporter = User.create_or_update({
            'username':
            bug_data['reporter']['login'].split('@')[0],
            'email':
            bug_data['reporter']['login']
        })[0]

        bug = BugzillaBug.create_or_update(bug_params)[0]

        bug.conditional_connect(bug.assignee, assignee)
        bug.conditional_connect(bug.qa_contact, qa_contact)
        bug.conditional_connect(bug.reporter, reporter)
Ejemplo n.º 2
0
    def update_neo4j(self, bugs):
        """
        Update Neo4j with Bugzilla bugs information from Teiid.

        :param list bugs: a list of dictionaries
        """
        log.info('Beginning to upload data to Neo4j')
        count = 0

        for bug_dict in bugs:
            bug = BugzillaBug.create_or_update(
                dict(id_=bug_dict['bug_id'],
                     severity=bug_dict['bug_severity'],
                     status=bug_dict['bug_status'],
                     creation_time=bug_dict['creation_ts'],
                     modified_time=bug_dict['delta_ts'],
                     priority=bug_dict['priority'],
                     product_name=bytes(bug_dict['product_name'],
                                        'utf-8').decode(),
                     product_version=bug_dict['version'],
                     classification=bug_dict['classification'],
                     resolution=bug_dict['resolution'],
                     target_milestone=bug_dict['target_milestone'],
                     votes=bug_dict['votes'],
                     short_description=bytes(bug_dict['short_desc'],
                                             'utf-8').decode()))[0]

            count += 1
            log.info('Uploaded {0} bugs out of {1}'.format(count, len(bugs)))

            # Creating User nodes and updating their relationships
            if bug_dict['assigned_to']:
                assignee = self.create_user_node(bug_dict['assigned_to_email'])
                bug.conditional_connect(bug.assignee, assignee)

            if bug_dict['reporter']:
                reporter = self.create_user_node(bug_dict['reported_by_email'])
                bug.conditional_connect(bug.reporter, reporter)

            if bug_dict['qa_contact']:
                qa_contact = self.create_user_node(
                    bug_dict['qa_contact_email'])
                bug.conditional_connect(bug.qa_contact, qa_contact)