Skip to content
Snippets Groups Projects

Fix n plus one issue ci build dast profile

All threads resolved!
1 file
+ 15
8
Compare changes
  • Side-by-side
  • Inline
@@ -11,7 +11,6 @@ def initialize(project:, current_user: nil, params: {})
@@ -11,7 +11,6 @@ def initialize(project:, current_user: nil, params: {})
@builds = params[:builds] || []
@builds = params[:builds] || []
@dast_site_profiles_builds = []
@dast_site_profiles_builds = []
@dast_scanner_profiles_builds = []
@dast_scanner_profiles_builds = []
@errors = []
end
end
def execute
def execute
@@ -20,6 +19,17 @@ def execute
@@ -20,6 +19,17 @@ def execute
dast_site_profiles = find_dast_site_profiles(project.id)
dast_site_profiles = find_dast_site_profiles(project.id)
dast_scanner_profiles = find_dast_scanner_profiles(project.id)
dast_scanner_profiles = find_dast_scanner_profiles(project.id)
 
prepare_builds(dast_scanner_profiles, dast_site_profiles)
 
 
return ServiceResponse.error(message: errors) unless errors.empty?
 
 
insert_builds
 
ServiceResponse.success(payload: @builds)
 
end
 
 
private
 
 
def prepare_builds(dast_scanner_profiles, dast_site_profiles)
@builds.each do |build|
@builds.each do |build|
next unless build.is_a?(::Ci::Build)
next unless build.is_a?(::Ci::Build)
@@ -33,14 +43,11 @@ def execute
@@ -33,14 +43,11 @@ def execute
@dast_scanner_profiles_builds.append({ ci_build_id: build.id, dast_scanner_profile_id: dast_scanner_profile.id }) if has_permission?(dast_scanner_profile, build.options[:dast_configuration][:scanner_profile])
@dast_scanner_profiles_builds.append({ ci_build_id: build.id, dast_scanner_profile_id: dast_scanner_profile.id }) if has_permission?(dast_scanner_profile, build.options[:dast_configuration][:scanner_profile])
end
end
end
end
return ServiceResponse.error(message: @errors) unless @errors.empty?
insert_builds
ServiceResponse.success(payload: @builds)
end
end
private
def errors
 
@errors ||= []
 
end
def find_dast_site_profiles(project_id)
def find_dast_site_profiles(project_id)
dast_site_profiles_names = @builds.collect {|build| build.options[:dast_configuration][:site_profile] if build.options[:dast_configuration]}
dast_site_profiles_names = @builds.collect {|build| build.options[:dast_configuration][:site_profile] if build.options[:dast_configuration]}
@@ -64,7 +71,7 @@ def has_permission?(profile, name)
@@ -64,7 +71,7 @@ def has_permission?(profile, name)
if can?(current_user, :read_on_demand_dast_scan, profile)
if can?(current_user, :read_on_demand_dast_scan, profile)
true
true
else
else
@errors.push(_('DAST profile not found: %{name}') % { name: name })
errors.push(_('DAST profile not found: %{name}') % { name: name })
false
false
end
end
end
end
Loading