foreman_statistics 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (74) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +619 -0
  3. data/README.md +40 -0
  4. data/Rakefile +47 -0
  5. data/app/controllers/concerns/foreman_statistics/parameters/trend.rb +20 -0
  6. data/app/controllers/foreman_statistics/api/v2/statistics_controller.rb +33 -0
  7. data/app/controllers/foreman_statistics/api/v2/trends_controller.rb +58 -0
  8. data/app/controllers/foreman_statistics/react_controller.rb +19 -0
  9. data/app/controllers/foreman_statistics/statistics_controller.rb +24 -0
  10. data/app/controllers/foreman_statistics/trends_controller.rb +58 -0
  11. data/app/helpers/foreman_statistics/trends_helper.rb +53 -0
  12. data/app/models/concerns/foreman_statistics/compute_resource_decorations.rb +9 -0
  13. data/app/models/concerns/foreman_statistics/environment_decorations.rb +9 -0
  14. data/app/models/concerns/foreman_statistics/general_setting_decorations.rb +17 -0
  15. data/app/models/concerns/foreman_statistics/hostgroup_decorations.rb +9 -0
  16. data/app/models/concerns/foreman_statistics/model_decorations.rb +9 -0
  17. data/app/models/concerns/foreman_statistics/operatingsystem_decorations.rb +9 -0
  18. data/app/models/concerns/foreman_statistics/setting_decorations.rb +9 -0
  19. data/app/models/foreman_statistics/fact_trend.rb +57 -0
  20. data/app/models/foreman_statistics/foreman_trend.rb +41 -0
  21. data/app/models/foreman_statistics/trend.rb +38 -0
  22. data/app/models/foreman_statistics/trend_counter.rb +11 -0
  23. data/app/services/foreman_statistics/statistics.rb +21 -0
  24. data/app/services/foreman_statistics/statistics/base.rb +39 -0
  25. data/app/services/foreman_statistics/statistics/count_facts.rb +17 -0
  26. data/app/services/foreman_statistics/statistics/count_hosts.rb +9 -0
  27. data/app/services/foreman_statistics/statistics/count_numerical_fact_pair.rb +43 -0
  28. data/app/services/foreman_statistics/statistics/count_puppet_classes.rb +23 -0
  29. data/app/services/foreman_statistics/trend_importer.rb +63 -0
  30. data/app/views/foreman_statistics/api/v2/trends/base.json.rabl +4 -0
  31. data/app/views/foreman_statistics/api/v2/trends/create.json.rabl +3 -0
  32. data/app/views/foreman_statistics/api/v2/trends/index.json.rabl +3 -0
  33. data/app/views/foreman_statistics/api/v2/trends/main.json.rabl +5 -0
  34. data/app/views/foreman_statistics/api/v2/trends/show.json.rabl +3 -0
  35. data/app/views/foreman_statistics/api/v2/trends/update.json.rabl +3 -0
  36. data/app/views/foreman_statistics/layouts/application_react.html.erb +16 -0
  37. data/app/views/foreman_statistics/trends/_empty_data.html.erb +7 -0
  38. data/app/views/foreman_statistics/trends/_fields.html.erb +7 -0
  39. data/app/views/foreman_statistics/trends/_form.html.erb +8 -0
  40. data/app/views/foreman_statistics/trends/_hosts.html.erb +13 -0
  41. data/app/views/foreman_statistics/trends/edit.html.erb +46 -0
  42. data/app/views/foreman_statistics/trends/index.html.erb +39 -0
  43. data/app/views/foreman_statistics/trends/new.html.erb +4 -0
  44. data/app/views/foreman_statistics/trends/show.html.erb +25 -0
  45. data/app/views/foreman_statistics/trends/welcome.html.erb +12 -0
  46. data/config/routes.rb +22 -0
  47. data/db/migrate/20200605153005_migrate_core_types.rb +15 -0
  48. data/db/migrate_foreman/20121012170851_create_trends.rb +25 -0
  49. data/db/migrate_foreman/20121012170936_create_trend_counters.rb +14 -0
  50. data/db/migrate_foreman/20150202094307_add_range_to_trend_counters.rb +6 -0
  51. data/db/migrate_foreman/20181031155025_add_trend_counter_created_at_unique_constraint.rb +9 -0
  52. data/lib/foreman_statistics.rb +4 -0
  53. data/lib/foreman_statistics/engine.rb +104 -0
  54. data/lib/foreman_statistics/version.rb +3 -0
  55. data/lib/tasks/foreman_statistics_tasks.rake +78 -0
  56. data/locale/Makefile +60 -0
  57. data/locale/en/foreman_statistics.po +19 -0
  58. data/locale/foreman_statistics.pot +19 -0
  59. data/locale/gemspec.rb +2 -0
  60. data/test/factories/foreman_statistics_factories.rb +68 -0
  61. data/test/fixtures/permissions.yml +26 -0
  62. data/test/fixtures/settings.yml +6 -0
  63. data/test/functional/foreman_statistics/api/v2/statistics_controller_test.rb +19 -0
  64. data/test/functional/foreman_statistics/api/v2/trends_controller_test.rb +74 -0
  65. data/test/functional/foreman_statistics/statistics_controller_test.rb +23 -0
  66. data/test/functional/foreman_statistics/trends_controller_test.rb +115 -0
  67. data/test/models/foreman_statistics/trend_counter_test.rb +10 -0
  68. data/test/models/foreman_statistics/trend_test.rb +22 -0
  69. data/test/test_plugin_helper.rb +6 -0
  70. data/test/unit/foreman_statistics/access_permissions_test.rb +16 -0
  71. data/test/unit/foreman_statistics/statistics_test.rb +82 -0
  72. data/test/unit/foreman_statistics_test.rb +11 -0
  73. data/test/unit/tasks/foreman_statistics_tasks_test.rb +205 -0
  74. metadata +199 -0
