51 lines
1.3 KiB
Ruby
51 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Gitlab
|
|
module ManifestImport
|
|
class Metadata
|
|
EXPIRY_TIME = 1.week
|
|
|
|
attr_reader :user, :fallback
|
|
|
|
def initialize(user, fallback: {})
|
|
@user = user
|
|
@fallback = fallback
|
|
end
|
|
|
|
def save(repositories, group_id)
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
Gitlab::Instrumentation::RedisClusterValidator.allow_cross_slot_commands do
|
|
redis.multi do |multi|
|
|
multi.set(key_for('repositories'), Gitlab::Json.dump(repositories), ex: EXPIRY_TIME)
|
|
multi.set(key_for('group_id'), group_id, ex: EXPIRY_TIME)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
|
|
def repositories
|
|
redis_get('repositories').then do |repositories|
|
|
next unless repositories
|
|
|
|
Gitlab::Json.parse(repositories).map(&:symbolize_keys)
|
|
end || fallback[:manifest_import_repositories]
|
|
end
|
|
|
|
def group_id
|
|
redis_get('group_id')&.to_i || fallback[:manifest_import_group_id]
|
|
end
|
|
|
|
private
|
|
|
|
def key_for(field)
|
|
"manifest_import:metadata:user:#{user.id}:#{field}"
|
|
end
|
|
|
|
def redis_get(field)
|
|
Gitlab::Redis::SharedState.with do |redis|
|
|
redis.get(key_for(field))
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|