Exemplo n.º 1
0
    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)
Exemplo n.º 2
0
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
Exemplo n.º 4
0
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