R/jira_issues_old.R

Defines functions jira_mba_fixes jira_issues_old

Documented in jira_issues_old jira_mba_fixes

#' jira_issues_old
#'
#' Extract issue data from the JIRA API (old method)
#' @param project_url The JIRA project ULR
#' @param project_id The JIRA project ID
#' @param username The JIRA username
#' @param password The JIRA jira_password
#' @param max_results How many results you want to get back
#' @param jira_method Which JIRA method would you like to use? Can be either
#' @seealso \code{\link{jira_extract_old}} which is a key component of this function
#' @export

jira_issues_old <- function(project_url,project_id,username,password,max_results=NULL,jira_method = 'generic') {

require(httr)
require(jsonlite)
require(tidyverse)

start_point <- 0
tbl <- tibble()

repeat {
  if(max_results > 50 || missing(max_results)) {
    url <- paste(project_url,'/rest/api/2/search?jql=project=',project_id,'&startAt=',start_point,'&maxResults=',50,sep='')
  } else {
    url <- paste(project_url,'/rest/api/2/search?jql=project=',project_id,'&startAt=',start_point,'&maxResults=',max_results,sep='')
  }

  x <- GET(url,authenticate(username,password))

  if (x$status_code == 401) {
    print('Sorry, 401 Authentication failed')
    return(tbl)
  } else if (x$status_code == 403) {
    print('Sorry, 403 error')
    break
  } else {
    x <- content(x,'parsed')

    z <- x$issues

    if(length(z)<=1) {
      print('We are finished')
      break
    }

    if (jira_method == 'nglbops') {

      y <- sapply(z,jira_extract_old_nglbops)

    } else {

      y <- sapply(z,jira_extract_old)

    }


    roll <- 1:length(z)

    for (i in roll) {
      ex <- as_tibble(y[,i])
      tbl <- bind_rows(tbl,ex)
    }

    start_point <- start_point + length(z)

    if(!missing(max_results)) {
      max_results <- max_results - length(z)

      if(max_results <= 0 || length(z) == 0) {
        print('Yes, we are stopping')
        break
      }
    }
  }
}

today <- as.POSIXct(Sys.time())

if (jira_method == 'generic') {

datecols <- c('created','resolved')

namecols <- c('issue_reporter','issue_assignee')

possible_statuses <- tibble(issue_status = c('Backlog','Concept','Descoped','Done',
                                             'Duplicate','Groom','Implement','In Review',
                                             'Ready for Implementation','Test','To Do'),
                           progress_order = c(1,4,NA,9,NA,3,6,7,5,8,2),
                           progress_score = progress_order/9)

tbl2 <- tbl %>%
    mutate(days_to_resolve = ifelse(!is.na(resolved),round(as.numeric(resolved - created,units='days'),digits=2),NA),
        is_resolved = ifelse(is.na(resolved),0,1),
        issue_url = paste('https://jira.neugelb.com/browse/',issue_nr,sep=''),
        days_since_creation = as.numeric(today - created,units='days'),
        issue_title = gsub(',',' - ',issue_title,fixed=TRUE),
        priority_score = ifelse(issue_priority == 'Critical',1,
                          ifelse(issue_priority == 'High',0.75,
                          ifelse(issue_priority == 'Medium',0.5,
                          ifelse(issue_priority == 'Low',0.25,0.1)))),
        open_tickets = ifelse(issue_status_category %in% c('To Do','In Progress'),1,0)
                     ) %>%
     left_join(possible_statuses,by='issue_status') %>%
     arrange(desc(created)) %>%
     distinct()

return(tbl2)

} else {

  return(tbl)

}

}

#' jira_mba_fixes
#'
#' Transforming data to make it suitable for the MBA project
#' @param x The data frame from mba_issues
#' @seealso \code{\link{mba_issues}} which pulls the data
#' @export

jira_mba_fixes <- function(x) {

require(tidyverse)

  z <- x %>%
    mutate(issue_label = ifelse(is.na(issue_label) & issue_assignee %in% c('Paul Vetter','Sameh Mikhail','Willy Dinata'),'Android',
                 ifelse(is.na(issue_label) & issue_assignee %in% c('Dmitrij Vojtov','Arash Kashi','Ahmed@Neugelb.com','Fernando@Neugelb.com'),'iOS',issue_label)),
    issue_component = gsub('Atm','ATM',issue_component),
    tickets_android = ifelse(issue_label == 'Android',1,0),
    tickets_ios = ifelse(issue_label == 'iOS',1,0),
    tickets_android = ifelse(is.na(tickets_android),0,tickets_android),
    tickets_ios = ifelse(is.na(tickets_ios),0,tickets_ios),
    issue_reporter = gsub("D'aurelio","D'Aurelio",issue_reporter),
    issue_assignee = gsub("D'aurelio","D'Aurelio",issue_assignee),
    issue_assignee = gsub("Gabi","Gabriel Holz",issue_assignee),
    issue_reporter = gsub("Gabi","Gabriel Holz",issue_reporter),
    issue_reporter = gsub('Felix','Felix Lebedinzew',issue_reporter),
    issue_assignee = gsub('Felix','Felix Lebedinzew',issue_assignee),
    issue_assignee = gsub('Cq2hutt','CoBa Mobile Team',issue_assignee),
    issue_reporter = gsub('Cq2hutt','CoBa Mobile Team',issue_reporter)
  )

  return(z)
}
neugelb/njira documentation built on Sept. 2, 2020, 7:02 p.m.