44 lines
1.6 KiB
Ruby
44 lines
1.6 KiB
Ruby
# Copyright (C) 2012-2021 Zammad Foundation, http://zammad-foundation.org/
|
|
|
|
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].index_with do |object|
|
|
empty_diff.merge(
|
|
total: request(object).count!
|
|
)
|
|
end
|
|
end
|
|
|
|
# the special "incremental_export" logic is needed because Zendesk
|
|
# archives records and doesn't return them via e.g. client.tickets
|
|
# endpoint as described here:
|
|
# https://github.com/zammad/zammad/issues/558#issuecomment-267951351
|
|
# Counting via the incremental_export endpoint has the limitations
|
|
# that it returns max. 1000. That's why we need to update the total
|
|
# number while importing in the resource loop
|
|
def request(object)
|
|
require 'zendesk_api' # Only load this gem when it is really used.
|
|
resource_class = "::ZendeskAPI::#{object.to_s.singularize}".safe_constantize
|
|
if resource_class.respond_to?(:incremental_export)
|
|
# read as: ::ZendeskAPI::Ticket.incremental_export(client, 1)
|
|
resource_class.incremental_export(client, 1)
|
|
else
|
|
# read as: client.groups
|
|
client.send(object.to_s.underscore.to_sym)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|