51 lines
1.7 KiB
Ruby
51 lines
1.7 KiB
Ruby
|
class Sequencer
|
||
|
class Unit
|
||
|
module Import
|
||
|
module Zendesk
|
||
|
class ObjectsTotalCount < Sequencer::Unit::Common::Provider::Attribute
|
||
|
include ::Sequencer::Unit::Import::Common::Model::Statistics::Mixin::EmptyDiff
|
||
|
|
||
|
uses :client
|
||
|
|
||
|
private
|
||
|
|
||
|
def statistics_diff
|
||
|
%i[Groups Users Organizations Tickets].each_with_object({}) do |object, stats|
|
||
|
stats[object] = empty_diff.merge(
|
||
|
total: request(object).count!
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
|
||
|
def request(object)
|
||
|
return tickets if object == 'Tickets'
|
||
|
generic(object)
|
||
|
end
|
||
|
|
||
|
def generic(object)
|
||
|
client.send(object.to_s.underscore.to_sym)
|
||
|
end
|
||
|
|
||
|
# this special ticket logic is needed since Zendesk archives tickets
|
||
|
# after 120 days and doesn't return them via the client.tickets
|
||
|
# endpoint as described here:
|
||
|
# https://github.com/zammad/zammad/issues/558#issuecomment-267951351
|
||
|
# the proper way is to use the 'incremental' endpoint which is not available
|
||
|
# via the ruby gem yet but a pull request is pending:
|
||
|
# https://github.com/zendesk/zendesk_api_client_rb/pull/287
|
||
|
# the following workaround is needed to use this functionality
|
||
|
# Counting Tickets has the limitations that max. 1000 are returned
|
||
|
# that's why we need to update the number when it's exceeded while importing
|
||
|
def tickets
|
||
|
ZendeskAPI::Collection.new(
|
||
|
client,
|
||
|
ZendeskAPI::Ticket,
|
||
|
path: 'incremental/tickets?start_time=1'
|
||
|
)
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
end
|