redhat_access 2.0.0 → 2.0.1
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.
- checksums.yaml +4 -4
- data/app/assets/javascripts/redhat_access/redhat_access.module.js +1 -1
- data/app/controllers/redhat_access/api/machine_telemetry_api_controller.rb +1 -1
- data/app/controllers/redhat_access/api/strata_proxy_controller.rb +1 -1
- data/app/controllers/redhat_access/api/telemetry_api_controller.rb +15 -14
- data/app/lib/actions/insights/email_poller.rb +64 -0
- data/app/mailers/redhat_access/insights_mailer.rb +22 -0
- data/app/services/redhat_access/telemetry/look_ups.rb +20 -7
- data/app/services/redhat_access/telemetry/messaging_service.rb +131 -0
- data/app/services/redhat_access/telemetry/portal_client.rb +14 -22
- data/app/views/redhat_access/insights_mailer/_new_rule_list.erb +11 -0
- data/app/views/redhat_access/insights_mailer/_new_rules_section.erb +3 -0
- data/app/views/redhat_access/insights_mailer/weekly_email.erb +254 -0
- data/db/seeds.d/201-add-insights-email-notifications.rb +22 -0
- data/lib/redhat_access/engine.rb +20 -21
- data/lib/redhat_access/version.rb +1 -1
- metadata +9 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c5bab54004d88ce1ec7130d84eadd5afd5956b88
|
4
|
+
data.tar.gz: ecc0e95ad8765e7c36a87240c32892216eec30e6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: dbb4c89af2a1b45faabf49edde514595c71f013fe0b6048d1ef72495f06defe1c1f056bfbb1b9523c6ee3801b9956f66c5d412cb105a4595cb9d26a77ee3ad26
|
7
|
+
data.tar.gz: 73cd36b923ef356914f0eface777a3d071839df9c08cb36cc6dc519421c1fc179d31a14ce7151579e727e2d2f91866491b743bb9e13281af68b66b5de5e4049a
|
@@ -80,7 +80,7 @@ angular.module('RedhatAccess', [
|
|
80
80
|
COMMON_CONFIG.showTitle = true;
|
81
81
|
hideMachinesDropdown.value = true;
|
82
82
|
NEW_DEFAULTS.product = "Red Hat Satellite or Proxy"; //TODO read from server config
|
83
|
-
NEW_DEFAULTS.version = "6.
|
83
|
+
NEW_DEFAULTS.version = "6.2"; //TODO read from server config
|
84
84
|
gettextCatalog.currentLanguage = currentLocale;
|
85
85
|
//console.log('Setting language to ' + currentLocale);
|
86
86
|
// $http({
|
@@ -9,12 +9,9 @@ module RedhatAccess
|
|
9
9
|
include RedhatAccess::Authentication::ClientAuthentication
|
10
10
|
include RedhatAccess::Telemetry::LookUps
|
11
11
|
|
12
|
-
before_filter :check_telemetry_enabled, :only => [:proxy]
|
13
12
|
|
14
|
-
|
15
|
-
|
16
|
-
UPLOAD_URL = "#{UPLOAD_HOST}/r/insights/uploads"
|
17
|
-
STRATA_URL = "#{API_HOST}/r/insights"
|
13
|
+
|
14
|
+
before_filter :check_telemetry_enabled, :only => [:proxy]
|
18
15
|
|
19
16
|
|
20
17
|
def action_permission
|
@@ -42,7 +39,7 @@ module RedhatAccess
|
|
42
39
|
#return TelemetryProxyCredentials.limit(1)[0]
|
43
40
|
end
|
44
41
|
|
45
|
-
def get_auth_opts()
|
42
|
+
def get_auth_opts(creds)
|
46
43
|
return get_ssl_options_for_org(Organization.current ,nil)
|
47
44
|
end
|
48
45
|
|
@@ -62,6 +59,11 @@ module RedhatAccess
|
|
62
59
|
machines
|
63
60
|
end
|
64
61
|
|
62
|
+
|
63
|
+
def get_current_organization
|
64
|
+
Organization.current
|
65
|
+
end
|
66
|
+
|
65
67
|
def connection_status
|
66
68
|
client = get_api_client
|
67
69
|
res = client.call_tapi('GET', 'me', nil, nil, nil)
|
@@ -123,7 +125,7 @@ module RedhatAccess
|
|
123
125
|
if original_params && original_params["accept"] && original_params["accept"] = "csv"
|
124
126
|
send_data resp_data, type: 'text/csv; charset=utf-8', :filename => "insights_report.csv"
|
125
127
|
else
|
126
|
-
if resp_data.headers && resp_data.headers[:x_resource_count]
|
128
|
+
if resp_data.respond_to?(:headers) && resp_data.headers[:x_resource_count]
|
127
129
|
response.headers['X-Resource-Count'] = resp_data.headers[:x_resource_count]
|
128
130
|
end
|
129
131
|
render status: res[:code] , json: resp_data
|
@@ -152,9 +154,6 @@ module RedhatAccess
|
|
152
154
|
params
|
153
155
|
end
|
154
156
|
|
155
|
-
def get_http_user_agent
|
156
|
-
"#{get_plugin_parent_name}/#{get_plugin_parent_version};#{get_rha_plugin_name}/#{get_rha_plugin_version}"
|
157
|
-
end
|
158
157
|
|
159
158
|
def get_branch_id
|
160
159
|
get_branch_id_for_org(Organization.current)
|
@@ -162,12 +161,14 @@ module RedhatAccess
|
|
162
161
|
|
163
162
|
def get_api_client
|
164
163
|
Rails.logger.debug("User agent for telemetry is #{get_http_user_agent}")
|
165
|
-
|
164
|
+
if User.current
|
165
|
+
|
166
|
+
end
|
167
|
+
return RedhatAccess::Telemetry::PortalClient.new(nil,
|
168
|
+
nil,
|
166
169
|
get_creds,
|
167
170
|
self,
|
168
|
-
|
169
|
-
:http_proxy => get_portal_http_proxy,
|
170
|
-
:user_agent => get_http_user_agent})
|
171
|
+
get_http_options(true))
|
171
172
|
end
|
172
173
|
|
173
174
|
def api_version
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Actions
|
2
|
+
module Insights
|
3
|
+
class EmailPoller < Actions::Base
|
4
|
+
include RedhatAccess::Telemetry::LookUps
|
5
|
+
middleware.use Actions::Middleware::RecurringLogic
|
6
|
+
class RunOnceCoordinatorLock < Dynflow::Coordinator::LockByWorld
|
7
|
+
def initialize(world)
|
8
|
+
super
|
9
|
+
@data[:id] = 'insights-email-poller'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
class << self
|
14
|
+
attr_reader :triggered_action
|
15
|
+
def ensure_running(world = ForemanTasks.dynflow.world)
|
16
|
+
world.coordinator.acquire(RunOnceCoordinatorLock.new(world)) do
|
17
|
+
unless ForemanTasks::Task::DynflowTask.for_action(self).any?
|
18
|
+
params = {:mode => :recurring,
|
19
|
+
:input_type => :cronline,
|
20
|
+
:cronline => "0 0 * * 6"}
|
21
|
+
@triggered_action = ForemanTasks::Triggering.new_from_params(params).trigger(self)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
rescue Dynflow::Coordinator::LockError
|
25
|
+
return false
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def humanized_name
|
30
|
+
N_('Insights Email Notifications')
|
31
|
+
end
|
32
|
+
|
33
|
+
def plan
|
34
|
+
# Make sure we only have one instance
|
35
|
+
Rails.logger.debug("Planning Task ")
|
36
|
+
plan_self
|
37
|
+
end
|
38
|
+
|
39
|
+
def run
|
40
|
+
Rails.logger.debug("Running Task")
|
41
|
+
Organization.all.each do |org|
|
42
|
+
if telemetry_enabled?(org) && is_susbcribed_to_redhat?(org)
|
43
|
+
weekly_summary(org)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def weekly_summary(org)
|
49
|
+
message_svc = RedhatAccess::Telemetry::MessagingService.new(org)
|
50
|
+
weekly_data_list = message_svc.all_weekly_mail_data
|
51
|
+
weekly_data_list.each do |info|
|
52
|
+
RedhatAccess::InsightsMailer.weekly_email(info[:user], info[:data], "Insights Weekly Summary",org).deliver_now
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
|
57
|
+
def rescue_strategy_for_self
|
58
|
+
Dynflow::Action::Rescue::Skip
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module RedhatAccess
|
2
|
+
class InsightsMailer < ApplicationMailer
|
3
|
+
|
4
|
+
def create(user, body, subject, content_type="text/html")
|
5
|
+
mail(to: user.mail,
|
6
|
+
body: body,
|
7
|
+
content_type: content_type,
|
8
|
+
subject: subject)
|
9
|
+
end
|
10
|
+
|
11
|
+
def weekly_email(user, data, subject, org)
|
12
|
+
@user = user
|
13
|
+
@data = data
|
14
|
+
@org = org
|
15
|
+
@server_url = "#{Setting[:foreman_url]}/redhat_access/insights"
|
16
|
+
@email_settings_url = "#{Setting[:foreman_url]}/users/#{user.id}/edit#mail_preferences"
|
17
|
+
mail(to: user.mail,
|
18
|
+
subject: subject)
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,10 +1,3 @@
|
|
1
|
-
begin
|
2
|
-
# TODO: fix dirty hack
|
3
|
-
require '/usr/share/foreman/lib/satellite/version.rb'
|
4
|
-
rescue LoadError
|
5
|
-
# don't need to do anything
|
6
|
-
Rails.logger.debug("Unable to load version file.")
|
7
|
-
end
|
8
1
|
module RedhatAccess
|
9
2
|
module Telemetry
|
10
3
|
module LookUps
|
@@ -201,6 +194,26 @@ module RedhatAccess
|
|
201
194
|
proxy
|
202
195
|
end
|
203
196
|
|
197
|
+
def get_http_user_agent
|
198
|
+
"#{get_plugin_parent_name}/#{get_plugin_parent_version};#{get_rha_plugin_name}/#{get_rha_plugin_version}"
|
199
|
+
end
|
200
|
+
|
201
|
+
|
202
|
+
def get_http_options(include_user_id = false)
|
203
|
+
headers = {}
|
204
|
+
if include_user_id && User.current
|
205
|
+
headers = {:INSIGHTS_USER_ID => user_login_to_hash(User.current.login)}
|
206
|
+
end
|
207
|
+
{:logger => Rails.logger,
|
208
|
+
:http_proxy => get_portal_http_proxy,
|
209
|
+
:user_agent => get_http_user_agent,
|
210
|
+
:headers => headers}
|
211
|
+
end
|
212
|
+
|
213
|
+
def user_login_to_hash(login)
|
214
|
+
Digest::SHA1.hexdigest(login)
|
215
|
+
end
|
216
|
+
|
204
217
|
# TODO: move version and name methods to generic utility
|
205
218
|
def get_rha_plugin_name
|
206
219
|
'redhat_access'
|
@@ -0,0 +1,131 @@
|
|
1
|
+
require 'redhat_access_lib'
|
2
|
+
require 'ostruct'
|
3
|
+
|
4
|
+
module RedhatAccess
|
5
|
+
module Telemetry
|
6
|
+
class MessagingService
|
7
|
+
|
8
|
+
include RedhatAccess::Telemetry::LookUps
|
9
|
+
|
10
|
+
WEEKLY_SUMMARY_PATH = 'v1/messaging/data/weeklyinfo'
|
11
|
+
|
12
|
+
def initialize(org)
|
13
|
+
@org = org
|
14
|
+
@user_map = current_user_map
|
15
|
+
@branch_id = get_branch_id_for_org(org)
|
16
|
+
end
|
17
|
+
|
18
|
+
|
19
|
+
def all_weekly_mail_data
|
20
|
+
data = []
|
21
|
+
current_user_map.each do |key,user|
|
22
|
+
begin
|
23
|
+
user_data = weekly_summary_data(user.login)
|
24
|
+
data.push(user_data) unless user_data.nil? || user_data.total_systems = 0
|
25
|
+
rescue => e
|
26
|
+
Rails.logger.warn("Unable to get weekly email data for user")
|
27
|
+
end
|
28
|
+
end
|
29
|
+
data
|
30
|
+
end
|
31
|
+
|
32
|
+
def weekly_summary_data(username)
|
33
|
+
User.as username do
|
34
|
+
options = {:method => :GET,
|
35
|
+
:resource => WEEKLY_SUMMARY_PATH,
|
36
|
+
:params => {},
|
37
|
+
:payload => nil,
|
38
|
+
:use_subsets => true
|
39
|
+
}
|
40
|
+
json_data = http_request(options, true)
|
41
|
+
# Sample expected output: {
|
42
|
+
# "total_systems": 43,
|
43
|
+
# "checking_in_pct": 2,
|
44
|
+
# "total_actions": 22,
|
45
|
+
# "high_severity_hits": 11,
|
46
|
+
# "new_rules": [
|
47
|
+
# {
|
48
|
+
# "rule_id": "vfs_cache_pressure|VFS_CACHE_PRESSURE_TOO_HIGH",
|
49
|
+
# "summary": Rule summary,
|
50
|
+
# "description": "VFS cache pressue"
|
51
|
+
# }
|
52
|
+
# ]
|
53
|
+
# }
|
54
|
+
data = JSON.parse(json_data, object_class: OpenStruct)
|
55
|
+
info = {
|
56
|
+
user: User.current,
|
57
|
+
data: data
|
58
|
+
}
|
59
|
+
info
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
def get_machines
|
64
|
+
machines = get_content_hosts(@org)
|
65
|
+
if machines.empty?
|
66
|
+
machines = ['NULL_SET']
|
67
|
+
end
|
68
|
+
machines
|
69
|
+
end
|
70
|
+
|
71
|
+
def get_current_organization
|
72
|
+
@org
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_auth_opts(creds)
|
76
|
+
get_ssl_options_for_org(@org, nil)
|
77
|
+
end
|
78
|
+
|
79
|
+
def get_creds
|
80
|
+
#legacy
|
81
|
+
nil
|
82
|
+
end
|
83
|
+
|
84
|
+
|
85
|
+
|
86
|
+
private
|
87
|
+
|
88
|
+
def current_user_map
|
89
|
+
map = {}
|
90
|
+
users = ::User.select do |user|
|
91
|
+
user.receives?(:insights_notifications) && user.mail_enabled? && user.allowed_organizations.include?(@org)
|
92
|
+
end
|
93
|
+
users.each do |user|
|
94
|
+
map[user_login_to_hash(user.login)] = user
|
95
|
+
end
|
96
|
+
map
|
97
|
+
end
|
98
|
+
|
99
|
+
def user_hash_to_login(user_hash)
|
100
|
+
@user_map[user_hash]
|
101
|
+
end
|
102
|
+
|
103
|
+
def http_request(options, add_user_header=false)
|
104
|
+
unless options[:params]
|
105
|
+
options[:params] = {}
|
106
|
+
end
|
107
|
+
res = new_api_client(add_user_header).call_tapi(options[:method],
|
108
|
+
URI.escape(options[:resource]),
|
109
|
+
#{:branch_id => @branch_id}.merge(options[:params]),
|
110
|
+
options[:params],
|
111
|
+
options[:payload],
|
112
|
+
nil,
|
113
|
+
options[:use_subsets])
|
114
|
+
resp_data = res[:data]
|
115
|
+
if res[:code] != 200
|
116
|
+
raise "Unable to read data code #{res[:code]}"
|
117
|
+
end
|
118
|
+
resp_data
|
119
|
+
end
|
120
|
+
|
121
|
+
def new_api_client(add_user_header)
|
122
|
+
options = get_http_options(add_user_header)
|
123
|
+
RedhatAccess::Telemetry::PortalClient.new(nil,
|
124
|
+
nil,
|
125
|
+
get_creds,
|
126
|
+
self,
|
127
|
+
options)
|
128
|
+
end
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -1,39 +1,31 @@
|
|
1
1
|
require 'redhat_access_lib'
|
2
|
+
require 'forwardable'
|
2
3
|
|
3
4
|
module RedhatAccess
|
4
5
|
module Telemetry
|
5
6
|
class PortalClient < RedHatSupportLib::TelemetryApi::Client
|
6
|
-
|
7
|
+
extend Forwardable
|
7
8
|
include RedhatAccess::Telemetry::LookUps
|
9
|
+
UPLOAD_HOST = REDHAT_ACCESS_CONFIG[:telemetry_upload_host]
|
10
|
+
API_HOST = REDHAT_ACCESS_CONFIG[:telemetry_api_host]
|
11
|
+
UPLOAD_URL = "#{UPLOAD_HOST}/r/insights/uploads"
|
12
|
+
STRATA_URL = "#{API_HOST}/r/insights"
|
8
13
|
|
9
|
-
|
10
|
-
super(upload_url,api_url, creds, optional)
|
11
|
-
@context = context
|
12
|
-
end
|
14
|
+
delegate [:get_machines,:get_auth_opts,:get_current_organization] => :@context
|
13
15
|
|
14
|
-
def
|
15
|
-
|
16
|
+
def initialize(upload_url, strata_url, creds, context, optional)
|
17
|
+
upload_url = UPLOAD_URL if upload_url.nil?
|
18
|
+
strata_url = STRATA_URL if strata_url.nil?
|
19
|
+
super(upload_url, strata_url, creds, optional)
|
20
|
+
@context = context
|
16
21
|
end
|
17
22
|
|
18
23
|
# Returns the branch id of the current org/account
|
19
24
|
def get_branch_id
|
20
|
-
|
25
|
+
organization = get_current_organization
|
26
|
+
return get_branch_id_for_org(organization)
|
21
27
|
end
|
22
28
|
|
23
|
-
def get_auth_opts(creds)
|
24
|
-
# #temp implementation##########################
|
25
|
-
# if creds.is_a?(User) and User.current.is_a? RedhatAccess::Authentication::CertUser
|
26
|
-
# opts = get_ssl_options_for_uuid(User.current.login)
|
27
|
-
# elsif creds.is_a?(TelemetryProxyCredentials)
|
28
|
-
# opts = {
|
29
|
-
# :user => creds.username,
|
30
|
-
# :password => creds.password
|
31
|
-
# }
|
32
|
-
# end
|
33
|
-
#end temp implementation######################
|
34
|
-
#TODO enable below for cert based auth
|
35
|
-
return @context.get_auth_opts()
|
36
|
-
end
|
37
29
|
end
|
38
30
|
end
|
39
31
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
|
2
|
+
<% new_rules.each do |rule| %>
|
3
|
+
<tr>
|
4
|
+
<th style='text-align:left'>
|
5
|
+
<a href="<%=@server_url%>/rules/<%= rule[:rule_id] %>"><%= rule[:description]%></a>
|
6
|
+
</th>
|
7
|
+
</tr>
|
8
|
+
<tr>
|
9
|
+
<td style='text-align:left'><span style="font-size: 12px"><%= rule[:summary]%></span></td>
|
10
|
+
</tr>
|
11
|
+
<% end %>
|
@@ -0,0 +1,254 @@
|
|
1
|
+
<body style="background-color: #687079; margin: 0; padding: 0;">
|
2
|
+
<table id="outermost-table" cellpadding="0" cellspacing="0" style="border: 0; margin: 0; padding: 0; width: 100%;">
|
3
|
+
<tbody>
|
4
|
+
<tr>
|
5
|
+
<td align="center" valign="top">
|
6
|
+
<table width="640" cellspacing="0" cellpadding="0">
|
7
|
+
<tbody>
|
8
|
+
<tr>
|
9
|
+
<td height="20"></td>
|
10
|
+
</tr>
|
11
|
+
<tr>
|
12
|
+
<td width="640" valign="top">
|
13
|
+
<div id="header">
|
14
|
+
<!-- HEADER -->
|
15
|
+
<table width="640" border="0" cellspacing="0" cellpadding="20" background="https://access.redhat.com/insightsbeta/images/email_bg.jpg">
|
16
|
+
<tbody>
|
17
|
+
<tr>
|
18
|
+
<td valign="top">
|
19
|
+
<table border="0" cellspacing="0" cellpadding="0" width="600">
|
20
|
+
<tbody>
|
21
|
+
<tr>
|
22
|
+
<td align="left" width="50%">
|
23
|
+
<img id="rh-logo" src="https://access.redhat.com/insightsbeta/images/email_logo.png" alt="Logo" style="border: 0; display: block;">
|
24
|
+
</td>
|
25
|
+
</tr>
|
26
|
+
</tbody>
|
27
|
+
</table>
|
28
|
+
<table border="0" cellspacing="0" cellpadding="0" width="600">
|
29
|
+
<tbody>
|
30
|
+
<tr>
|
31
|
+
<td height="25"></td>
|
32
|
+
</tr>
|
33
|
+
<tr>
|
34
|
+
<td align="center">
|
35
|
+
<table>
|
36
|
+
<tbody>
|
37
|
+
<tr>
|
38
|
+
<td>
|
39
|
+
<img id="insights-text" src="https://access.redhat.com/insightsbeta/images/email_rhi.png" style="min-height: auto; width: 360px;">
|
40
|
+
<div id="hbi-subject" style="margin-top: 8px; text-align: right;">
|
41
|
+
<span id="hbi-subject-text" style="color: #fff; font-family: 'Arimo',Arial,sans-serif; font-size: 14px;">
|
42
|
+
<!-- EMAIL SUBJECT -->
|
43
|
+
Weekly Report for <%= Time.now.strftime("%B %e, %Y") %>
|
44
|
+
</span>
|
45
|
+
</div>
|
46
|
+
</td>
|
47
|
+
</tr>
|
48
|
+
</tbody>
|
49
|
+
</table>
|
50
|
+
</td>
|
51
|
+
</tr>
|
52
|
+
<tr>
|
53
|
+
<td height="35"></td>
|
54
|
+
</tr>
|
55
|
+
</tbody>
|
56
|
+
</table>
|
57
|
+
</td>
|
58
|
+
</tr>
|
59
|
+
</tbody>
|
60
|
+
</table>
|
61
|
+
</div>
|
62
|
+
</td>
|
63
|
+
</tr>
|
64
|
+
<tr>
|
65
|
+
<td>
|
66
|
+
<div id="hbi-content" style="background-color: #ffffff;">
|
67
|
+
<!-- CONTENT -->
|
68
|
+
<table width="640" border="0" cellspacing="20" cellpadding="10">
|
69
|
+
<tbody>
|
70
|
+
<tr>
|
71
|
+
<td align="center" style="padding:60px 0 0;font-size:36px;color:#585858;font-weight:700">
|
72
|
+
<font face="'Arimo', Arial, sans-serif">
|
73
|
+
Your <span class="il">weekly</span> Insights report
|
74
|
+
</font>
|
75
|
+
</td>
|
76
|
+
</tr>
|
77
|
+
<tr>
|
78
|
+
<td style="font-size:16px;color:#585858;padding-bottom:40px">
|
79
|
+
<p>
|
80
|
+
<font face="'Arimo', Arial, sans-serif">
|
81
|
+
<p>
|
82
|
+
Hi <%= @user.name %>,
|
83
|
+
</p>
|
84
|
+
|
85
|
+
<p>
|
86
|
+
You currently have
|
87
|
+
<a href="<%=@server_url%>/inventory?product=all&utm_source=all_systems_first_paragraph&utm_medium=email&utm_campaign=WeeklyEmail">
|
88
|
+
<strong><%= @data.total_systems %> systems</strong>
|
89
|
+
</a>
|
90
|
+
registered with Insights in the <%=@org.name%> organization and
|
91
|
+
|
92
|
+
<a href="<%=@server_url%>/actions?product=all&initialSeverity=ERROR&utm_source=high_sev_hits_first_paragraph&utm_medium=email&utm_campaign=WeeklyEmail">
|
93
|
+
<strong>
|
94
|
+
<%= @data.high_severity_hits %>
|
95
|
+
</strong>
|
96
|
+
</a>
|
97
|
+
high severity hits.
|
98
|
+
</p>
|
99
|
+
<% rules = @data.new_rules %>
|
100
|
+
<% if rules.length > 0 %>
|
101
|
+
<p>
|
102
|
+
<% has = rules.length > 1 ? 'have' : 'has' %>
|
103
|
+
<%= "There #{has} been #{rules.length} new rule{s} discovered since your last weekly report:" %>
|
104
|
+
</p>
|
105
|
+
<%= render partial: "new_rules_section", locals: { new_rules: rules , server_url: @server_url} %>
|
106
|
+
<% end %>
|
107
|
+
<p>
|
108
|
+
We want you to get the most out of Insights and would love to hear your
|
109
|
+
questions and comments. Feel free to email us at
|
110
|
+
<a href="mailto:insights+weekly@redhat.com">insights+weekly@redhat.com</a>,
|
111
|
+
and we'll get
|
112
|
+
back to you as soon as we can.
|
113
|
+
</p>
|
114
|
+
</font>
|
115
|
+
</p>
|
116
|
+
</td>
|
117
|
+
</tr>
|
118
|
+
</tbody>
|
119
|
+
</table>
|
120
|
+
|
121
|
+
<table width="640" border="0" cellspacing="0" cellpadding="0" bgcolor="#ffffff" style="padding-bottom:40px">
|
122
|
+
<tbody>
|
123
|
+
<tr>
|
124
|
+
<td valign="top" align="left">
|
125
|
+
<table align="center" width="200">
|
126
|
+
<tbody>
|
127
|
+
<tr>
|
128
|
+
<td align="center">
|
129
|
+
<a href="<%=@server_url%>/actions?product=all&utm_source=total_actions&utm_medium=email&utm_campaign=WeeklyEmail" style="color:#ffffff;text-decoration:none" target="_blank">
|
130
|
+
<table style="background-color:#535e6a;width:136px;height:136px;color:#fff;font-family:'Arimo',sans-serif;font-weight:700;font-size:52px;border-width:12px;border-color:#cad6e2;border-style:solid;text-align:center;border-radius:50%" align="center">
|
131
|
+
<tbody style="width:136px">
|
132
|
+
<tr>
|
133
|
+
<td style="vertical-align:middle">
|
134
|
+
<span><%= @data.total_actions %></span>
|
135
|
+
</td>
|
136
|
+
</tr>
|
137
|
+
</tbody>
|
138
|
+
</table>
|
139
|
+
</a>
|
140
|
+
</td>
|
141
|
+
</tr>
|
142
|
+
<tr>
|
143
|
+
<td align="center" style="font-family:'Arimo',Arial,sans-serif;padding-top:16px">
|
144
|
+
<a href="<%=@server_url%>/actions?product=all&utm_source=total_actions&utm_medium=email&utm_campaign=WeeklyEmail" style="color:#535e6a;text-decoration:none" target="_blank">Total Actions</a>
|
145
|
+
</td>
|
146
|
+
</tr>
|
147
|
+
</tbody>
|
148
|
+
</table>
|
149
|
+
</td>
|
150
|
+
<td width="20"></td>
|
151
|
+
<td valign="top" align="left">
|
152
|
+
<table align="center" width="200">
|
153
|
+
<tbody>
|
154
|
+
<tr>
|
155
|
+
<td align="center">
|
156
|
+
<a href="<%=@server_url%>/actions?product=all&initialSeverity=ERROR&utm_source=high_sev_hits&utm_medium=email&utm_campaign=WeeklyEmail" style="color:#ffffff;text-decoration:none" target="_blank">
|
157
|
+
<table style="background-color:#535e6a;width:136px;height:136px;color:#fff;font-family:'Arimo',sans-serif;font-weight:700;font-size:52px;border-width:12px;border-color:#cad6e2;border-style:solid;text-align:center;border-radius:50%" align="center">
|
158
|
+
<tbody style="width:136px">
|
159
|
+
<tr>
|
160
|
+
<td style="vertical-align:middle">
|
161
|
+
<span><%= @data.high_severity_hits %></span>
|
162
|
+
</td>
|
163
|
+
</tr>
|
164
|
+
</tbody>
|
165
|
+
</table>
|
166
|
+
</a>
|
167
|
+
</td>
|
168
|
+
</tr>
|
169
|
+
<tr>
|
170
|
+
<td align="center" style="font-family:'Arimo',Arial,sans-serif;padding-top:16px">
|
171
|
+
<a href="<%=@server_url%>/actions?product=all&initialSeverity=ERROR&utm_source=high_sev_hits&utm_medium=email&utm_campaign=WeeklyEmail" style="color:#535e6a;text-decoration:none" target="_blank">High Severity Hits</a>
|
172
|
+
</td>
|
173
|
+
</tr>
|
174
|
+
</tbody>
|
175
|
+
</table>
|
176
|
+
</td>
|
177
|
+
<td width="20"></td>
|
178
|
+
<td valign="top" align="left">
|
179
|
+
<table align="center" width="200">
|
180
|
+
<tbody>
|
181
|
+
<tr>
|
182
|
+
<td align="center">
|
183
|
+
<a href="<%=@server_url%>/inventory?product=all&utm_source=percent_checkin&utm_medium=email&utm_campaign=WeeklyEmail" style="color:#ffffff;text-decoration:none" target="_blank">
|
184
|
+
<table style="background-color:#535e6a;width:136px;height:136px;color:#fff;font-family:'Arimo',sans-serif;font-weight:700;font-size:52px;border-width:12px;border-color:#cad6e2;border-style:solid;text-align:center;border-radius:50%" align="center">
|
185
|
+
<tbody style="width:136px">
|
186
|
+
<tr>
|
187
|
+
<td style="vertical-align:middle">
|
188
|
+
<span><%= @data.checking_in_pct %></span><span style="font-size:16px;vertical-align:top">%</span>
|
189
|
+
</td>
|
190
|
+
</tr>
|
191
|
+
</tbody>
|
192
|
+
</table>
|
193
|
+
</a>
|
194
|
+
</td>
|
195
|
+
</tr>
|
196
|
+
<tr>
|
197
|
+
<td align="center" style="color:#535e6a;font-family:'Arimo',Arial,sans-serif;padding-top:16px">
|
198
|
+
<a href="<%=@server_url%>/inventory?product=all&utm_source=percent_checkin&utm_medium=email&utm_campaign=WeeklyEmail" style="color:#535e6a;text-decoration:none" target="_blank">Systems Checking In</a>
|
199
|
+
</td>
|
200
|
+
</tr>
|
201
|
+
</tbody>
|
202
|
+
</table>
|
203
|
+
</td>
|
204
|
+
</tr>
|
205
|
+
</tbody>
|
206
|
+
</table>
|
207
|
+
|
208
|
+
</div>
|
209
|
+
</td>
|
210
|
+
</tr>
|
211
|
+
<tr>
|
212
|
+
<td>
|
213
|
+
<div id="goto">
|
214
|
+
<!-- GO TO INSIGHTS BUTTON -->
|
215
|
+
<table class="footer-table go2insights" style="background-color: #ffffff; border: 0; min-width: 640px !important; padding: 20px 0 60px; width: 640px;">
|
216
|
+
<tbody>
|
217
|
+
<tr>
|
218
|
+
<td align="center">
|
219
|
+
<a id="go2insights-button" href="<%=@server_url%>/overview?utm_source=insights_overview&utm_medium=email&utm_campaign=WeeklyEmail" target="_blank" style="background: #03afe8; border-radius: 4px; color: #fff; font-family: 'Arimo',Arial,sans-serif; font-size: 12px; padding: 10px 20px; text-decoration: none;">
|
220
|
+
Go To Insights
|
221
|
+
</a>
|
222
|
+
</td>
|
223
|
+
</tr>
|
224
|
+
</tbody>
|
225
|
+
</table>
|
226
|
+
</div>
|
227
|
+
</td>
|
228
|
+
</tr>
|
229
|
+
<tr>
|
230
|
+
<td>
|
231
|
+
<div id="footer">
|
232
|
+
<!-- FOOTER -->
|
233
|
+
<table class="footer-table footer" style="background-color: #fafafa; border: 0; min-width: 640px !important; padding: 40px 0 80px; width: 640px;">
|
234
|
+
<tbody>
|
235
|
+
<tr>
|
236
|
+
<td align="center">
|
237
|
+
<font face="'Arimo', Arial, sans-serif" style="font-size:12px;color:#333333">
|
238
|
+
Copyright © 2016 Red Hat, All rights reserved.<br>
|
239
|
+
<a href="<%=@email_settings_url%>" style="color:#333333" target="_blank">Update email preferences</a>
|
240
|
+
</font>
|
241
|
+
</td>
|
242
|
+
</tr>
|
243
|
+
</tbody>
|
244
|
+
</table>
|
245
|
+
</div>
|
246
|
+
</td>
|
247
|
+
</tr>
|
248
|
+
</tbody>
|
249
|
+
</table>
|
250
|
+
</td>
|
251
|
+
</tr>
|
252
|
+
</tbody>
|
253
|
+
</table>
|
254
|
+
</body>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# This file should contain all the record creation needed to seed the database with its default values.
|
2
|
+
# The data can then be loaded with the rake db:seed (or created alongside the db with db:setup).
|
3
|
+
#
|
4
|
+
# !!! PLEASE KEEP THIS SCRIPT IDEMPOTENT !!!
|
5
|
+
#
|
6
|
+
::User.current = ::User.anonymous_admin
|
7
|
+
|
8
|
+
# Mail Notifications
|
9
|
+
notifications = [
|
10
|
+
{:name => :insights_notifications,
|
11
|
+
:description => N_('Insights reports and messages for registered hosts'),
|
12
|
+
:mailer => 'RedhatAccess::InsightsMailer',
|
13
|
+
:method => 'create',
|
14
|
+
:subscription_type => 'alert'
|
15
|
+
}
|
16
|
+
]
|
17
|
+
|
18
|
+
notifications.each do |notification|
|
19
|
+
::MailNotification.where(name: notification[:name]).first_or_create!(notification)
|
20
|
+
end
|
21
|
+
|
22
|
+
::User.current = nil
|
data/lib/redhat_access/engine.rb
CHANGED
@@ -14,7 +14,7 @@ module RedhatAccess
|
|
14
14
|
class Engine < ::Rails::Engine
|
15
15
|
isolate_namespace RedhatAccess
|
16
16
|
|
17
|
-
initializer
|
17
|
+
initializer "redhat_access.load_app_instance_data" do |app|
|
18
18
|
unless app.root.to_s.match root.to_s
|
19
19
|
config.paths["db/migrate"].expanded.each do |expanded_path|
|
20
20
|
app.config.paths["db/migrate"] << expanded_path
|
@@ -22,11 +22,28 @@ module RedhatAccess
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
initializer
|
25
|
+
initializer "redhat_access.mount_engine", :after => :build_middleware_stack do |app|
|
26
26
|
app.routes_reloader.paths << "#{RedhatAccess::Engine.root}/config/mount_engine.rb"
|
27
27
|
app.reload_routes!
|
28
28
|
end
|
29
29
|
|
30
|
+
initializer "redhat_access.register_actions", :before => :finisher_hook do |_app|
|
31
|
+
ForemanTasks.dynflow.require!
|
32
|
+
action_paths = %W(#{RedhatAccess::Engine.root}/app/lib/actions)
|
33
|
+
ForemanTasks.dynflow.config.eager_load_paths.concat(action_paths)
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
initializer "redhat_access.initialize_insights_poller", :before => :finisher_hook do
|
38
|
+
unless ForemanTasks.dynflow.config.remote? || File.basename($PROGRAM_NAME) == 'rake' || Rails.env.test?
|
39
|
+
Rails.logger.info("Triggering..")
|
40
|
+
ForemanTasks.dynflow.config.on_init do |world|
|
41
|
+
Rails.logger.info("Init triggered.......")
|
42
|
+
::Actions::Insights::EmailPoller.ensure_running(world)
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
30
47
|
# Precompile any JS or CSS files under app/assets/
|
31
48
|
# If requiring files from each other, list them explicitly here to avoid precompiling the same
|
32
49
|
# content twice.
|
@@ -53,24 +70,6 @@ module RedhatAccess
|
|
53
70
|
Foreman::Gettext::Support.add_text_domain locale_domain, locale_dir
|
54
71
|
end
|
55
72
|
|
56
|
-
initializer :config_csp_headers do |_app|
|
57
|
-
::SecureHeaders::Configuration.configure do |config|
|
58
|
-
if config && config.csp
|
59
|
-
if config.csp[:frame_src]
|
60
|
-
config.csp[:frame_src] = config.csp[:frame_src] << ' *.redhat.com *.force.com'
|
61
|
-
end
|
62
|
-
if config.csp[:connect_src]
|
63
|
-
config.csp[:connect_src] = config.csp[:connect_src] << ' *.redhat.com'
|
64
|
-
end
|
65
|
-
if config.csp[:script_src]
|
66
|
-
config.csp[:script_src] = config.csp[:script_src] << ' *.redhat.com'
|
67
|
-
end
|
68
|
-
if config.csp[:img_src]
|
69
|
-
config.csp[:img_src] = config.csp[:img_src] << ' *.redhat.com'
|
70
|
-
end
|
71
|
-
end
|
72
|
-
end
|
73
|
-
end
|
74
73
|
|
75
74
|
config.after_initialize do
|
76
75
|
Foreman::Plugin.register :redhat_access do
|
@@ -113,7 +112,7 @@ module RedhatAccess
|
|
113
112
|
# permission section
|
114
113
|
security_block :redhat_access_security do
|
115
114
|
# Everything except logs should be available to all users
|
116
|
-
permission :
|
115
|
+
permission :view_rh_search, {:"redhat_access/search" => [:index]}, :public => true
|
117
116
|
permission :view_cases, {:"redhat_access/cases" => [:index, :create]}, :public => true
|
118
117
|
permission :attachments, {:"redhat_access/attachments" => [:index, :create]}, :public => true
|
119
118
|
permission :configuration, {:"redhat_access/configuration" => [:index]}, :public => true
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: redhat_access
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Lindani Phiri
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-01-
|
11
|
+
date: 2017-01-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: redhat_access_lib
|
@@ -89,17 +89,23 @@ files:
|
|
89
89
|
- app/helpers/redhat_access/redhat_access_helper.rb
|
90
90
|
- app/helpers/redhat_access/search_helper.rb
|
91
91
|
- app/helpers/redhat_access/telemetry_configuration_helper.rb
|
92
|
+
- app/lib/actions/insights/email_poller.rb
|
93
|
+
- app/mailers/redhat_access/insights_mailer.rb
|
92
94
|
- app/models/redhat_access/concerns/organization_extensions.rb
|
93
95
|
- app/models/redhat_access/telemetry_configuration.rb
|
94
96
|
- app/models/redhat_access/telemetry_proxy_credentials.rb
|
95
97
|
- app/services/redhat_access/authentication/client_authentication.rb
|
96
98
|
- app/services/redhat_access/telemetry/look_ups.rb
|
99
|
+
- app/services/redhat_access/telemetry/messaging_service.rb
|
97
100
|
- app/services/redhat_access/telemetry/portal_client.rb
|
98
101
|
- app/views/redhat_access/analytics_dashboard/configuration.html.erb
|
99
102
|
- app/views/redhat_access/analytics_dashboard/error.html.erb
|
100
103
|
- app/views/redhat_access/analytics_dashboard/help.html.erb
|
101
104
|
- app/views/redhat_access/analytics_dashboard/index.html.erb
|
102
105
|
- app/views/redhat_access/analytics_dashboard/welcome.html.erb
|
106
|
+
- app/views/redhat_access/insights_mailer/_new_rule_list.erb
|
107
|
+
- app/views/redhat_access/insights_mailer/_new_rules_section.erb
|
108
|
+
- app/views/redhat_access/insights_mailer/weekly_email.erb
|
103
109
|
- app/views/redhat_access/redhat_access/index.html.erb
|
104
110
|
- ca/rh_cert-api_chain.pem
|
105
111
|
- config/config.yml.example
|
@@ -111,6 +117,7 @@ files:
|
|
111
117
|
- db/migrate/20150319153744_create_redhat_access_telemetry_configurations.rb
|
112
118
|
- db/migrate/20160425175501_add_email_to_telemetry_configurations.rb
|
113
119
|
- db/seeds.d/200-update-insights-roles.rb
|
120
|
+
- db/seeds.d/201-add-insights-email-notifications.rb
|
114
121
|
- lib/redhat_access.rb
|
115
122
|
- lib/redhat_access/configuration.rb
|
116
123
|
- lib/redhat_access/engine.rb
|