コード例 #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)
コード例 #2
0
def reissue_notification_redmine(alert, definition, notification):
    """ Create another (re-issue) redmine ticket as a part of notification process (for alerts only).
    """
    result = None
    try:
        # Populate required fields to create a redmine ticket and get current redmine ticket
        project = current_app.config['REDMINE_PROJECT_ID']
        redmine_ticket = get_redmine_ticket_for_notification(alert.ticket_id)

        # Set  new notification assigned_id to be same user assigned in alert.ticket_id
        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
            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

        # Update description to indicate previously issued ticket id for this alert.
        update_info = '\n* Associated with previously issued ticket: %d' % alert.ticket_id

        # Create new redmine ticket; on error, log info and return None
        prefix = (alert.event_type).upper() + '*: '
        subject = prefix + alert.event_response
        description = alert.event_response + update_info
        priority = definition.severity
        ticket_id = create_redmine_ticket_for_notification(project, subject, description, priority, assigned_id)
        if ticket_id is None:
            message = 'Failed to reissue (create another)_redmine_ticket.'
            current_app.logger.info('[reissue_redmine_notification_ticket] %s ' % message)
            return result

        result = ticket_id
        return result

    except Exception as err:
        message = '[reissue_redmine_notification_ticket] message: %s' % err.message
        current_app.logger.info(message)
        return result
コード例 #3
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)
コード例 #4
0
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
コード例 #5
0
def reissue_notification_ticket(id):
    """ Create another (re-issue) redmine ticket as a part of notification process (for alerts only)
    """
    debug = False  # development debug
    #log = False     # used in except blocks
    result = None
    try:
        if debug:
            print '\n \t(debug) entered reissue_notification_ticket, id: ', id

        # 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
            current_app.logger.exception('[update_notification_ticket] %s ' %
                                         message)
            raise Exception(message)

        # Populate required fields to create a redmine ticket
        project = current_app.config['REDMINE_PROJECT_ID']

        if debug:
            print '\n \t(debug) -- Reissue redmine ticket (project: %s), get ticket_id...' % project
            print '\n \t(debug) -- Current ticket id: ', alert.ticket_id

        # Get current redmine ticket
        redmine_ticket = get_redmine_ticket_for_notification(alert.ticket_id)
        if debug:
            print '\n \t(debug) -- Current redmine ticket: ', redmine_ticket

        # Set assigned id to reflect update to user currently assigned to alert.ticket_id
        #assigned_id = redmine_ticket['assigned_to']
        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 description to indicate previously issued ticket id for this alert.
        update_info = '\n* Associated with previously issued ticket: %d' % alert.ticket_id
        if debug:
            print '\n \t(debug) -- New reissued ticket update_info: ', update_info

        # Create new redmine ticket
        prefix = (alert.event_type).upper() + '*: '
        subject = prefix + alert.event_response
        description = alert.event_response + update_info
        priority = definition.severity
        if debug: print '\n \t(debug) New ticket subject: ', subject
        if debug: print '\n \t(debug) New ticket description: ', description

        ticket_id = create_redmine_ticket_for_notification(
            project, subject, description, priority, assigned_id)
        if ticket_id is None:
            message = 'Failed to reissue (create another new)_redmine_ticket.'
            current_app.logger.exception('[reissue_notification_ticket] %s ' %
                                         message)
            return result

        # update escalate fields if successful creating the redmine ticket
        escalated = True
        ts_escalated = dt.datetime.strftime(
            dt.datetime.now(),
            "%Y-%m-%dT%H:%M:%S")  # should this be event_time?
        SystemEvent.update_alert_alarm_escalation(id=alert.id,
                                                  ticket_id=ticket_id,
                                                  escalated=escalated,
                                                  ts_escalated=ts_escalated)

        if debug:
            print '\n \t(debug) reissue_notification_ticket -- updated alert_alarm: ', alert.to_json(
            )
        ticket_link_id = TicketSystemEventLink.insert_ticket_link(
            system_event_id=alert.id, ticket_id=ticket_id)
        if debug:
            print '\n \t(debug) -- (notifications) ticket_link_id: ', ticket_link_id
        '''
        # debug - view contents of alert_alarm escalation fields; verify changes have been persisted
        escalated_alert_alarm = SystemEvent.query.get(alert_alarm.id)
        print '\n (debug) *** escalated alert_alarm.to_json(): ', escalated_alert_alarm.to_json()
        '''

        result = ticket_id
        if debug:
            print '\n \treissue_notification_ticket - ticket_id: ', ticket_id

    except Exception as err:
        message = err.message
        current_app.logger.exception('[reissue_notification_ticket] %s ' %
                                     message)
    finally:
        return result
