gitlab_support_readiness 1.0.42 → 1.0.44

Sign up to get free protection for your applications and to get access to all the features.
Files changed (27) hide show
  1. checksums.yaml +4 -4
  2. data/lib/support_readiness/support_super_form_processor/global_set_collaboration_id.rb +1 -1
  3. data/lib/support_readiness/support_super_form_processor/global_set_org_ase.rb +1 -1
  4. data/lib/support_readiness/support_super_form_processor/global_toggle_escalation.rb +1 -1
  5. data/lib/support_readiness/support_super_form_processor/gratis_support_extension.rb +23 -5
  6. data/lib/support_readiness/support_super_form_processor/gratis_support_former_customer.rb +31 -0
  7. data/lib/support_readiness/support_super_form_processor/gratis_support_migration.rb +31 -0
  8. data/lib/support_readiness/support_super_form_processor/gratis_support_other.rb +31 -0
  9. data/lib/support_readiness/support_super_form_processor/gratis_support_prospect.rb +31 -0
  10. data/lib/support_readiness/support_super_form_processor/gratis_support_upgrade.rb +31 -0
  11. data/lib/support_readiness/support_super_form_processor/namespace_availability.rb +1 -1
  12. data/lib/support_readiness/support_super_form_processor/sa_request_for_support.rb +1 -1
  13. data/lib/support_readiness/support_super_form_processor/usgov_set_collaboration_id.rb +1 -1
  14. data/lib/support_readiness/support_super_form_processor/usgov_set_org_ase.rb +1 -1
  15. data/lib/support_readiness/support_super_form_processor.rb +1 -0
  16. data/lib/support_readiness/ticket_processor/account_blocked.rb +289 -0
  17. data/lib/support_readiness/ticket_processor/email_suppressions.rb +135 -0
  18. data/lib/support_readiness/ticket_processor/link_tagger.rb +102 -0
  19. data/lib/support_readiness/ticket_processor/locked_account.rb +53 -0
  20. data/lib/support_readiness/ticket_processor/namesquatting.rb +223 -0
  21. data/lib/support_readiness/ticket_processor/organization_notes.rb +308 -0
  22. data/lib/support_readiness/ticket_processor/star.rb +32 -0
  23. data/lib/support_readiness/ticket_processor/weighting.rb +121 -0
  24. data/lib/support_readiness/ticket_processor.rb +19 -0
  25. data/lib/support_readiness/zendesk/tickets.rb +3 -1
  26. data/lib/support_readiness.rb +1 -0
  27. metadata +11 -2
