2018-08-18 07:19:57 -04:00
|
|
|
# frozen_string_literal: true
|
|
|
|
|
2016-11-22 11:58:10 -05:00
|
|
|
module StorageHelper
|
|
|
|
def storage_counter(size_in_bytes)
|
2019-05-16 06:30:42 -04:00
|
|
|
return s_('StorageSize|Unknown') unless size_in_bytes
|
|
|
|
|
2016-11-22 11:58:10 -05:00
|
|
|
precision = size_in_bytes < 1.megabyte ? 0 : 1
|
|
|
|
|
|
|
|
number_to_human_size(size_in_bytes, delimiter: ',', precision: precision, significant: false)
|
|
|
|
end
|
2019-05-02 12:04:15 -04:00
|
|
|
|
|
|
|
def storage_counters_details(statistics)
|
|
|
|
counters = {
|
|
|
|
counter_repositories: storage_counter(statistics.repository_size),
|
2019-02-13 17:38:11 -05:00
|
|
|
counter_wikis: storage_counter(statistics.wiki_size),
|
2019-05-02 12:04:15 -04:00
|
|
|
counter_build_artifacts: storage_counter(statistics.build_artifacts_size),
|
2021-11-09 13:13:13 -05:00
|
|
|
counter_pipeline_artifacts: storage_counter(statistics.pipeline_artifacts_size),
|
2020-06-30 08:08:57 -04:00
|
|
|
counter_lfs_objects: storage_counter(statistics.lfs_objects_size),
|
2020-11-19 13:09:13 -05:00
|
|
|
counter_snippets: storage_counter(statistics.snippets_size),
|
|
|
|
counter_packages: storage_counter(statistics.packages_size),
|
|
|
|
counter_uploads: storage_counter(statistics.uploads_size)
|
2019-05-02 12:04:15 -04:00
|
|
|
}
|
|
|
|
|
2021-11-09 13:13:13 -05:00
|
|
|
_("Repository: %{counter_repositories} / Wikis: %{counter_wikis} / Build Artifacts: %{counter_build_artifacts} / Pipeline Artifacts: %{counter_pipeline_artifacts} / LFS: %{counter_lfs_objects} / Snippets: %{counter_snippets} / Packages: %{counter_packages} / Uploads: %{counter_uploads}") % counters
|
2019-05-02 12:04:15 -04:00
|
|
|
end
|
2022-02-15 16:12:52 -05:00
|
|
|
|
|
|
|
def storage_enforcement_banner_info(namespace)
|
2022-03-11 07:07:56 -05:00
|
|
|
return unless can?(current_user, :admin_namespace, namespace)
|
2022-02-15 16:12:52 -05:00
|
|
|
return if namespace.paid?
|
|
|
|
return unless namespace.storage_enforcement_date && namespace.storage_enforcement_date >= Date.today
|
|
|
|
return if user_dismissed_storage_enforcement_banner?(namespace)
|
|
|
|
|
|
|
|
{
|
|
|
|
text: html_escape_once(s_("UsageQuota|From %{storage_enforcement_date} storage limits will apply to this namespace. " \
|
2022-03-11 07:07:56 -05:00
|
|
|
"View and manage your usage in %{strong_start}%{namespace_type} settings > Usage quotas%{strong_end}.")).html_safe %
|
|
|
|
{ storage_enforcement_date: namespace.storage_enforcement_date, strong_start: "<strong>".html_safe, strong_end: "</strong>".html_safe, namespace_type: namespace.type },
|
2022-02-15 16:12:52 -05:00
|
|
|
variant: 'warning',
|
2022-03-11 07:07:56 -05:00
|
|
|
callouts_path: namespace.user_namespace? ? callouts_path : group_callouts_path,
|
2022-02-15 16:12:52 -05:00
|
|
|
callouts_feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace),
|
|
|
|
learn_more_link: link_to(_('Learn more.'), help_page_path('/'), rel: 'noopener noreferrer', target: '_blank') # TBD: https://gitlab.com/gitlab-org/gitlab/-/issues/350632
|
|
|
|
}
|
|
|
|
end
|
|
|
|
|
|
|
|
private
|
|
|
|
|
|
|
|
def storage_enforcement_banner_user_callouts_feature_name(namespace)
|
|
|
|
"storage_enforcement_banner_#{storage_enforcement_banner_threshold(namespace)}_enforcement_threshold"
|
|
|
|
end
|
|
|
|
|
|
|
|
def storage_enforcement_banner_threshold(namespace)
|
|
|
|
days_to_enforcement_date = (namespace.storage_enforcement_date - Date.today)
|
|
|
|
|
|
|
|
return :first if days_to_enforcement_date > 30
|
|
|
|
return :second if days_to_enforcement_date > 15 && days_to_enforcement_date <= 30
|
|
|
|
return :third if days_to_enforcement_date > 7 && days_to_enforcement_date <= 15
|
2022-03-11 07:07:56 -05:00
|
|
|
return :fourth if days_to_enforcement_date >= 0 && days_to_enforcement_date <= 7
|
2022-02-15 16:12:52 -05:00
|
|
|
end
|
|
|
|
|
|
|
|
def user_dismissed_storage_enforcement_banner?(namespace)
|
|
|
|
return false unless current_user
|
|
|
|
|
2022-03-11 07:07:56 -05:00
|
|
|
if namespace.user_namespace?
|
|
|
|
current_user.dismissed_callout?(feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace))
|
|
|
|
else
|
|
|
|
current_user.dismissed_callout_for_group?(feature_name: storage_enforcement_banner_user_callouts_feature_name(namespace),
|
|
|
|
group: namespace)
|
|
|
|
end
|
2022-02-15 16:12:52 -05:00
|
|
|
end
|
2016-11-22 11:58:10 -05:00
|
|
|
end
|