ticket_id = None if tid_match and (len(tid_match.groups()) >= 1): ticket_id = tid_match.group(1) if jira_issue.fields.assignee: ticket_acted_upon = True break elif (not rt2jira_regex.search(existing_comment.body)) and action_match and (len(action_match.groups()) >= 1) and ('Correspondence added' in action_match.group(1) or 'Status changed' in action_match.group(1) or 'Taken by' in action_match.group(1) or (jira_issue.fields.customfield_16300 != ticket_id and 'Ticket created by' in action_match.group(1))): logger.info('Ticket (' + jira_issue.key + ') was acted upon') syslog.syslog(syslog.LOG_INFO, 'Ticket (' + jira_issue.key + ') was acted upon') ticket_acted_upon = True break if ticket_acted_upon: resolve(jira_issue, config.get('jira', 'resolve_resolution_name'), 'Auto resolving ticket after ' + config.get('jira', 'auto_resolve_after_days') + ' days, as it appears to be acted upon. Please reopen if this ticket is still active.') else: resolve(jira_issue, 'Task Dropped', 'Task dropped due to inactivity after ' + config.get('jira', 'auto_resolve_after_days') + ' days. Please reopen if further action is still required.') except JIRAError as e: logger.error('JIRA processing error occurred.') syslog.syslog(syslog.LOG_ERR, 'JIRA processing error occurred.') logger.error(e) syslog.syslog(syslog.LOG_ERR, e) sys.exit(1) except: logger.error('Unknown processing error occurred.') syslog.syslog(syslog.LOG_ERR, 'Unknown processing error occurred.') sys.exit(1)
if sanitized_summary: logger.debug('JQL Search Terms: ' + sanitized_summary) syslog.syslog(syslog.LOG_DEBUG, 'JQL Search Terms: ' + sanitized_summary) # Check if JIRA ticket already exists. related_jira_query = 'key != ' + jira_issue.key + ' AND project = ' + config.get('jira', 'project') + ' AND component = "' + config.get('jira', 'component') + '" AND text ~ "' + sanitized_summary + '" ORDER BY updated DESC' related_jira_results = jira.search_issues('level IS EMPTY AND ' + related_jira_query, maxResults=config.getint('jira', 'auto_reply_max_results')) # Recent search results. recent_jira_query = 'key != ' + jira_issue.key + ' AND project = ' + config.get('jira', 'project') + ' AND component = "' + config.get('jira', 'component') + '" ORDER BY created DESC' recent_jira_results = jira.search_issues('level IS EMPTY AND ' + recent_jira_query, maxResults=config.getint('jira', 'auto_reply_max_results')) # Construct message to send to the requestors. template_issue = jira.issue(config.get('jira', 'auto_reply_template_ticket')) if not template_issue: logger.error('Unable to find template issue specified: ' + config.get('jira', 'auto_reply_template_ticket')) syslog.syslog(syslog.LOG_ERR, 'Unable to find template issue specified: ' + config.get('jira', 'auto_reply_template_ticket')) sys.exit(1) if not related_jira_query: related_jira_query = "" if not recent_jira_query: recent_jira_query = "" reply_message = template_issue.fields.description % {"jira_url_prefix": config.get('jira', 'jira_url_prefix'), "issue_key": jira_issue.key, "issue_summary": jira_issue.fields.summary, "related_results": format_search_results(related_jira_results), "recent_results": format_search_results(recent_jira_results), "related_query": quote_plus(related_jira_query), "recent_query": quote_plus(recent_jira_query)} if len(requestors) > 0: cc_addresses = ', '.join(list(requestors)) logger.debug('Sending auto-reply to (' + cc_addresses + ') for JIRA ticket (' + jira_issue.key + ')') syslog.syslog(syslog.LOG_DEBUG, 'Sending auto-reply to (' + cc_addresses + ') for JIRA ticket (' + jira_issue.key + ')')
'level IS EMPTY AND ' + related_jira_query, maxResults=config.getint('jira', 'auto_reply_max_results')) # Recent search results. recent_jira_query = 'key != ' + jira_issue.key + ' AND project = ' + config.get( 'jira', 'project') + ' AND component = "' + config.get( 'jira', 'component') + '" ORDER BY created DESC' recent_jira_results = jira.search_issues( 'level IS EMPTY AND ' + recent_jira_query, maxResults=config.getint('jira', 'auto_reply_max_results')) # Construct message to send to the requestors. template_issue = jira.issue( config.get('jira', 'auto_reply_template_ticket')) if not template_issue: logger.error('Unable to find template issue specified: ' + config.get('jira', 'auto_reply_template_ticket')) syslog.syslog( syslog.LOG_ERR, 'Unable to find template issue specified: ' + config.get('jira', 'auto_reply_template_ticket')) sys.exit(1) if not related_jira_query: related_jira_query = "" if not recent_jira_query: recent_jira_query = "" reply_message = template_issue.fields.description % { "jira_url_prefix": config.get('jira', 'jira_url_prefix'), "issue_key": jira_issue.key, "issue_summary": jira_issue.fields.summary,
logger.info('Ticket (' + jira_issue.key + ') was acted upon') syslog.syslog(syslog.LOG_INFO, 'Ticket (' + jira_issue.key + ') was acted upon') ticket_acted_upon = True break if ticket_acted_upon: resolve( jira_issue, config.get('jira', 'resolve_resolution_name'), 'Auto resolving ticket after ' + config.get('jira', 'auto_resolve_after_days') + ' days, as it appears to be acted upon. Please reopen if this ticket is still active.' ) else: resolve( jira_issue, 'Task Dropped', 'Task dropped due to inactivity after ' + config.get('jira', 'auto_resolve_after_days') + ' days. Please reopen if further action is still required.') except JIRAError as e: logger.error('JIRA processing error occurred.') syslog.syslog(syslog.LOG_ERR, 'JIRA processing error occurred.') logger.error(e) syslog.syslog(syslog.LOG_ERR, e) sys.exit(1) except: logger.error('Unknown processing error occurred.') syslog.syslog(syslog.LOG_ERR, 'Unknown processing error occurred.') sys.exit(1)