@@ -0,0 +1,308 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module TicketProcessor
6
+ module TicketProcessor
7
+ ##
8
+ # Defines the class OrganizationNotes within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.44
12
+ class OrganizationNotes < Readiness::Client
13
+ ##
14
+ # Process an Organization Notes request for Zendesk Global
15
+ #
16
+ # @author Jason Colyer
17
+ # @since 1.0.44
18
+ def self.process_global!(zendesk_client, gitlab_client, ticket_id)
19
+ @zendesk_client = zendesk_client
20
+ @gitlab_client = gitlab_client
21
+ @ticket_id = ticket_id
22
+ @ticket = Readiness::Zendesk::Tickets.find(@zendesk_client, @ticket_id)
23
+ puts 'No ticket found, so no org notes to add' if @ticket.is_a? Hash
24
+ exit 0 if @ticket.is_a? Hash
25
+
26
+ puts 'Ticket is closed, so no org notes to add' if @ticket.status == 'closed'
27
+ exit 0 if @ticket.status == 'closed'
28
+
29
+ puts 'No organization, so no org notes to add' if @ticket.organization_id.nil?
30
+ exit 0 if @ticket.organization_id.nil?
31
+
32
+ @organization = Readiness::Zendesk::Organizations.find!(@zendesk_client, @ticket.organization_id)
33
+ @project = Readiness::GitLab::Projects.find!(@gitlab_client, 27675679)
34
+ file = Readiness::GitLab::Repositories.raw_file(@gitlab_client, @project, "organizations/#{@organization.id}.yaml", 'master')
35
+ yaml = YAML.safe_load(file)
36
+ @notes_file = if yaml['message']
37
+ create_notes_file
38
+ else
39
+ yaml
40
+ end
41
+ print 'Making organization info comment...'
42
+ new_ticket = Readiness::Zendesk::Tickets.new
43
+ new_ticket.id = @ticket.id
44
+ new_ticket.comment = { body: organization_info_comment.gsub("\n\n\n\n", "\n\n").strip, public: false }
45
+ Readiness::Zendesk::Tickets.update!(zendesk_client, new_ticket)
46
+ puts 'done'
47
+ sleep 3
48
+ print 'Making organization entitlement info comment...'
49
+ new_ticket.comment = { body: organization_entitlement_comment.gsub("\n\n\n\n", "\n\n").strip, public: false }
50
+ Readiness::Zendesk::Tickets.update!(zendesk_client, new_ticket)
51
+ puts 'done'
52
+ if @organization.organization_fields['sub_gitlab_dedicated']
53
+ sleep 3
54
+ print 'Making GitLab Dedicated note...'
55
+ new_ticket.comment = { body: gitlab_dedicated_comment.gsub("\n\n\n\n", "\n\n").strip, public: false }
56
+ Readiness::Zendesk::Tickets.update!(zendesk_client, new_ticket)
57
+ puts 'done'
58
+ end
59
+ if @organization.organization_fields['support_level'] == 'Expired' && within_grace_period?
60
+ sleep 3
61
+ print 'Adding within_grace_period tag...'
62
+ @ticket = Readiness::Zendesk::Tickets.find(@zendesk_client, @ticket_id)
63
+ new_ticket = Readiness::Zendesk::Tickets.new
64
+ new_ticket.id = @ticket.id
65
+ new_ticket.tags = @ticket.tags + ['within_grace_period']
66
+ Readiness::Zendesk::Tickets.update!(zendesk_client, new_ticket)
67
+ puts 'done'
68
+ end
69
+ end
70
+
71
+ def self.within_grace_period?
72
+ Date.today < grace_period
73
+ end
74
+
75
+ def self.grace_period
76
+ Date.parse(@organization.organization_fields['expiration_date']) + 15.days
77
+ rescue TypeError
78
+ Date.parse('9999-12-31')
79
+ end
80
+
81
+ def self.determine_within_grace_period
82
+ Date.today < (Date.parse(@organization.organization_fields['expiration_date']) + 15.days)
83
+ rescue TypeError
84
+ true
85
+ end
86
+
87
+ def self.create_notes_file
88
+ puts 'no'
89
+ exit 1
90
+ content_string = "---\nid: #{@organization.idid}\nname: \"#{@organization.name}\"\nnotes:\ndetails:\n"
91
+ commit_params = {
92
+ branch: 'master',
93
+ commit_message: 'Creating default org note file',
94
+ actions: [
95
+ {
96
+ action: 'create',
97
+ file_path: "organizations/#{@organization.id}.yaml",
98
+ content: content_string
99
+ }
100
+ ]
101
+ }
102
+ Readiness::GitLab::Repositories.create_commit!(@gitlab_client, @project, commit_params)
103
+ YAML.safe_load(content_string)
104
+ end
105
+
106
+ def self.organization_info_comment
107
+ <<~STRING
108
+ #{@organization.organization_fields['org_in_escalated_state'] ? escalated_string : ''}
109
+ ## Organization Notes
110
+
111
+ #{@notes_file['notes']}
112
+
113
+ Manage this organization note via https://gitlab.com/gitlab-com/support/zendesk-global/organizations/-/blob/master/organizations/#{@organization.id}.yaml
114
+
115
+ #{partner_troubleshooting_string}
116
+
117
+ ---
118
+
119
+ ## Organization Info
120
+
121
+ - Account type: #{@organization.organization_fields['account_type'].to_s.capitalize}
122
+ - Sales Segmentation: #{@organization.organization_fields['sales_segmentation'].to_s.capitalize}
123
+ - Account Owner: #{@organization.organization_fields['account_owner']}
124
+ - Customer Success Manager: #{@organization.organization_fields['technical_account_manager']}
125
+ - Solutions Architect: #{@organization.organization_fields['solutions_architect']}
126
+ - Expiration/Next Renewal Date: #{@organization.organization_fields['expiration_date']}
127
+ - Salesforce: [#{@organization.organization_fields['salesforce_id']}](https://gitlab.lightning.force.com/lightning/r/Account/#{@organization.organization_fields['salesforce_id']}/view)
128
+
129
+ #{emergencies_list}
130
+
131
+ #{collab_project_string}
132
+
133
+ #{readiness_string}
134
+ STRING
135
+ end
136
+
137
+ def self.escalated_string
138
+ "---\n\n## NOTE: This organization is in an escalated state.\n\n"
139
+ end
140
+
141
+ def self.partner_troubleshooting_string
142
+ field = @ticket.custom_fields.detect { |t| t['id'] == 360012194220 }
143
+ return '' if field.nil?
144
+ return '' if field['value'].nil?
145
+
146
+ "---\n\n## Partner Troubleshooting\n\n#{field['value']}\n\n"
147
+ end
148
+
149
+ def self.emergencies_list
150
+ org_tickets = Readiness::Zendesk::Organizations.tickets(@zendesk_client, @organization)
151
+ list = org_tickets.select { |t| t.ticket_form_id == 360001264259 }
152
+ emergencies = list.reject { |t| t.id == @ticket.id }
153
+ return '' if emergencies.count.zero?
154
+
155
+ output = []
156
+ emergencies.each do |e|
157
+ string = "- [#{e.subject}](https://gitlab.zendesk.com/agent/tickets/#{e.id}) - created #{e.created_at}"
158
+ output.push(string)
159
+ end
160
+ <<~STRING
161
+ ## Recent Emergencies
162
+
163
+ #{output.join("\n")}
164
+ STRING
165
+ end
166
+
167
+ def self.collab_project_string
168
+ return '' if @organization.organization_fields['am_project_id'].nil?
169
+
170
+ <<~STRING
171
+ ---
172
+
173
+ ## NOTE: This organization has an AM Collaboration project!
174
+ STRING
175
+ end
176
+
177
+ def self.readiness_string
178
+ output = [
179
+ cmp_string,
180
+ org_notes_string,
181
+ org_details_string,
182
+ shared_org_string
183
+ ].compact
184
+ <<~STRING
185
+ #{output.join("\n\n")}
186
+ STRING
187
+ end
188
+
189
+ def self.cmp_string
190
+ return nil if @organization.organization_fields['cmp_id'].nil?
191
+
192
+ "#### This organization is using a contact management project!"
193
+ end
194
+
195
+ def self.org_notes_string
196
+ return nil if @organization.notes.to_s == ''
197
+
198
+ <<~STRING
199
+ #### Support Readiness Notes about this Organizations
200
+
201
+ #{@organization.notes}
202
+ STRING
203
+ end
204
+
205
+ def self.org_details_string
206
+ return nil if @organization.details.to_s == ''
207
+
208
+ <<~STRING
209
+ #### Support Readiness Details about this Organizations
210
+
211
+ #{@organization.details}
212
+ STRING
213
+ end
214
+
215
+ def self.shared_org_string
216
+ return nil unless @organization.shared_tickets
217
+
218
+ return "#### This organization has shared org permissions (read only)" unless @organization.shared_comments
219
+
220
+ "#### This organization has shared org permissions (read+write)"
221
+ end
222
+
223
+ def self.organization_entitlement_comment
224
+ return expired_message if @organization.organization_fields['support_level'] == 'Expired'
225
+ return prospect_message if @organization.tags.include? 'priority_prospect'
226
+ <<~STRING
227
+ #{subscriptions_message}
228
+ #{addons_message}
229
+ STRING
230
+ end
231
+
232
+ def self.expired_message
233
+ if within_grace_period?
234
+ if @organization.organization_fields['health_score'].to_s.capitalize == 'Green'
235
+ return "## NOTE: Within grace period (#{grace_period}) and health score is Green, provide support to the customer as usual."
236
+ elsif @organization.organization_fields['health_score'].to_s.capitalize == 'Yellow'
237
+ return "## NOTE: Within grace period (#{grace_period}) but health score is Yellow, reach out to their CSM/AM in [#account-management](https://gitlab.slack.com/archives/C44SXGG8M) and ask about this customer. In the meantime provide support to the customer as usual."
238
+ elsif @organization.organization_fields['health_score'].to_s.capitalize == 'Red'
239
+ return "## NOTE: Within grace period (#{grace_period}) but health score is Red, reach out to their CSM/AM in [#account-management](https://gitlab.slack.com/archives/C44SXGG8M) and ask about this customer. Do not provide support until they tell you to proceed."
240
+ else
241
+ return "## NOTE: Within grace period (#{grace_period}) but health score is unknown, contact CSM/AM in [#account-management](https://gitlab.slack.com/archives/C44SXGG8M) and ask about this customer. Do not provide support until they tell you to proceed."
242
+ end
243
+ end
244
+ '## NOTE: This account is showing as expired. Please confirm manually before proceeding!'
245
+ end
246
+
247
+ def self.prospect_message
248
+ '## NOTE: This is a priority prospect and is eligible for support.'
249
+ end
250
+
251
+ def self.subscriptions_message
252
+ subs = []
253
+ subs.push('Community (unidentified type)') if @organization.organization_fields['sub_community_other']
254
+ subs.push('GitLab.com Premium') if @organization.organization_fields['sub_dotcom_premium']
255
+ subs.push('GitLab.com Ultimate') if @organization.organization_fields['sub_dotcom_ultimate']
256
+ subs.push('Community (EDU)') if @organization.organization_fields['sub_edu']
257
+ subs.push('GitLab Dedicated') if @organization.organization_fields['sub_gitlab_dedicated']
258
+ subs.push('Community (OSS)') if @organization.organization_fields['sub_oss']
259
+ subs.push('Self-Managed Premium') if @organization.organization_fields['sub_sm_premium']
260
+ subs.push('Self-Managed Starter') if @organization.organization_fields['sub_sm_starter']
261
+ subs.push('Self-Managed Ultimate') if @organization.organization_fields['sub_sm_ultimate']
262
+ subs
263
+ return '' if subs.count.zero?
264
+
265
+ <<~STRING
266
+ ## This organization has the following active subscription types:
267
+
268
+ #{subs.map { |s| "- #{s}" }.join("\n")}
269
+ STRING
270
+ end
271
+
272
+ def self.addons_message
273
+ addons = []
274
+ addons.push('AI') if @organization.organization_fields['sub_consumption_ai']
275
+ addons.push('GitLab Duo Premium') if @organization.organization_fields['sub_consumption_duo_premium']
276
+ addons.push('GitLab Duo Enterprise') if @organization.organization_fields['sub_consumption_duo_enterprise']
277
+ addons.push('AI addon') if @organization.organization_fields['sub_consumption_ai']
278
+ addons.push('Consumption (CI/CD Minutes)') if @organization.organization_fields['sub_consumption_cicd_minutes']
279
+ addons.push('Consumption (Storage)') if @organization.organization_fields['sub_consumption_storage']
280
+ addons.push('Enterprise Agile Planning') if @organization.organization_fields['sub_consumption_eap']
281
+ addons.push('Professional Services') if @organization.organization_fields['sub_proserv']
282
+ addons.push('Assigned Support Engineer') if @organization.organization_fields['sub_ss_ase']
283
+ addons
284
+ return '' if addons.count.zero?
285
+
286
+ <<~STRING
287
+ ## This organization has the following active addons:
288
+
289
+ #{addons.map { |s| "- #{s}" }.join("\n")}
290
+ STRING
291
+ end
292
+
293
+ def self.gitlab_dedicated_comment
294
+ <<~STRING
295
+ ## :information_source: Important Information about this Ticket
296
+
297
+ This is a [GitLab Dedicated](https://docs.gitlab.com/ee/subscriptions/gitlab_dedicated/) customer.
298
+
299
+ - **Logs**: :warning: Do **not** request GitLab logs from the customer.
300
+ - **Configuration**:
301
+ - Customers **can** access and make changes in the **Admin Area**.
302
+ - :warning: Do **not** request `gitlab.rb`, `values.yaml` or other GitLab configuration files from this customer.
303
+ - :question: Not sure what to do?: Check the [GitLab Dedicated Handbook](https://handbook.gitlab.com/handbook/support/workflows/dedicated_logs/) for information on how to handle :ticket: Dedicated tickets including information on [working with logs](https://handbook.gitlab.com/handbook/support/workflows/dedicated_logs/#working-with-logs).
304
+ STRING
305
+ end
306
+ end
307
+ end
308
+ end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module TicketProcessor
6
+ module TicketProcessor
7
+ ##
8
+ # Defines the class STAR within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.44
12
+ class STAR < Readiness::Client
13
+ ##
14
+ # Process a STAR request
15
+ #
16
+ # @author Jason Colyer
17
+ # @since 1.0.44
18
+ def self.process!(zendesk_client, ticket_id)
19
+ @zendesk_client = zendesk_client
20
+ @ticket_id = ticket_id
21
+ @ticket = Readiness::Zendesk::Tickets.find(@zendesk_client, @ticket_id)
22
+ puts 'No ticket found, so no STAR actions to do' if @ticket.is_a? Hash
23
+ exit 0 if @ticket.is_a? Hash
24
+
25
+ new_ticket = Readiness::Zendesk::Tickets.new
26
+ new_ticket.id = @ticket.id
27
+ new_ticket.tags = @ticket.tags + ['star_submitted']
28
+ Readiness::Zendesk::Tickets.update!(zendesk_client, new_ticket)
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,121 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ # Defines the module TicketProcessor
6
+ module TicketProcessor
7
+ ##
8
+ # Defines the class Weighting within the module {Readiness::Zendesk}.
9
+ #
10
+ # @author Jason Colyer
11
+ # @since 1.0.44
12
+ class Weighting < Readiness::Client
13
+ ##
14
+ # Process a Weighting request
15
+ #
16
+ # @author Jason Colyer
17
+ # @since 1.0.44
18
+ def self.process!(zendesk_client, ticket_id)
19
+ @zendesk_client = zendesk_client
20
+ @ticket_id = ticket_id
21
+ @ticket = Readiness::Zendesk::Tickets.find(@zendesk_client, @ticket_id)
22
+ @organization = if @ticket.organization_id.nil?
23
+ nil
24
+ else
25
+ Readiness::Zendesk::Organizations.find!(@zendesk_client, @ticket.organization_id)
26
+ end
27
+ puts 'No ticket found, so no STAR actions to do' if @ticket.is_a? Hash
28
+ exit 0 if @ticket.is_a? Hash
29
+
30
+ time_diff = Time.parse('9999-12-31T23:59:59Z') - Time.parse(@ticket.created_at)
31
+ weight = calculate_weight
32
+ new_ticket = Readiness::Zendesk::Tickets.new
33
+ new_ticket.id = @ticket.id
34
+ new_ticket.custom_fields = [
35
+ { id: 12508951067036, value: weight },
36
+ { id: 13761175647260, value: "#{format('%03d', weight)} - #{format('%.5f', time_diff)}" }
37
+ ]
38
+ Readiness::Zendesk::Tickets.update!(@zendesk_client, new_ticket)
39
+ end
40
+
41
+ def self.calculate_weight
42
+ final = 0
43
+ final += arr_modifier unless @ticket.ticket_form_id == 360000071293
44
+ final += form_modifier unless @ticket.ticket_form_id == 360000071293
45
+ final += acc_type_modifier
46
+ final += ticket_priority_modifier
47
+ final += customer_priority_modifier
48
+ final += sla_breach_modifier
49
+ final
50
+ end
51
+
52
+ def self.arr_modifier
53
+ arr = arr_to_use
54
+ return 17 if arr >= 1000000
55
+ return 12 if arr >= 300000
56
+ return 10 if arr >= 30000
57
+ return 8 if arr > 0
58
+
59
+ 0
60
+ end
61
+
62
+ def self.form_modifier
63
+ return 100 if @ticket.ticket_form_id == 360001264259
64
+
65
+ 0
66
+ end
67
+
68
+ def self.acc_type_modifier
69
+ return 0 if @organization.nil?
70
+ return 17 if @organization.organization_fields['account_type'] == 'alliance_partner'
71
+ return 10 if @organization.organization_fields['account_type'] == 'select_partner'
72
+ return 10 if @organization.organization_fields['account_type'] == 'open_partner'
73
+
74
+ 0
75
+ end
76
+
77
+ def self.ticket_priority_modifier
78
+ return 22 if @ticket.priority == 'urgent'
79
+ return 15 if @ticket.priority == 'high'
80
+ return 8 if @ticket.priority == 'medium'
81
+
82
+ 2
83
+ end
84
+
85
+ def self.customer_priority_modifier
86
+ field = @ticket.custom_fields.detect { |f| f['id'] == 360014776453 }['value']
87
+ return 8 if field == 'urgent'
88
+ return 5 if field == 'high'
89
+ return 3 if field == 'medium'
90
+
91
+ 1
92
+ end
93
+
94
+ def self.sla_breach_modifier
95
+ breach_level = ENV.fetch('SLA_BREACH_LEVEL', 0).to_i
96
+ field = @ticket.custom_fields.detect { |f| f['id'] == 360020735259 }['value']
97
+ return 19 if field == 'stage-frt' && breach_level == 1
98
+ return 38 if field == 'stage-frt' && breach_level == 2
99
+ return 57 if field == 'stage-frt' && breach_level == 3
100
+ return 9 if field == 'stage-nrt' && breach_level == 1
101
+ return 18 if field == 'stage-nrt' && breach_level == 2
102
+ return 27 if field == 'stage-nrt' && breach_level == 3
103
+
104
+ 0
105
+ end
106
+
107
+ def self.star_modifier
108
+ return 20 if @ticket.tags.include? 'star_submitted'
109
+
110
+ 0
111
+ end
112
+
113
+ def self.arr_to_use
114
+ field = @ticket.custom_fields.detect { |f| f['id'] == 360020288373 }['value'].to_f
115
+ return field if @organization.nil?
116
+
117
+ [field, @organization.organization_fields['aar'].to_f].max
118
+ end
119
+ end
120
+ end
121
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ # Defines the module Readiness.
4
+ module Readiness
5
+ ##
6
+ # Defines the module TicketProcessor
7
+ # @author Jason Colyer
8
+ # @since 1.0.44
9
+ module TicketProcessor
10
+ require "#{__dir__}/ticket_processor/account_blocked"
11
+ require "#{__dir__}/ticket_processor/email_suppressions"
12
+ require "#{__dir__}/ticket_processor/link_tagger"
13
+ require "#{__dir__}/ticket_processor/locked_account"
14
+ require "#{__dir__}/ticket_processor/namesquatting"
15
+ require "#{__dir__}/ticket_processor/organization_notes"
16
+ require "#{__dir__}/ticket_processor/star"
17
+ require "#{__dir__}/ticket_processor/weighting"
18
+ end
19
+ end
@@ -10,7 +10,7 @@ module Readiness
10
10
  # @author Jason Colyer
11
11
  # @since 1.0.0
12
12
  class Tickets < Readiness::Client
13
- attr_accessor :assignee_id, :additional_tags, :brand_id, :collaborator_ids, :comment, :custom_fields, :custom_status_id, :description, :due_at, :email_cc_ids, :fields, :follower_ids, :followup_ids, :group_id, :has_incidents, :id, :is_public, :organization_id, :priority, :problem_id, :remove_tags, :requester_id, :satisfaction_rating, :status, :subject, :submitter_id, :tags, :ticket_form_id, :type, :via, :via_followup_source_id
13
+ attr_accessor :assignee_id, :additional_tags, :brand_id, :collaborator_ids, :comment, :created_at, :custom_fields, :custom_status_id, :description, :due_at, :email_cc_ids, :fields, :follower_ids, :followup_ids, :group_id, :has_incidents, :id, :is_public, :organization_id, :priority, :problem_id, :remove_tags, :requester_id, :satisfaction_rating, :status, :subject, :submitter_id, :tags, :ticket_form_id, :type, :updated_at, :via, :via_followup_source_id
14
14
 
15
15
  ##
16
16
  # Creates a new {Readiness::Zendesk::Tickets} instance
@@ -27,6 +27,7 @@ module Readiness
27
27
  @brand_id = object['brand_id']
28
28
  @collaborator_ids = object['collaborator_ids']
29
29
  @comment = object['comment']
30
+ @created_at = object['created_at']
30
31
  @custom_fields = object['custom_fields']
31
32
  @custom_status_id = object['custom_status_id']
32
33
  @description = object['description']
@@ -51,6 +52,7 @@ module Readiness
51
52
  @tags = object['tags']
52
53
  @ticket_form_id = object['ticket_form_id']
53
54
  @type = object['type']
55
+ @updated_at = object['updated_at']
54
56
  @via = object['via']
55
57
  @via_followup_source_id = object['via_followup_source_id']
56
58
  end
@@ -43,4 +43,5 @@ require "#{__dir__}/support_readiness/repos"
43
43
  require "#{__dir__}/support_readiness/salesforce"
44
44
  require "#{__dir__}/support_readiness/slack"
45
45
  require "#{__dir__}/support_readiness/support_super_form_processor"
46
+ require "#{__dir__}/support_readiness/ticket_processor"
46
47
  require "#{__dir__}/support_readiness/zendesk"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: gitlab_support_readiness
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.42
4
+ version: 1.0.44
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jason Colyer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-11-15 00:00:00.000000000 Z
11
+ date: 2024-11-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -372,6 +372,15 @@ files:
372
372
  - lib/support_readiness/support_super_form_processor/usgov_ir_sm_trials_new.rb
373
373
  - lib/support_readiness/support_super_form_processor/usgov_set_collaboration_id.rb
374
374
  - lib/support_readiness/support_super_form_processor/usgov_set_org_ase.rb
375
+ - lib/support_readiness/ticket_processor.rb
376
+ - lib/support_readiness/ticket_processor/account_blocked.rb
377
+ - lib/support_readiness/ticket_processor/email_suppressions.rb
378
+ - lib/support_readiness/ticket_processor/link_tagger.rb
379
+ - lib/support_readiness/ticket_processor/locked_account.rb
380
+ - lib/support_readiness/ticket_processor/namesquatting.rb
381
+ - lib/support_readiness/ticket_processor/organization_notes.rb
382
+ - lib/support_readiness/ticket_processor/star.rb
383
+ - lib/support_readiness/ticket_processor/weighting.rb
375
384
  - lib/support_readiness/zendesk.rb
376
385
  - lib/support_readiness/zendesk/app_job_statuses.rb
377
386
  - lib/support_readiness/zendesk/apps.rb