Module: JiraIssue::SLATracker
- Included in:
- JiraIssue
- Defined in:
- lib/jira_reporting/sla_tracker.rb
Instance Method Summary collapse
- #approaching_sla_due_time? ⇒ Boolean
- #over_sla? ⇒ Boolean
- #resolution_base ⇒ Object
- #set_over_sla!(over = nil) ⇒ Object
- #set_sla_closed_at!(sla_closed_at = nil) ⇒ Object
- #set_sla_due_time!(due_time = nil) ⇒ Object
- #set_sla_due_warning!(almost_over_sla = nil) ⇒ Object
- #set_total_time_over_sla!(time_over_sla = nil) ⇒ Object
- #sla_base ⇒ Object
- #sla_diff(now = Time.now) ⇒ Object
- #sla_remaining_time ⇒ Object
- #sla_target ⇒ Object
- #sla_time_ratio(from = Time.now) ⇒ Object
- #sla_total_available_time ⇒ Object
- #sla_warning_time ⇒ Object
-
#sum_total_time_over_sla ⇒ Object
> difference in hours.
- #time_to_finish_work ⇒ Object
- #time_to_start_work ⇒ Object
- #total_time_to_resolution ⇒ Object
Instance Method Details
#approaching_sla_due_time? ⇒ Boolean
90 91 92 93 |
# 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? ⇒ Boolean
95 96 97 98 99 100 101 102 103 104 105 106 |
# 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 ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# 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) ⇒ Object
11 12 13 14 15 16 17 |
# 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) ⇒ Object
27 28 29 30 31 32 33 |
# 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) ⇒ Object
3 4 5 6 7 8 9 |
# 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) ⇒ Object
19 20 21 22 23 24 25 |
# 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) ⇒ Object
35 36 37 38 39 40 41 |
# 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 ⇒ Object
43 44 45 |
# File 'lib/jira_reporting/sla_tracker.rb', line 43 def sla_base created_at end |
#sla_diff(now = Time.now) ⇒ Object
116 117 118 119 120 121 122 123 124 125 126 |
# 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 ⇒ Object
82 83 84 |
# File 'lib/jira_reporting/sla_tracker.rb', line 82 def sla_remaining_time sla_due_time - Time.now end |
#sla_target ⇒ Object
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# 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) ⇒ Object
70 71 72 73 74 75 76 |
# 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 ⇒ Object
78 79 80 |
# File 'lib/jira_reporting/sla_tracker.rb', line 78 def sla_total_available_time sla_due_time - sla_base end |
#sla_warning_time ⇒ Object
86 87 88 |
# 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 ⇒ Object
> difference in hours
108 109 110 111 112 113 114 |
# 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 ⇒ Object
144 145 146 147 148 149 150 151 152 153 154 155 156 157 |
# 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 ⇒ Object
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# 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 ⇒ Object
174 175 176 177 178 179 180 181 |
# 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 |