diff options
Diffstat (limited to 'app/models/plan_limits.rb')
-rw-r--r-- | app/models/plan_limits.rb | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/app/models/plan_limits.rb b/app/models/plan_limits.rb index bf69f425189..6795e7a3049 100644 --- a/app/models/plan_limits.rb +++ b/app/models/plan_limits.rb @@ -4,11 +4,18 @@ class PlanLimits < ApplicationRecord include IgnorableColumns ignore_column :ci_max_artifact_size_running_container_scanning, remove_with: '14.3', remove_after: '2021-08-22' ignore_column :web_hook_calls_high, remove_with: '15.10', remove_after: '2022-02-22' + ignore_column :ci_active_pipelines, remove_with: '16.3', remove_after: '2022-07-22' + + attribute :limits_history, :ind_jsonb, default: -> { {} } + validates :limits_history, json_schema: { filename: 'plan_limits_history' } LimitUndefinedError = Class.new(StandardError) belongs_to :plan + validates :notification_limit, numericality: { only_integer: true, greater_than_or_equal_to: 0 } + validates :enforcement_limit, numericality: { only_integer: true, greater_than_or_equal_to: 0 } + def exceeded?(limit_name, subject, alternate_limit: 0) limit = limit_for(limit_name, alternate_limit: alternate_limit) return false unless limit @@ -37,4 +44,39 @@ class PlanLimits < ApplicationRecord limits = [limit, alternate_limit] limits.map(&:to_i).select(&:positive?).min end + + # Overridden in EE + def dashboard_storage_limit_enabled? + false + end + + def log_limits_changes(user, new_limits) + new_limits.each do |attribute, value| + limits_history[attribute] ||= [] + limits_history[attribute] << { + user_id: user&.id, + username: user&.username, + timestamp: Time.current.utc.to_i, + value: value + } + end + + update(limits_history: limits_history) + end + + def limit_attribute_changes(attribute) + limit_history = limits_history[attribute] + return [] unless limit_history + + limit_history.map do |entry| + { + timestamp: entry[:timestamp], + value: entry[:value], + username: entry[:username], + user_id: entry[:user_id] + } + end + end end + +PlanLimits.prepend_mod_with('PlanLimits') |