def test_get_redmine_ticket_for_notification(self): # Create a redmine ticket and query headers = self.get_api_headers('admin', 'test') tmp = dt.datetime.now() + dt.timedelta(days=2) due_date = dt.datetime.strftime(tmp, "%Y-%m-%d") project = 'ocean-observatory' subject = 'Redmine API - Test Issue' description = 'Get this work done ASAP' priority = 1 assigned_id = 1 ticket_id = create_redmine_ticket_for_notification(project, subject, description, priority, assigned_id) self.assertTrue(ticket_id is not None) self.assertTrue(isinstance(ticket_id, int)) self.assertTrue(ticket_id > 0) result = get_redmine_ticket_for_notification(ticket_id) self.assertTrue('id' in result) self.assertTrue('project' in result) self.assertTrue('subject' in result) self.assertTrue('description' in result) self.assertTrue('status' in result) self.assertTrue('assigned_to' in result) self.assertTrue('priority' in result) # Prepare for redmine priority, status and assigned_ti assigned_to = 'Redmine Admin' status = 'New' redmine_priority = None if priority == 1: redmine_priority = 'Low' # Validate result values returned from redmine self.assertTrue(project != result['project']) self.assertEquals(result['subject'], subject) self.assertEquals(result['description'], description) self.assertEquals(result['status'], status) self.assertEquals(result['assigned_to'], assigned_to) self.assertEquals(result['priority'], redmine_priority) project = 'foo' subject = 'Redmine API - Negative Test' description = 'This should fail.' priority = 1 assigned_id = None result = create_redmine_ticket_for_notification(project, subject, description, priority, assigned_id) self.assertTrue(result is None) result = get_redmine_ticket_for_notification(-1) self.assertTrue(result is None) result = get_redmine_ticket_for_notification(ticket_id) project = None subject = None assigned_id = None result = update_redmine_ticket_for_notification(ticket_id, project, subject, description, priority, assigned_id) self.assertTrue(result is None)
def update_notification_ticket(id): """ Update redmine ticket as a part of notification process (for alerts only) """ debug = False #log = False result = None try: # Get alert, definition and notification to update redmine ticket alert, definition, notification = get_redmine_info_from_alert(id) if alert is None or definition is None or notification is None: message = 'Failed to retrieve alert, definition or notification for update_notification_ticket. (id: %d)' % id raise Exception(message) # Populate required fields to create a redmine ticket project = current_app.config['REDMINE_PROJECT_ID'] # Use user_event_notification for determining assigned user's redmine id redmine_id = 1 name = None assigned_user = User.query.get(notification.user_id) if assigned_user is not None: name = assigned_user.first_name + ' ' + assigned_user.last_name tmp_id = get_user_redmine_id(project, name) if tmp_id is not None: redmine_id = tmp_id else: # todo issue - assigned_user is None message = "Invalid User ID, User record not found." #if log: print '\n message: ', message return bad_request(message) # Get alert ticket id ticket_id = alert.ticket_id #if debug: print '\n (debug) update_notification_ticket id: ', ticket_id ts_updated = dt.datetime.strftime(dt.datetime.now(), "%Y-%m-%dT%H:%M:%S") update_info = '\nUpdated: %s ' % ts_updated # Get current redmine ticket redmine_ticket = get_redmine_ticket_for_notification(ticket_id) # Set fields for update project = redmine_ticket['project'] subject = redmine_ticket['subject'] description = redmine_ticket['description'] priority = redmine_ticket['priority'] if 'assigned_to' in redmine_ticket: assigned_id = redmine_ticket['assigned_to'] else: # Use user_event_notification for determining assigned user's redmine id redmine_id = 1 name = None assigned_user = User.query.get(notification.user_id) if assigned_user is not None: name = assigned_user.first_name + ' ' + assigned_user.last_name tmp_id = get_user_redmine_id(project, name) if tmp_id is not None: redmine_id = tmp_id else: # todo issue - assigned_user is None message = "Invalid User ID, User record not found." #if log: print '\n message: ', message return bad_request(message) assigned_id = redmine_id # Update subject for recent receipt of alert (not past escalate boundary yet) description += update_info result = update_redmine_ticket_for_notification( ticket_id, project, subject, description, priority, assigned_id) if result is None: message = 'Failed to update redmine ticket (ticket_id: %d' % ticket_id raise Exception(message) if debug: print '\n \tupdate_notification_ticket - ticket_id: ', ticket_id return ticket_id except Exception as err: message = err.message current_app.logger.exception('[update_notification_ticket] %s ' % message) return result
def update_notification_redmine(alert, definition, notification): """ Update redmine ticket as a part of alert notification process. """ result = None try: # Get alert ticket id ticket_id = alert.ticket_id # Populate required fields to update a redmine ticket project = current_app.config['REDMINE_PROJECT_ID'] # Use user_event_notification for determining assigned user's redmine id redmine_id = 1 assigned_user = User.query.get(notification.user_id) if assigned_user is not None: name = assigned_user.first_name + ' ' + assigned_user.last_name tmp_id = get_user_redmine_id(project, name) if tmp_id is not None: redmine_id = tmp_id else: message = 'Invalid User ID, User record not found.' current_app.logger.info(message) raise Exception(message) assigned_id = redmine_id ts_updated = dt.datetime.strftime(dt.datetime.now(), "%Y-%m-%dT%H:%M:%S") update_info = '\nUpdated: %s ' % ts_updated # If no previous ticket_id associated (case where 'use_redmine' was enabled AFter alert has escalated) if ticket_id == 0: # Create redmine ticket prefix = (alert.event_type).upper() + ': ' subject = prefix + alert.event_response description = alert.event_response priority = definition.severity ticket_id = create_redmine_ticket_for_notification(project, subject, description, priority, redmine_id) if ticket_id is None: message = 'Failed to create base redmine ticket (on update) for alert notification (id:%d).' % alert.id current_app.logger.info(message) raise Exception(message) # Update escalate fields. if ticket_id is not None: escalated = True ts_escalated = dt.datetime.strftime(dt.datetime.now(), "%Y-%m-%dT%H:%M:%S") SystemEvent.update_alert_alarm_escalation(id=alert.id, ticket_id=ticket_id, escalated=escalated, ts_escalated=ts_escalated) # Get existing redmine ticket redmine_ticket = get_redmine_ticket_for_notification(ticket_id) # Set fields for update project = redmine_ticket['project'] subject = redmine_ticket['subject'] description = redmine_ticket['description'] priority = redmine_ticket['priority'] if 'assigned_to' in redmine_ticket: assigned_id = redmine_ticket['assigned_to'] # Update subject for recent receipt of alert (not past escalate boundary yet) description += update_info result = update_redmine_ticket_for_notification(ticket_id, project, subject, description, priority, assigned_id) if result is None: message = 'Failed to update redmine ticket (ticket_id: %d)' % ticket_id current_app.logger.info(message) raise Exception(message) return ticket_id except Exception as err: message = '[update_redmine_notification_ticket] %s ' % str(err.message) current_app.logger.info(message) return result
def update_notification_ticket(id): """ Update redmine ticket as a part of notification process (for alerts only) """ debug = False #log = False result = None try: # Get alert, definition and notification to update redmine ticket alert, definition, notification = get_redmine_info_from_alert(id) if alert is None or definition is None or notification is None: message = 'Failed to retrieve alert, definition or notification for update_notification_ticket. (id: %d)' % id raise Exception(message) # Populate required fields to create a redmine ticket project = current_app.config['REDMINE_PROJECT_ID'] # Use user_event_notification for determining assigned user's redmine id redmine_id = 1 name = None assigned_user = User.query.get(notification.user_id) if assigned_user is not None: name = assigned_user.first_name + ' ' + assigned_user.last_name tmp_id = get_user_redmine_id(project, name) if tmp_id is not None: redmine_id = tmp_id else: # todo issue - assigned_user is None message = "Invalid User ID, User record not found." #if log: print '\n message: ', message return bad_request(message) # Get alert ticket id ticket_id = alert.ticket_id #if debug: print '\n (debug) update_notification_ticket id: ', ticket_id ts_updated = dt.datetime.strftime(dt.datetime.now(), "%Y-%m-%dT%H:%M:%S") update_info = '\nUpdated: %s ' % ts_updated # Get current redmine ticket redmine_ticket = get_redmine_ticket_for_notification(ticket_id) # Set fields for update project = redmine_ticket['project'] subject = redmine_ticket['subject'] description = redmine_ticket['description'] priority = redmine_ticket['priority'] if 'assigned_to' in redmine_ticket: assigned_id = redmine_ticket['assigned_to'] else: # Use user_event_notification for determining assigned user's redmine id redmine_id = 1 name = None assigned_user = User.query.get(notification.user_id) if assigned_user is not None: name = assigned_user.first_name + ' ' + assigned_user.last_name tmp_id = get_user_redmine_id(project, name) if tmp_id is not None: redmine_id = tmp_id else: # todo issue - assigned_user is None message = "Invalid User ID, User record not found." #if log: print '\n message: ', message return bad_request(message) assigned_id = redmine_id # Update subject for recent receipt of alert (not past escalate boundary yet) description += update_info result = update_redmine_ticket_for_notification(ticket_id, project, subject, description, priority, assigned_id) if result is None: message = 'Failed to update redmine ticket (ticket_id: %d' % ticket_id raise Exception(message) if debug: print '\n \tupdate_notification_ticket - ticket_id: ', ticket_id return ticket_id except Exception as err: message = err.message current_app.logger.exception('[update_notification_ticket] %s ' % message) return result