コード例 #6
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
コード例 #7
0
def reissue_notification_ticket(id):
    """ Create another (re-issue) redmine ticket as a part of notification process (for alerts only)
    """
    debug = False   # development debug
    #log = False     # used in except blocks
    result = None
    try:
        if debug: print '\n \t(debug) entered reissue_notification_ticket, id: ', id

        # 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
            current_app.logger.exception('[update_notification_ticket] %s ' % message)
            raise Exception(message)

        # Populate required fields to create a redmine ticket
        project = current_app.config['REDMINE_PROJECT_ID']

        if debug:
            print '\n \t(debug) -- Reissue redmine ticket (project: %s), get ticket_id...' % project
            print'\n \t(debug) -- Current ticket id: ', alert.ticket_id

        # Get current redmine ticket
        redmine_ticket = get_redmine_ticket_for_notification(alert.ticket_id)
        if debug: print '\n \t(debug) -- Current redmine ticket: ', redmine_ticket

        # Set assigned id to reflect update to user currently assigned to alert.ticket_id
        #assigned_id = redmine_ticket['assigned_to']
        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 description to indicate previously issued ticket id for this alert.
        update_info = '\n* Associated with previously issued ticket: %d' % alert.ticket_id
        if debug: print '\n \t(debug) -- New reissued ticket update_info: ', update_info

        # Create new redmine ticket
        prefix = (alert.event_type).upper() + '*: '
        subject = prefix + alert.event_response
        description = alert.event_response + update_info
        priority = definition.severity
        if debug: print '\n \t(debug) New ticket subject: ', subject
        if debug: print '\n \t(debug) New ticket description: ', description

        ticket_id = create_redmine_ticket_for_notification(project, subject, description, priority, assigned_id)
        if ticket_id is None:
            message = 'Failed to reissue (create another new)_redmine_ticket.'
            current_app.logger.exception('[reissue_notification_ticket] %s ' % message)
            return result

        # update escalate fields if successful creating the redmine ticket
        escalated = True
        ts_escalated = dt.datetime.strftime(dt.datetime.now(), "%Y-%m-%dT%H:%M:%S") # should this be event_time?
        SystemEvent.update_alert_alarm_escalation(id=alert.id, ticket_id=ticket_id,
                                                  escalated=escalated, ts_escalated=ts_escalated)

        if debug: print '\n \t(debug) reissue_notification_ticket -- updated alert_alarm: ', alert.to_json()
        ticket_link_id = TicketSystemEventLink.insert_ticket_link(system_event_id=alert.id, ticket_id=ticket_id)
        if debug: print '\n \t(debug) -- (notifications) ticket_link_id: ', ticket_link_id
        '''
        # debug - view contents of alert_alarm escalation fields; verify changes have been persisted
        escalated_alert_alarm = SystemEvent.query.get(alert_alarm.id)
        print '\n (debug) *** escalated alert_alarm.to_json(): ', escalated_alert_alarm.to_json()
        '''

        result = ticket_id
        if debug: print '\n \treissue_notification_ticket - ticket_id: ', ticket_id

    except Exception as err:
        message = err.message
        current_app.logger.exception('[reissue_notification_ticket] %s ' % message)
    finally:
        return result
コード例 #8
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