summaryrefslogtreecommitdiff
path: root/lib/gitlab/alert_management/fingerprint.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/alert_management/fingerprint.rb')
-rw-r--r--lib/gitlab/alert_management/fingerprint.rb16
1 files changed, 12 insertions, 4 deletions
diff --git a/lib/gitlab/alert_management/fingerprint.rb b/lib/gitlab/alert_management/fingerprint.rb
index 6ab47c88ca1..d7842d3b37d 100644
--- a/lib/gitlab/alert_management/fingerprint.rb
+++ b/lib/gitlab/alert_management/fingerprint.rb
@@ -10,11 +10,14 @@ module Gitlab
def generate(data)
return unless data.present?
- if data.is_a?(Array)
- data = flatten_array(data)
- end
+ string = case data
+ when Array then flatten_array(data)
+ when Hash then flatten_hash(data)
+ else
+ data.to_s
+ end
- Digest::SHA1.hexdigest(data.to_s)
+ Digest::SHA1.hexdigest(string)
end
private
@@ -22,6 +25,11 @@ module Gitlab
def flatten_array(array)
array.flatten.map!(&:to_s).join
end
+
+ def flatten_hash(hash)
+ # Sort hash so SHA generated is the same
+ Gitlab::Utils::SafeInlineHash.merge_keys!(hash).sort.to_s
+ end
end
end
end