Project

General

Profile

Actions

Feature #16646

closed

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

Added by Andrew Kofink over 7 years ago. Updated almost 6 years ago.

Status:
Closed
Priority:
Normal
Assignee:
Category:
Plugin integration
Target version:
Difficulty:
Triaged:
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 2 (1 open1 closed)

Related to Katello - Bug #16010: "Error: Request Timeout" from hammer when asked to show >400 content hostsClosedAndrew Kofink08/08/2016Actions
Related to Discovery - Refactor #17085: Make use of index scope DSLNew10/25/2016Actions
Actions #1

Updated by Andrew Kofink over 7 years ago

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

Updated by Dominic Cleal over 7 years ago

  • Category set to Plugin integration
  • Status changed from New to Assigned
Actions #3

Updated by Shimon Shtein over 7 years ago

  • Target version set to 127
Actions #4

Updated by The Foreman Bot over 7 years ago

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

Updated by Ivan Necas over 7 years ago

  • Target version changed from 127 to 1.5.1
Actions #6

Updated by Ivan Necas over 7 years ago

  • Target version changed from 1.5.1 to 1.4.1
Actions #7

Updated by Lukas Zapletal over 7 years ago

Actions #8

Updated by Shimon Shtein over 7 years ago

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

Updated by Dominic Cleal over 7 years ago

  • translation missing: en.field_release set to 189
Actions

Also available in: Atom PDF