Skip to content
代码片段 群组 项目
未验证 提交 50be7731 编辑于 作者: Brian Williams's avatar Brian Williams 提交者: Michał Zając
浏览文件

Improve performance of vulnerability matching

上级 804d1a55
No related branches found
No related tags found
无相关合并请求
......@@ -8,7 +8,7 @@ class AutoResolveService
def initialize(project, vulnerability_ids)
@project = project
@vulnerabilities = Vulnerability.id_in(vulnerability_ids.first(MAX_BATCH))
@vulnerability_reads = Vulnerabilities::Read.by_vulnerabilities(vulnerability_ids)
end
def execute
......@@ -25,21 +25,16 @@ def execute
private
attr_reader :project, :vulnerabilities
attr_reader :project, :vulnerability_reads
def vulnerabilities_to_resolve
policies_by_vulnerability.keys
end
def policies_by_vulnerability
policies.each_with_object({}) do |policy, memo|
vulnerabilities.each do |vulnerability|
if policy.match?(vulnerability)
memo[vulnerability] ||= []
memo[vulnerability].push(policy)
end
end
end
vulnerability_reads.index_with do |read|
policies.find { |policy| policy.match?(read) }
end.compact
end
strong_memoize_attr :policies_by_vulnerability
......@@ -55,7 +50,7 @@ def resolve_vulnerabilities
Vulnerability.transaction do
Vulnerabilities::StateTransition.insert_all!(state_transition_attrs)
Vulnerability.id_in(vulnerabilities_to_resolve.map(&:id)).update_all(
Vulnerability.id_in(vulnerabilities_to_resolve.first(MAX_BATCH).map(&:vulnerability_id)).update_all(
state: :resolved,
auto_resolved: true,
resolved_by_id: user.id,
......@@ -102,8 +97,8 @@ def system_note_attrs
end
def comment(vulnerability)
policy_names = policies_by_vulnerability[vulnerability].map(&:name)
_("Auto-resolved by vulnerability management policy") + " #{policy_names.join(', ')}"
policy = policies_by_vulnerability[vulnerability]
_("Auto-resolved by vulnerability management policy") + " #{policy.name}"
end
def user
......
0% 加载中 .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册