module JiraIssue::SLATracker

Public Instance Methods

approaching_sla_due_time?() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 90
def approaching_sla_due_time?
  return false if sla_due_time.nil? || closed?
  sla_remaining_time < sla_warning_time
end
over_sla?() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 95
def over_sla?
  case
  when over_sla == API_OVER_SLA_FIELD_NO
    false
  when sla_due_time.nil?
    false
  when closed? && sla_closed_at > sla_due_time
    true
  when open? && Time.now > sla_due_time
    true
  end
end
resolution_base() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 159
def resolution_base
  if requester_review
    requester_review
  elsif resolved
    resolved
  elsif cant_reproduce
    cant_reproduce
  elsif not_accepted
    not_accepted
  else
    # not resolved
    nil
  end
end
set_over_sla!(over = nil) click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 11
def set_over_sla!(over = nil)
  over ||= over_sla?
  return if over.nil? || over == false
  jira_issue = jiralicious_issue
  jira_issue.fields.set_id(OVER_SLA_FIELD, OVER_SLA_FIELD_YES)
  jira_issue.save!
end
set_sla_closed_at!(sla_closed_at = nil) click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 27
def set_sla_closed_at!(sla_closed_at = nil)
  sla_closed_at ||= closed_at
  return if sla_closed_at.nil? || open?
  jira_issue = jiralicious_issue
  jira_issue.fields.set(SLA_CLOSED_AT_FIELD, sla_closed_at.iso8601)
  jira_issue.save!
end
set_sla_due_time!(due_time = nil) click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 3
def set_sla_due_time!(due_time = nil)
  due_time ||= sla_target
  return unless due_time
  jira_issue = jiralicious_issue
  jira_issue.fields.set(SLA_DUE_TIME_FIELD, due_time.iso8601)
  jira_issue.save!
end
set_sla_due_warning!(almost_over_sla = nil) click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 19
def set_sla_due_warning!(almost_over_sla = nil)
  almost_over_sla ||= approaching_sla_due_time?
  return if almost_over_sla.nil? || almost_over_sla == false
  jira_issue = jiralicious_issue
  jira_issue.fields.set_id(SLA_DUE_WARNING_FIELD, SLA_DUE_WARNING_FIELD_SET)
  jira_issue.save!
end
set_total_time_over_sla!(time_over_sla = nil) click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 35
def set_total_time_over_sla!(time_over_sla = nil)
  time_over_sla ||= sum_total_time_over_sla
  return unless over_sla == API_OVER_SLA_FIELD_YES || closed? || time_over_sla.present?
  jira_issue = jiralicious_issue
  jira_issue.fields.set(TOTAL_TIME_OVER_SLA_FIELD, time_over_sla)
  jira_issue.save!
end
sla_base() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 43
def sla_base
  created_at
end
sla_diff(now = Time.now) click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 116
def sla_diff(now = Time.now)
  t = sla_target
  b = resolution_base
  if t && b
    b - t
  elsif t
    now - t
  else
    0
  end
end
sla_remaining_time() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 82
def sla_remaining_time
  sla_due_time - Time.now
end
sla_target() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 47
def sla_target
  case priority
  when :p1
    sla_base + 2.hours
  when :p2
    sla_base + 24.hours
  when :p3
    if sla_base <= FIVE_P_DATE
      5.business_days.after(sla_base)
    else
      3.business_days.after(sla_base)
    end
  when :p4
    if sla_base <= FIVE_P_DATE
      nil
    else
      5.business_days.after(sla_base).change(:hour => BusinessTime::Config.end_of_workday.hour)
    end
  else
    nil
  end
end
sla_time_ratio(from = Time.now) click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 70
def sla_time_ratio(from = Time.now)
  return 0 if priority == :p5
  from = closed_at if closed?
  available_time = sla_target - sla_base
  used_time      = from - sla_base
  used_time.to_f / available_time
end
sla_total_available_time() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 78
def sla_total_available_time
  sla_due_time - sla_base
end
sla_warning_time() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 86
def sla_warning_time
  sla_total_available_time*0.20
end
sum_total_time_over_sla() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 108
def sum_total_time_over_sla # => difference in hours
  if over_sla == API_OVER_SLA_FIELD_YES
    ((sla_closed_at - sla_due_time) / 60) / 60
  else
    0
  end
end
time_to_finish_work() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 144
def time_to_finish_work
  if in_progress
    if pr_review
      pr_review - in_progress
    elsif requester_review
      requester_review - in_progress
    end
  else
    nil
  #elsif resolved
  #  # wtf?
  #  resolved - created_at
  end
end
time_to_start_work() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 128
def time_to_start_work
  if verified
    if in_progress
      in_progress - verified
    else
      Time.now - verified
    end
  elsif triaged && in_progress
    in_progress - triaged
  elsif in_progress
    in_progress - created
  else
    nil
  end
end
total_time_to_resolution() click to toggle source
# File lib/jira_reporting/sla_tracker.rb, line 174
def total_time_to_resolution
  b = resolution_base
  if b
    resolution_base - created_at
  else
    nil
  end
end