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)
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)