Project

General

Profile

Feature #16646

Allow Foreman controllers to be extended to include fields from external plugins

Added by Andrew Kofink almost 2 years ago. Updated 2 months ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Plugins-Engines
Target version:
Difficulty:
Triaged:
Bugzilla link:
Team Backlog:
Fixed in Releases:
Found in Releases:

Description

Problem:

If an external plugin, such as Katello, uses database fields in a view that Foreman prepares in a Foreman controller, additional database queries are run from the view layer as the fields or related tables are requested. In index views, this issue causes N+1 query warnings as the view iterates over each object.

Proposed solution:

Allow index actions to be extended per-controller to use a private class method which provide additional fields to pass to the ActiveRecord::Relation#includes method.

Example:

class HostsController
  class << self do
    def index_fields
      @index_fields ||= {}
    end

    def include_index_field(field_hash)
      index_fields.merge!(field_hash)
    end
  end

  def index
    @hosts = Host.includes(self.class.index_fields)
  end
end

Related issues

Related to Katello - Bug #16010: "Error: Request Timeout" from hammer when asked to show >400 content hostsClosed2016-08-08
Related to Discovery - Refactor #17085: Make use of index scope DSLNew2016-10-25

Associated revisions

Revision 87f8f03e (diff)
Added by Shimon Shtein almost 2 years ago

Fixes #16646 - Add ability to plugins to modify index scope

History

#1 Updated by Andrew Kofink almost 2 years ago

  • Related to Bug #16010: "Error: Request Timeout" from hammer when asked to show >400 content hosts added

#2 Updated by Dominic Cleal almost 2 years ago

  • Category set to Plugins-Engines
  • Status changed from New to Assigned

#3 Updated by Shimon Shtein almost 2 years ago

  • Target version set to 127

#4 Updated by The Foreman Bot almost 2 years ago

  • Status changed from Assigned to Ready For Testing
  • Pull request https://github.com/theforeman/foreman/pull/3887 added

#5 Updated by Ivan Necas almost 2 years ago

  • Target version changed from 127 to 1.5.1

#6 Updated by Ivan Necas almost 2 years ago

  • Target version changed from 1.5.1 to 1.4.1

#7 Updated by Lukas Zapletal almost 2 years ago

#8 Updated by Shimon Shtein almost 2 years ago

  • Status changed from Ready For Testing to Closed
  • % Done changed from 0 to 100

#9 Updated by Dominic Cleal almost 2 years ago

  • Legacy Backlogs Release (now unused) set to 189

Also available in: Atom PDF