trabajo-afectivo/lib/sequencer/unit/import/zendesk/objects_total_count.rb

51 lines
1.7 KiB
Ruby
Raw Normal View History

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