2018-01-08 15:29:34 +00:00
|
|
|
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'
|
2018-10-09 06:17:41 +00:00
|
|
|
|
2018-01-08 15:29:34 +00:00
|
|
|
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
|