@@ -0,0 +1,8 @@
1
+ <%= form_for @trend do |f| %>
2
+ <%= base_errors_for @trend %>
3
+ <% types = trendable_types %>
4
+ <%= selectable_f f, :trendable_type, types, { }, :place_holder => _('Please Select'), :onchange => 'tfm.trends.trendTypeSelected(this)' %>
5
+ <%= select_f(f, :trendable_id, FactName.no_timestamp_fact, :id, :name, { :include_blank => true }, :disabled => types.first[1] != 'FactName') %>
6
+ <%= text_f f, :name, :disabled => types.first[1] != 'FactName' %>
7
+ <%= submit_or_cancel f %>
8
+ <% end %>
@@ -0,0 +1,13 @@
1
+ <% @trend.find_hosts.in_groups(4, false) do |group| %>
2
+ <div class="col-md-3">
3
+ <td>
4
+ <% group.each do |host| %>
5
+ <ul class="base">
6
+ <li>
7
+ <%= link_to(host, host_path(:id => host), :title => _("Show Host")) %>
8
+ </li>
9
+ </ul>
10
+ <% end %>
11
+ </td>
12
+ </div>
13
+ <% end %>
@@ -0,0 +1,46 @@
1
+ <% title _("Edit Trend %s") % @trend.to_label %>
2
+ <div class="col-md-6">
3
+ <%= form_tag trend_path, :method => :put do %>
4
+ <% if @trend.is_a?(ForemanStatistics::FactTrend) %>
5
+ <table class="table">
6
+ <thead>
7
+ <tr>
8
+ <th style='width: 40%'><%= _("Fact Name") %></th>
9
+ <th style="width: 60%"><%= _("Display Name") %></th>
10
+ </tr>
11
+ </thead>
12
+ <tbody>
13
+ <tr>
14
+ <%= fields_for "trend[]", @trend do |f| %>
15
+ <td>
16
+ <%= @trend.fact_name %>
17
+ </td>
18
+ <td>
19
+ <%= f.text_field :name %>
20
+ </td>
21
+ <% end %>
22
+ </tr>
23
+ </tbody>
24
+ </table>
25
+ <% end %>
26
+ <table class="table">
27
+ <thead>
28
+ <tr>
29
+ <th style="width: 40%">Value</th>
30
+ <th style="width: 60%"><%= _("Display Name") %></th>
31
+ </tr>
32
+ </thead>
33
+ <tbody>
34
+ <% @trend.values.each do |trend| %>
35
+ <tr>
36
+ <%= fields_for "trend[]", trend do |f| %>
37
+ <%= render 'fields', :f => f, :trend => trend %>
38
+ <% end %>
39
+ </tr>
40
+ <% end %>
41
+ </tbody>
42
+ </table>
43
+ <%= link_to(_("Cancel"), trends_path, :class => "btn btn-default") %>
44
+ <%= submit_tag _("Submit"), :class => "btn-primary btn" %>
45
+ <% end %>
46
+ </div>
@@ -0,0 +1,39 @@
1
+ <%= javascript 'charts' %>
2
+ <% title _("Trends") %>
3
+ <% title_actions new_link(_("Add Trend Counter")),
4
+ documentation_button('4.1.3Trends') %>
5
+ <% if @trends.empty? %>
6
+ <%= alert :class => 'alert-info', :header => _("No trend counter defined"),
7
+ :text => (_("To define trend counters, use the Add Trend Counter button.</br> To start collecting trend data, set a cron job to execute 'foreman-rake foreman_statistics:trends:counter' at least every %s minutes.") % Setting[:outofsync_interval]).html_safe %>
8
+ <% end %>
9
+
10
+ <% if @trends.any? and ForemanStatistics::TrendCounter.unconfigured? %>
11
+ <%= alert :class => 'alert-info', :header => _("No trend counter found"),
12
+ :text => (_("To start collecting trend data, set a cron job to execute <span class='black'>foreman-rake foreman_statistics:trends:counter</span> at least every %s minutes.") % Setting[:outofsync_interval]).html_safe %>
13
+ <% end %>
14
+
15
+ <table class="<%= table_css_classes 'table-fixed' %>">
16
+ <thead>
17
+ <tr>
18
+ <th class='col-md-10'><%= _("Name") %></th>
19
+ <th class='col-md-2'><%= _("Action") %></th>
20
+ </tr>
21
+ </thead>
22
+ <tbody>
23
+ <% @trends.each do |trend| %>
24
+ <tr>
25
+ <td class="ellipsis"><%= link_to trend.to_label, trend_path(:id => trend), :title => _("Show Trends") %></td>
26
+ <td>
27
+ <%= action_buttons(
28
+ display_link_if_authorized(_("Edit"), hash_for_edit_trend_path(:id => trend)),
29
+ display_delete_if_authorized(hash_for_trend_path(:id => trend), :data => { :confirm => _("Delete all the trend history for %s?") % trend.type_name })) %>
30
+ </td>
31
+ </tr>
32
+ <% end %>
33
+ </tbody>
34
+ </table>
35
+ <%= will_paginate_with_info @trends %>
36
+ <% unless ForemanStatistics::TrendCounter.unconfigured? %>
37
+ <%= _("Last update:") %>
38
+ <%= date_time_relative(ForemanStatistics::TrendCounter.order(:created_at).last.created_at) %>
39
+ <% end %>
@@ -0,0 +1,4 @@
1
+ <% title _("Create Trend") %>
2
+ <% javascript *webpack_asset_paths('foreman_statistics', :extension => 'js') %>
3
+
4
+ <%= render :partial => 'form' %>
@@ -0,0 +1,25 @@
1
+ <%= javascript 'charts' %>
2
+ <% title(_("Trends for %s") % trend_title(@trend)) %>
3
+ <% content_for(:search_bar) { trend_days_filter(@trend) } %>
4
+ <div class="row">
5
+ <div class="stats-well col-md-12">
6
+ <h4 class="ca"><%= "#{trend_title(@trend)}" %></h4>
7
+ <h6 class="ca"><%= n_("last %s day", "last %s days", range) % range %></h6>
8
+ <%= flot_chart 'trend_graph','' ,_('Number of Hosts') , chart_data(@trend, range.days.ago), :class=>'statistics-chart stack', :legend => 'external' %>
9
+ </div>
10
+ </div>
11
+ <div id="legendContainer"></div>
12
+ <table class="table">
13
+ <% unless @trend.fact_value.nil? %>
14
+ <thead>
15
+ <tr>
16
+ <th colspan="4"><%= _("Hosts") %></th>
17
+ </tr>
18
+ </thead>
19
+ <tbody>
20
+ <tr>
21
+ <%= render 'hosts' %>
22
+ </tr>
23
+ </tbody>
24
+ <% end %>
25
+ </table>
@@ -0,0 +1,12 @@
1
+ <% content_for(:title, _("Trends")) %>
2
+ <div class="blank-slate-pf">
3
+ <div class="blank-slate-pf-icon">
4
+ <%= icon_text("area-chart", "", :kind => "fa") %>
5
+ </div>
6
+ <h1><%= _('Trends') %></h1>
7
+ <p><%= _("Trends in Foreman allow you to track changes in your infrastructure over time. It allows you to track both Foreman related information and to any fact. The Trend pages give a graph of how the number of hosts with that value have changed over time, and list the current hosts.") %></p>
8
+ <p><%= link_to _('Learn more about this in the documentation.'), documentation_url("4.1.3Trends")%></p>
9
+ <div class="blank-slate-pf-main-action">
10
+ <%= new_link(_("Add Trend Counter"), :class => 'btn-lg') %>
11
+ </div>
12
+ </div>
@@ -0,0 +1,22 @@
1
+ ForemanStatistics::Engine.routes.draw do
2
+ resources :trends do
3
+ collection do
4
+ post 'count'
5
+ get 'help', :action => :welcome
6
+ end
7
+ end
8
+
9
+ resources :statistics, :only => %i[index show], constraints: ->(req) { req.format == :json }
10
+ match 'statistics' => 'react#index', :via => :get
11
+
12
+ namespace :api, defaults: { format: 'json' } do
13
+ scope '(:apiv)', module: :v2, defaults: { apiv: 'v2' }, apiv: /v1|v2/, constraints: ApiConstraints.new(version: 2, default: true) do
14
+ resources :trends, :only => %i[create index show destroy]
15
+ resources :statistics, :only => [:index]
16
+ end
17
+ end
18
+ end
19
+
20
+ Foreman::Application.routes.draw do
21
+ mount ForemanStatistics::Engine, at: '/foreman_statistics'
22
+ end
@@ -0,0 +1,15 @@
1
+ class MigrateCoreTypes < ActiveRecord::Migration[6.0]
2
+ def up
3
+ Permission.where(:resource_type => 'Trend').update_all(:resource_type => 'ForemanStatistics::Trend')
4
+ %w[ForemanTrend FactTrend Trend].each do |t|
5
+ Trend.where(:type => t).update_all(:type => "ForemanStatistics::#{t}")
6
+ end
7
+ end
8
+
9
+ def down
10
+ Permission.where(:resource_type => 'ForemanStatistics::Trend').update_all(:resource_type => 'Trend')
11
+ %w[ForemanTrend FactTrend Trend].each do |t|
12
+ Trend.where(:type => "ForemanStatistics::#{t}").update_all(:type => t)
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,25 @@
1
+ class CreateTrends < ActiveRecord::Migration[6.0]
2
+ def up
3
+ create_table :trends do |t|
4
+ t.string :trendable_type, :limit => 255
5
+ t.integer :trendable_id
6
+ t.string :name, :limit => 255
7
+ t.string :type, :limit => 255
8
+ t.string :fact_value, :limit => 255
9
+ t.string :fact_name, :limit => 255
10
+
11
+ t.timestamps null: true
12
+ end
13
+ add_index :trends, :type
14
+ add_index :trends, %i[trendable_type trendable_id]
15
+ add_index :trends, :fact_value
16
+ end
17
+
18
+ def down
19
+ remove_index :trends, :type
20
+ remove_index :trends, %i[trendable_type trendable_id]
21
+ remove_index :trends, :fact_value
22
+
23
+ drop_table :trends
24
+ end
25
+ end
@@ -0,0 +1,14 @@
1
+ class CreateTrendCounters < ActiveRecord::Migration[6.0]
2
+ def up
3
+ create_table :trend_counters do |t|
4
+ t.references :trend, foreign_key: true
5
+ t.integer :count
6
+
7
+ t.timestamps null: true
8
+ end
9
+ end
10
+
11
+ def down
12
+ drop_table :trend_counters
13
+ end
14
+ end
@@ -0,0 +1,6 @@
1
+ class AddRangeToTrendCounters < ActiveRecord::Migration[6.0]
2
+ def change
3
+ add_column :trend_counters, :interval_start, :datetime
4
+ add_column :trend_counters, :interval_end, :datetime
5
+ end
6
+ end
@@ -0,0 +1,9 @@
1
+ class AddTrendCounterCreatedAtUniqueConstraint < ActiveRecord::Migration[6.0]
2
+ def up
3
+ add_index :trend_counters, %i[trend_id created_at], unique: true
4
+ end
5
+
6
+ def down
7
+ remove_index :trend_counters, %i[trend_id created_at]
8
+ end
9
+ end
@@ -0,0 +1,4 @@
1
+ require 'foreman_statistics/engine'
2
+
3
+ module ForemanStatistics
4
+ end
@@ -0,0 +1,104 @@
1
+ module ForemanStatistics
2
+ class Engine < ::Rails::Engine
3
+ isolate_namespace ForemanStatistics
4
+ engine_name 'foreman_statistics'
5
+
6
+ config.autoload_paths += Dir["#{config.root}/app/controllers/concerns"]
7
+ config.autoload_paths += Dir["#{config.root}/app/helpers/concerns"]
8
+ config.autoload_paths += Dir["#{config.root}/app/models/concerns"]
9
+ config.autoload_paths += Dir["#{config.root}/app/overrides"]
10
+
11
+ config.paths['db/migrate'] << 'db/migrate_foreman' if Gem::Dependency.new('', '>= 2.2').match?('', SETTINGS[:version])
12
+
13
+ # Add any db migrations
14
+ initializer 'foreman_statistics.load_app_instance_data' do |app|
15
+ ForemanStatistics::Engine.paths['db/migrate'].existent.each do |path|
16
+ app.config.paths['db/migrate'] << path
17
+ end
18
+ end
19
+
20
+ initializer 'foreman_statistics.register_plugin', :before => :finisher_hook do |_app|
21
+ Foreman::Plugin.register :foreman_statistics do
22
+ requires_foreman '>= 2.1.0'
23
+
24
+ # ==== Core cleanups
25
+ # TODO: clean up when this gets removed from core
26
+ delete_menu_item :top_menu, :trends
27
+ delete_menu_item :top_menu, :statistics
28
+ # ====
29
+
30
+ # Add Global JS file for extending foreman-core components and routes
31
+ register_global_js_file 'fills'
32
+
33
+ # Remove core permissions
34
+ %i[view_statistics view_trends create_trends edit_trends destroy_trends update_trends].each do |perm_name|
35
+ p = Foreman::AccessControl.permission(perm_name)
36
+ Foreman::AccessControl.remove_permission(p)
37
+ end
38
+
39
+ # Add permissions
40
+ security_block :foreman_statistics do
41
+ permission :view_statistics, { :'foreman_statistics/react' => [:index],
42
+ :'foreman_statistics/statistics' => %i[index show],
43
+ :'foreman_statistics/api/v2/statistics' => [:index] }
44
+
45
+ permission :view_trends, { :'foreman_statistics/trends' => %i[index show welcome],
46
+ :'foreman_statistics/api/v2/trends' => %i[index show] },
47
+ :resource_type => 'ForemanStatistics::Trend'
48
+ permission :create_trends, { :'foreman_statistics/trends' => %i[new create],
49
+ :'foreman_statistics/api/v2/trends' => %i[new create] },
50
+ :resource_type => 'ForemanStatistics::Trend'
51
+ permission :edit_trends, { :'foreman_statistics/trends' => %i[edit update] },
52
+ :resource_type => 'ForemanStatistics::Trend'
53
+ permission :destroy_trends, { :'foreman_statistics/trends' => [:destroy],
54
+ :'foreman_statistics/api/v2/trends' => [:destroy] },
55
+ :resource_type => 'ForemanStatistics::Trend'
56
+ permission :update_trends, { :'foreman_statistics/trends' => [:count] },
57
+ :resource_type => 'ForemanStatistics::Trend'
58
+ end
59
+
60
+ # add_resource_permissions_to_default_roles(['ForemanStatistics::Trend'])
61
+
62
+ add_menu_item :top_menu, :trends, {
63
+ :caption => N_('Trends'),
64
+ :engine => ForemanStatistics::Engine, :parent => :monitor_menu, :after => :audits,
65
+ :url_hash => { :controller => 'foreman_statistics/trends', :action => :index }
66
+ }
67
+
68
+ add_menu_item :top_menu, :statistics, {
69
+ :caption => N_('Statistics'),
70
+ :engine => ForemanStatistics::Engine, :parent => :monitor_menu, :after => :trends,
71
+ :url_hash => { :controller => 'foreman_statistics/statistics', :action => :index }
72
+ }
73
+ end
74
+ end
75
+
76
+ # Include concerns in this config.to_prepare block
77
+ config.to_prepare do
78
+ ::ComputeResource.include ForemanStatistics::ComputeResourceDecorations
79
+ ::Environment.include ForemanStatistics::EnvironmentDecorations
80
+ ::Hostgroup.include ForemanStatistics::HostgroupDecorations
81
+ ::Model.include ForemanStatistics::ModelDecorations
82
+ ::Operatingsystem.include ForemanStatistics::OperatingsystemDecorations
83
+ ::Setting.include ForemanStatistics::SettingDecorations
84
+ ::Setting::General.prepend ForemanStatistics::GeneralSettingDecorations
85
+ begin
86
+ ::Setting::General.load_defaults
87
+ rescue ActiveRecord::NoDatabaseError => e
88
+ Rails.logger.warn e
89
+ end
90
+ end
91
+
92
+ rake_tasks do
93
+ Rake::Task['db:seed'].enhance do
94
+ ForemanStatistics::Engine.load_seed
95
+ end
96
+ end
97
+
98
+ initializer 'foreman_statistics.register_gettext', after: :load_config_initializers do |_app|
99
+ locale_dir = File.join(File.expand_path('../..', __dir__), 'locale')
100
+ locale_domain = 'foreman_statistics'
101
+ Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,3 @@
1
+ module ForemanStatistics
2
+ VERSION = '0.1.0'.freeze
3
+ end
@@ -0,0 +1,78 @@
1
+ require 'rake/testtask'
2
+
3
+ # Tasks
4
+ namespace :foreman_statistics do
5
+ namespace :trends do
6
+ desc 'Create Trend counts'
7
+ task :counter => :environment do
8
+ ForemanStatistics::TrendImporter.update!
9
+ end
10
+
11
+ desc 'Reduces amount of points for each trend group'
12
+ task :reduce => :environment do
13
+ start = Process.clock_gettime(Process::CLOCK_MONOTONIC)
14
+
15
+ trends = ForemanStatistics::Trend.pluck(:id)
16
+ trends_count = trends.length
17
+ current_record = 0
18
+
19
+ trends.each do |trend_id|
20
+ puts "Working on trend_id #{trend_id}, #{(current_record += 1)} of #{trends_count}" unless Rails.env.test?
21
+
22
+ current_interval = ForemanStatistics::TrendCounter.where(trend_id: trend_id).order(:created_at).first
23
+ next if current_interval.nil?
24
+
25
+ current_interval.interval_start = current_interval.created_at
26
+ while (next_interval = ForemanStatistics::TrendCounter.where(trend_id: trend_id)
27
+ .where('created_at > ? and count <> ?', current_interval.created_at, current_interval.count)
28
+ .order(:created_at).first)
29
+ current_interval.interval_end = next_interval.created_at
30
+ current_interval.save!
31
+ current_interval = next_interval
32
+ current_interval.interval_start = current_interval.created_at
33
+ end
34
+ current_interval.save!
35
+ end
36
+
37
+ ForemanStatistics::TrendCounter.unscoped.where(interval_start: nil).delete_all
38
+
39
+ puts "It took #{Process.clock_gettime(Process::CLOCK_MONOTONIC) - start} seconds to complete" unless Rails.env.test?
40
+ end
41
+ end
42
+ end
43
+
44
+ # Tests
45
+ namespace :test do
46
+ desc 'Test ForemanStatistics'
47
+ Rake::TestTask.new(:foreman_statistics) do |t|
48
+ test_dir = File.join(File.dirname(__FILE__), '../..', 'test')
49
+ t.libs << ['test', test_dir]
50
+ t.pattern = "#{test_dir}/**/*_test.rb"
51
+ t.verbose = true
52
+ t.warning = false
53
+ end
54
+ end
55
+
56
+ namespace :foreman_statistics do
57
+ task :rubocop do
58
+ begin
59
+ require 'rubocop/rake_task'
60
+ RuboCop::RakeTask.new(:rubocop_foreman_statistics) do |task|
61
+ task.patterns = ["#{ForemanStatistics::Engine.root}/app/**/*.rb",
62
+ "#{ForemanStatistics::Engine.root}/lib/**/*.rb",
63
+ "#{ForemanStatistics::Engine.root}/test/**/*.rb"]
64
+ end
65
+ rescue StandardError
66
+ puts 'Rubocop not loaded.'
67
+ end
68
+
69
+ Rake::Task['rubocop_foreman_statistics'].invoke
70
+ end
71
+ end
72
+
73
+ Rake::Task[:test].enhance ['test:foreman_statistics']
74
+
75
+ load 'tasks/jenkins.rake'
76
+ if Rake::Task.task_defined?(:'jenkins:unit')
77
+ Rake::Task['jenkins:unit'].enhance ['test:foreman_statistics', 'foreman_statistics:rubocop']
78
+ end