zuora_connect 1.7.795b → 1.8.71s
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 +5 -5
- data/app/controllers/zuora_connect/api/v1/app_instance_controller.rb +13 -0
- data/app/controllers/zuora_connect/static_controller.rb +2 -2
- data/app/models/zuora_connect/app_instance_base.rb +39 -39
- data/app/models/zuora_connect/telegraf.rb +11 -7
- data/config/initializers/resque.rb +10 -1
- data/config/initializers/unicorn.rb +2 -1
- data/config/routes.rb +1 -0
- data/lib/metrics/net.rb +1 -1
- data/lib/resque/plugins/custom_logger.rb +0 -1
- data/lib/zuora_connect.rb +67 -0
- data/lib/zuora_connect/configuration.rb +1 -2
- data/lib/zuora_connect/controllers/helpers.rb +16 -16
- data/lib/zuora_connect/engine.rb +0 -1
- data/lib/zuora_connect/version.rb +2 -2
- metadata +11 -27
- data/config/initializers/elastic_apm.rb +0 -25
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: f47f7dd4479d1fdc48a9b4ad63b1426a11c0da6b438b4a5e9f0d97ea64cba8d5
|
4
|
+
data.tar.gz: 1b5c6f2cd77b5b5122127f2201ac7265a98889f03ccdc796dc5dd0d1e2bb78c4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: bb3214541ca5cc6b51f23a46cbdc23f72d118905e6224f23f7ab4ff48d4792f1bd693698baeda046e956eb13b67d4f867d89be817f723d21d4e089321ee0774d
|
7
|
+
data.tar.gz: ecac2c02fff9530cffee1093d1c4a611e855d593d5634b82cd46abcab311946813719dc4e22fd3c63f32e981505fb228afb1d7929d205cfdd37c5ebc75ff995b
|
@@ -41,5 +41,18 @@ module ZuoraConnect
|
|
41
41
|
|
42
42
|
end
|
43
43
|
|
44
|
+
def cache_bust
|
45
|
+
if defined?(Redis.current)
|
46
|
+
Redis.current.del("AppInstance:#{@appinstance.id}")
|
47
|
+
respond_to do |format|
|
48
|
+
format.json {render json: {}, status: :ok}
|
49
|
+
end
|
50
|
+
else
|
51
|
+
respond_to do |format|
|
52
|
+
format.json {render json: {}, status: :bad_request}
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
44
57
|
end
|
45
58
|
end
|
@@ -27,7 +27,7 @@ module ZuoraConnect
|
|
27
27
|
self.attr_builder("timezone", ZuoraConnect.configuration.default_time_zone)
|
28
28
|
self.attr_builder("locale", ZuoraConnect.configuration.default_locale)
|
29
29
|
PaperTrail.whodunnit = "Backend" if defined?(PaperTrail)
|
30
|
-
if defined?(ElasticAPM)
|
30
|
+
if defined?(ElasticAPM) && ElasticAPM.running?
|
31
31
|
ElasticAPM.set_user("Backend")
|
32
32
|
ElasticAPM.set_tag(:app_instance, self.id)
|
33
33
|
end
|
@@ -93,7 +93,7 @@ module ZuoraConnect
|
|
93
93
|
self.last_refresh = session["#{self.id}::last_refresh"]
|
94
94
|
self.connect_user = session["#{self.id}::user::email"] if session["#{self.id}::user::email"].present?
|
95
95
|
PaperTrail.whodunnit = self.connect_user if defined?(PaperTrail)
|
96
|
-
ElasticAPM.set_user(self.connect_user) if defined?(ElasticAPM)
|
96
|
+
ElasticAPM.set_user(self.connect_user) if defined?(ElasticAPM) && ElasticAPM.running?
|
97
97
|
recoverable_session = false
|
98
98
|
|
99
99
|
## DEV MODE TASK DATA MOCKUP
|
@@ -120,26 +120,26 @@ module ZuoraConnect
|
|
120
120
|
|
121
121
|
if session.empty?
|
122
122
|
self.new_session_message = "REFRESHING - Session Empty"
|
123
|
-
|
123
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
124
124
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
125
125
|
self.refresh(session: session)
|
126
126
|
|
127
127
|
elsif (self.id != session["appInstance"].to_i)
|
128
128
|
self.new_session_message = "REFRESHING - AppInstance ID(#{self.id}) does not match session id(#{session["appInstance"].to_i})"
|
129
|
-
|
129
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
130
130
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
131
131
|
self.refresh(session: session)
|
132
132
|
|
133
133
|
elsif session["#{self.id}::task_data"].blank?
|
134
134
|
self.new_session_message = "REFRESHING - Task Data Blank"
|
135
|
-
|
135
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
136
136
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
137
137
|
self.refresh(session: session)
|
138
138
|
|
139
139
|
elsif session["#{self.id}::last_refresh"].blank?
|
140
140
|
self.new_session_message = "REFRESHING - No Time on Cookie"
|
141
141
|
recoverable_session = true
|
142
|
-
|
142
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
143
143
|
raise ZuoraConnect::Exceptions::HoldingPattern if holding_pattern && !self.mark_for_refresh
|
144
144
|
self.refresh(session: session)
|
145
145
|
|
@@ -147,7 +147,7 @@ module ZuoraConnect
|
|
147
147
|
elsif (session["#{self.id}::last_refresh"].to_i < INSTANCE_REFRESH_WINDOW.ago.to_i) && self.mark_for_refresh
|
148
148
|
self.new_session_message = "REFRESHING - Session Old by #{time_expire.abs} second"
|
149
149
|
recoverable_session = true
|
150
|
-
|
150
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
151
151
|
self.refresh(session: session)
|
152
152
|
|
153
153
|
else
|
@@ -156,14 +156,14 @@ module ZuoraConnect
|
|
156
156
|
else
|
157
157
|
self.new_session_message = "REBUILDING - Expires in #{time_expire} seconds"
|
158
158
|
end
|
159
|
-
|
159
|
+
ZuoraConnect.logger.add(log_level, self.new_session_message)
|
160
160
|
self.build_task(task_data: session["#{self.id}::task_data"], session: session)
|
161
161
|
end
|
162
162
|
end
|
163
163
|
return self
|
164
164
|
rescue ZuoraConnect::Exceptions::HoldingPattern => ex
|
165
165
|
while self.marked_for_refresh?
|
166
|
-
|
166
|
+
ZuoraConnect.logger.info("Holding - Expires in #{self.reset_mark_expires_at}. '#{self.new_session_message}'")
|
167
167
|
sleep(HOLDING_PATTERN_SLEEP)
|
168
168
|
end
|
169
169
|
self.reload_attributes([:refresh_token, :oauth_expires_at, :access_token])
|
@@ -171,7 +171,7 @@ module ZuoraConnect
|
|
171
171
|
retry
|
172
172
|
rescue => ex
|
173
173
|
if recoverable_session
|
174
|
-
|
174
|
+
ZuoraConnect.logger.error("REBUILDING - Using backup expired cache")
|
175
175
|
self.build_task(task_data: session["#{self.id}::task_data"], session: session)
|
176
176
|
return self
|
177
177
|
else
|
@@ -181,12 +181,12 @@ module ZuoraConnect
|
|
181
181
|
begin
|
182
182
|
I18n.locale = self.locale
|
183
183
|
rescue I18n::InvalidLocale => ex
|
184
|
-
|
184
|
+
ZuoraConnect.logger.debug("Invalid Locale: #{ex.message}")
|
185
185
|
end
|
186
186
|
Time.zone = self.timezone
|
187
187
|
tenants = self.task_data.dig('tenant_ids') || []
|
188
188
|
organizations = self.task_data.dig('organizations') || []
|
189
|
-
if defined?(ElasticAPM)
|
189
|
+
if defined?(ElasticAPM) && ElasticAPM.running?
|
190
190
|
ElasticAPM.set_tag(:tenant_id, tenants.first)
|
191
191
|
ElasticAPM.set_tag(:organization, organizations.first)
|
192
192
|
end
|
@@ -200,33 +200,33 @@ module ZuoraConnect
|
|
200
200
|
response = HTTParty.get(ZuoraConnect.configuration.url + "/api/#{self.api_version}/tools/tasks/#{self.id}.json",:body => {:access_token => self.access_token})
|
201
201
|
response_time = Time.now - start
|
202
202
|
|
203
|
-
|
203
|
+
ZuoraConnect.logger.debug("[#{self.id}] REFRESH TASK - Connect Task Info Request Time #{response_time.round(2).to_s}")
|
204
204
|
if response.code == 200
|
205
205
|
self.build_task(task_data: JSON.parse(response.body), session: session)
|
206
206
|
self.last_refresh = Time.now.to_i
|
207
207
|
self.cache_app_instance
|
208
208
|
self.reset_mark_for_refresh
|
209
209
|
else
|
210
|
-
|
210
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH TASK - Failed Code #{response.code}")
|
211
211
|
raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Communicating with Connect", response.body, response.code)
|
212
212
|
end
|
213
213
|
rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS).concat(ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
|
214
214
|
if (refresh_count += 1) < 3
|
215
|
-
|
215
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH TASK - #{ex.class} Retrying(#{refresh_count})")
|
216
216
|
retry
|
217
217
|
else
|
218
|
-
|
218
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH TASK - #{ex.class} Failed #{refresh_count}x")
|
219
219
|
raise
|
220
220
|
end
|
221
221
|
rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
|
222
222
|
if (refresh_count += 1) < 3
|
223
|
-
|
223
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH TASK - Failed Retrying(#{refresh_count})")
|
224
224
|
if ex.code == 401
|
225
225
|
self.refresh_oauth
|
226
226
|
end
|
227
227
|
retry
|
228
228
|
else
|
229
|
-
|
229
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH TASK - Failed #{refresh_count}x")
|
230
230
|
raise
|
231
231
|
end
|
232
232
|
end
|
@@ -316,8 +316,8 @@ module ZuoraConnect
|
|
316
316
|
end
|
317
317
|
end
|
318
318
|
rescue => ex
|
319
|
-
|
320
|
-
|
319
|
+
ZuoraConnect.logger.error("Task Data: #{task_data}") if task_data.present?
|
320
|
+
ZuoraConnect.logger.error("Task Session: #{session.to_h}") if session.present?
|
321
321
|
raise
|
322
322
|
end
|
323
323
|
|
@@ -393,7 +393,7 @@ module ZuoraConnect
|
|
393
393
|
def check_oauth_state(method)
|
394
394
|
#Refresh token if already expired
|
395
395
|
if self.oauth_expired?
|
396
|
-
|
396
|
+
ZuoraConnect.logger.debug("[#{self.id}] Before '#{method}' method, Oauth expired")
|
397
397
|
self.refresh_oauth
|
398
398
|
end
|
399
399
|
end
|
@@ -412,7 +412,7 @@ module ZuoraConnect
|
|
412
412
|
}
|
413
413
|
response = HTTParty.post("#{ZuoraConnect.configuration.url}/oauth/token",:body => params)
|
414
414
|
response_time = Time.now - start
|
415
|
-
|
415
|
+
ZuoraConnect.logger.debug("[#{self.id}] REFRESH OAUTH - In #{response_time.round(2).to_s}")
|
416
416
|
|
417
417
|
if response.code == 200
|
418
418
|
response_body = JSON.parse(response.body)
|
@@ -422,15 +422,15 @@ module ZuoraConnect
|
|
422
422
|
self.oauth_expires_at = Time.at(response_body["created_at"].to_i) + response_body["expires_in"].seconds
|
423
423
|
self.save(:validate => false)
|
424
424
|
else
|
425
|
-
|
425
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH OAUTH - Failed Code #{response.code}")
|
426
426
|
raise ZuoraConnect::Exceptions::ConnectCommunicationError.new("Error Refreshing Access Token", response.body, response.code)
|
427
427
|
end
|
428
428
|
rescue *(ZuoraAPI::Login::CONNECTION_EXCEPTIONS).concat(ZuoraAPI::Login::CONNECTION_READ_EXCEPTIONS) => ex
|
429
429
|
if (refresh_oauth_count += 1) < 3
|
430
|
-
|
430
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH OAUTH - #{ex.class} Retrying(#{refresh_oauth_count})")
|
431
431
|
retry
|
432
432
|
else
|
433
|
-
|
433
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH OAUTH - #{ex.class} Failed #{refresh_oauth_count}x")
|
434
434
|
raise
|
435
435
|
end
|
436
436
|
rescue ZuoraConnect::Exceptions::ConnectCommunicationError => ex
|
@@ -441,10 +441,10 @@ module ZuoraConnect
|
|
441
441
|
return if !self.oauth_expired?
|
442
442
|
|
443
443
|
if (refresh_oauth_count += 1) < 3
|
444
|
-
|
444
|
+
ZuoraConnect.logger.info("[#{self.id}] REFRESH OAUTH - Failed Retrying(#{refresh_oauth_count})")
|
445
445
|
retry
|
446
446
|
else
|
447
|
-
|
447
|
+
ZuoraConnect.logger.fatal("[#{self.id}] REFRESH OAUTH - Failed #{refresh_oauth_count}x")
|
448
448
|
raise
|
449
449
|
end
|
450
450
|
end
|
@@ -494,10 +494,10 @@ module ZuoraConnect
|
|
494
494
|
end
|
495
495
|
end
|
496
496
|
if cached_instance.blank?
|
497
|
-
|
497
|
+
ZuoraConnect.logger.debug("[#{self.id}] Cached AppInstance Missing")
|
498
498
|
return session
|
499
499
|
else
|
500
|
-
|
500
|
+
ZuoraConnect.logger.debug("[#{self.id}] Cached AppInstance Found")
|
501
501
|
return decrypt_data(data: cached_instance, rescue_return: session).merge(session)
|
502
502
|
end
|
503
503
|
else
|
@@ -509,7 +509,7 @@ module ZuoraConnect
|
|
509
509
|
if defined?(Redis.current)
|
510
510
|
#Task data must be present and the last refresh cannot be old. We dont want to overwite new cache data with old
|
511
511
|
if self.task_data.present? && (self.last_refresh.to_i > INSTANCE_REFRESH_WINDOW.ago.to_i)
|
512
|
-
|
512
|
+
ZuoraConnect.logger.debug("[#{self.id}] Caching AppInstance")
|
513
513
|
Redis.current.setex("AppInstance:#{self.id}", INSTANCE_REDIS_CACHE_PERIOD.to_i, self.encrypt_data(data: self.save_data))
|
514
514
|
end
|
515
515
|
end
|
@@ -570,7 +570,7 @@ module ZuoraConnect
|
|
570
570
|
begin
|
571
571
|
return JSON.parse(encryptor.decrypt_and_verify(CGI::unescape(data)))
|
572
572
|
rescue ActiveSupport::MessageVerifier::InvalidSignature => ex
|
573
|
-
|
573
|
+
ZuoraConnect.logger.add(Logger::FATAL, 'Error Decrypting') if log_fatal
|
574
574
|
return rescue_return
|
575
575
|
rescue JSON::ParserError => ex
|
576
576
|
return encryptor.decrypt_and_verify(CGI::unescape(data))
|
@@ -632,8 +632,8 @@ module ZuoraConnect
|
|
632
632
|
self.update_column(:catalog_update_attempt_at, Time.now.utc)
|
633
633
|
|
634
634
|
entity_reference = entity_id.blank? ? 'Default' : entity_id
|
635
|
-
|
636
|
-
|
635
|
+
ZuoraConnect.logger.debug("Fetch Catalog")
|
636
|
+
ZuoraConnect.logger.debug("Zuora Entity: #{entity_id.blank? ? 'default' : entity_id}")
|
637
637
|
|
638
638
|
login = zuora_login.client(entity_reference)
|
639
639
|
|
@@ -644,12 +644,12 @@ module ZuoraConnect
|
|
644
644
|
response = {'nextPage' => login.rest_endpoint("catalog/products?pageSize=#{page_size}")}
|
645
645
|
while !response["nextPage"].blank?
|
646
646
|
url = login.rest_endpoint(response["nextPage"].split('/v1/').last)
|
647
|
-
|
647
|
+
ZuoraConnect.logger.debug("Fetch Catalog URL #{url}")
|
648
648
|
output_json, response = login.rest_call(:debug => false, :url => url, :errors => [ZuoraAPI::Exceptions::ZuoraAPISessionError], :timeout_retry => true)
|
649
|
-
|
649
|
+
ZuoraConnect.logger.debug("Fetch Catalog Response Code #{response.code}")
|
650
650
|
|
651
651
|
if !output_json['success'] =~ (/(true|t|yes|y|1)$/i) || output_json['success'].class != TrueClass
|
652
|
-
|
652
|
+
ZuoraConnect.logger.error("Fetch Catalog DATA #{output_json.to_json}")
|
653
653
|
raise ZuoraAPI::Exceptions::ZuoraAPIError.new("Error Getting Catalog: #{output_json}")
|
654
654
|
end
|
655
655
|
|
@@ -939,9 +939,9 @@ module ZuoraConnect
|
|
939
939
|
|
940
940
|
def method_missing(method_sym, *arguments, &block)
|
941
941
|
if method_sym.to_s.include?("login")
|
942
|
-
|
943
|
-
|
944
|
-
|
942
|
+
ZuoraConnect.logger.fatal("Method Missing #{method_sym}")
|
943
|
+
ZuoraConnect.logger.fatal("Instance Data: #{self.task_data}")
|
944
|
+
ZuoraConnect.logger.fatal("Instance Logins: #{self.logins}")
|
945
945
|
end
|
946
946
|
super
|
947
947
|
end
|
@@ -12,14 +12,14 @@ module ZuoraConnect
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def connect
|
15
|
-
|
15
|
+
ZuoraConnect.logger.debug(self.format_metric_log('Telegraf','Need new connection')) if ZuoraConnect.configuration.telegraf_debug
|
16
16
|
uri = URI.parse(ZuoraConnect.configuration.telegraf_endpoint)
|
17
17
|
self.host = UDPSocket.new.tap do |socket|
|
18
18
|
socket.connect uri.host, uri.port
|
19
19
|
end
|
20
20
|
rescue => ex
|
21
21
|
self.host = nil
|
22
|
-
|
22
|
+
ZuoraConnect.logger.warn(self.format_metric_log('Telegraf', "Failed to connect: #{ex.class}"))
|
23
23
|
end
|
24
24
|
|
25
25
|
def write(direction: 'Unknown', tags: {}, values: {})
|
@@ -44,9 +44,9 @@ module ZuoraConnect
|
|
44
44
|
end
|
45
45
|
end
|
46
46
|
if ZuoraConnect.configuration.telegraf_debug
|
47
|
-
|
48
|
-
|
49
|
-
|
47
|
+
ZuoraConnect.logger.debug(self.format_metric_log('Telegraf', tags.to_s))
|
48
|
+
ZuoraConnect.logger.debug(self.format_metric_log('Telegraf', values.to_s))
|
49
|
+
ZuoraConnect.logger.debug(self.format_metric_log('Telegraf', "Writing '#{direction.capitalize}': #{time.real.round(5)} ms"))
|
50
50
|
end
|
51
51
|
end
|
52
52
|
|
@@ -56,14 +56,18 @@ module ZuoraConnect
|
|
56
56
|
self.host.write InfluxDB::PointValue.new({series: series, tags: tags, values: values}).dump
|
57
57
|
rescue => ex
|
58
58
|
self.connect
|
59
|
-
|
59
|
+
ZuoraConnect.logger.warn(self.format_metric_log('Telegraf',"Failed to write udp: #{ex.class}"))
|
60
60
|
end
|
61
61
|
|
62
62
|
def format_metric_log(message, dump = nil)
|
63
63
|
message_color, dump_color = "1;91", "0;1"
|
64
64
|
log_entry = " \e[#{message_color}m#{message}\e[0m "
|
65
65
|
log_entry << "\e[#{dump_color}m%#{String === dump ? 's' : 'p'}\e[0m" % dump if dump
|
66
|
-
|
66
|
+
if Rails.env == :development
|
67
|
+
log_entry
|
68
|
+
else
|
69
|
+
[message, dump].compact.join(' - ')
|
70
|
+
end
|
67
71
|
end
|
68
72
|
|
69
73
|
def self.app_name
|
@@ -19,4 +19,13 @@ Resque.module_eval do
|
|
19
19
|
|
20
20
|
Hash[queue_names.zip(sizes)]
|
21
21
|
end
|
22
|
-
end
|
22
|
+
end
|
23
|
+
|
24
|
+
if defined?(Resque)
|
25
|
+
Resque.logger = ZuoraConnect.custom_logger(name: "Resque")
|
26
|
+
Resque::Scheduler.logger = ZuoraConnect.custom_logger(name: "ResqueScheduler") if defined?(Resque::Scheduler)
|
27
|
+
end
|
28
|
+
|
29
|
+
Makara::Logging::Logger.logger = ZuoraConnect.custom_logger(name: "Makara") if defined?(Makara)
|
30
|
+
ElasticAPM.agent.config.logger = ZuoraConnect.custom_logger(name: "ElasticAPM", level: MonoLogger::WARN) if defined?(ElasticAPM) && ElasticAPM.running?
|
31
|
+
ActionMailer::Base.logger = ZuoraConnect.custom_logger(name: "ActionMailer") if defined?(ActionMailer)
|
@@ -2,7 +2,8 @@ if defined?(Unicorn::WorkerKiller)
|
|
2
2
|
Unicorn::WorkerKiller.module_eval do
|
3
3
|
self.singleton_class.send(:alias_method, :kill_self_old, :kill_self)
|
4
4
|
def self.kill_self(logger, start_time)
|
5
|
-
|
5
|
+
@unicorn_logger ||= ZuoraConnect.custom_logger(name: "UnicornKiller")
|
6
|
+
self.kill_self_old(@unicorn_logger, start_time)
|
6
7
|
ZuoraConnect::AppInstance.write_to_telegraf(direction: 'Unicorn-Killer', tags: {app_instance: 0}, values: {kill: 1})
|
7
8
|
end
|
8
9
|
end
|
data/config/routes.rb
CHANGED
data/lib/metrics/net.rb
CHANGED
@@ -212,7 +212,7 @@ if defined?(Rails)
|
|
212
212
|
if defined?(ActiveSupport) && ActiveSupport.respond_to?(:on_load)
|
213
213
|
# Rails3
|
214
214
|
ActiveSupport.on_load(:after_initialize) do
|
215
|
-
HttpLogger.logger =
|
215
|
+
HttpLogger.logger = ZuoraConnect.logger unless HttpLogger.logger
|
216
216
|
end
|
217
217
|
end
|
218
218
|
end
|
data/lib/zuora_connect.rb
CHANGED
@@ -15,7 +15,34 @@ require 'metrics/net'
|
|
15
15
|
module ZuoraConnect
|
16
16
|
class << self
|
17
17
|
attr_accessor :configuration
|
18
|
+
attr_writer :logger
|
19
|
+
|
20
|
+
def logger
|
21
|
+
@logger ||= custom_logger(name: "Connect", level: Rails.logger.level)
|
22
|
+
end
|
23
|
+
|
24
|
+
def custom_logger(name: "", level: Rails.logger.level)
|
25
|
+
logger = MonoLogger.new(STDOUT)
|
26
|
+
logger.level = level
|
27
|
+
logger.formatter = proc do |serverity, datetime, progname, msg|
|
28
|
+
begin
|
29
|
+
msg = JSON.parse(msg)
|
30
|
+
rescue JSON::ParserError => ex
|
31
|
+
end
|
32
|
+
|
33
|
+
require 'json'
|
34
|
+
JSON.dump(
|
35
|
+
name: name,
|
36
|
+
level: serverity,
|
37
|
+
timestamp: datetime.strftime('%FT%T.%6N'),
|
38
|
+
pid: Process.pid,
|
39
|
+
message: msg
|
40
|
+
) + "\n"
|
41
|
+
end
|
42
|
+
return logger
|
43
|
+
end
|
18
44
|
end
|
45
|
+
|
19
46
|
module Controllers
|
20
47
|
autoload :Helpers, 'zuora_connect/controllers/helpers'
|
21
48
|
end
|
@@ -39,4 +66,44 @@ module ZuoraConnect
|
|
39
66
|
|
40
67
|
return configuration
|
41
68
|
end
|
69
|
+
|
70
|
+
def self.elastic_apm_defaults
|
71
|
+
defaults = {}
|
72
|
+
case Rails.env.to_s
|
73
|
+
when 'production'
|
74
|
+
defaults = {
|
75
|
+
server_url: "http://apm-server.logging:8200",
|
76
|
+
transaction_sample_rate: 0.20,
|
77
|
+
capture_body: 'errors'
|
78
|
+
}
|
79
|
+
when 'staging'
|
80
|
+
defaults = {
|
81
|
+
server_url: "http://apm-server.logging:8200",
|
82
|
+
transaction_sample_rate: 1.0
|
83
|
+
}
|
84
|
+
when 'development'
|
85
|
+
defaults = {
|
86
|
+
server_url: "http://logging.0.ecc.auw2.zuora:8200",
|
87
|
+
transaction_sample_rate: 1.0
|
88
|
+
}
|
89
|
+
when 'test'
|
90
|
+
defaults = {
|
91
|
+
active: false,
|
92
|
+
disable_send: true
|
93
|
+
}
|
94
|
+
end
|
95
|
+
|
96
|
+
defaults.merge!({
|
97
|
+
pool_size: 1,
|
98
|
+
transaction_max_spans: 500,
|
99
|
+
ignore_url_patterns: ['^\/admin\/resque.*', '^\/admin\/redis.*', '^\/admin\/peek.*', '^\/peek.*'],
|
100
|
+
verify_server_cert: false,
|
101
|
+
log_level: Logger::INFO,
|
102
|
+
service_name: ENV['DEIS_APP'].present? ? ENV['DEIS_APP'] : Rails.application.class.parent_name,
|
103
|
+
logger: ZuoraConnect.custom_logger(name: "ElasticAPM", level: MonoLogger::WARN)
|
104
|
+
})
|
105
|
+
defaults.merge!({disable_send: true}) if defined?(Rails::Console)
|
106
|
+
|
107
|
+
return defaults
|
108
|
+
end
|
42
109
|
end
|
@@ -3,7 +3,7 @@ module ZuoraConnect
|
|
3
3
|
|
4
4
|
attr_accessor :default_locale, :default_time_zone, :url, :mode, :delayed_job,:private_key, :additional_apartment_models
|
5
5
|
|
6
|
-
attr_accessor :enable_metrics, :
|
6
|
+
attr_accessor :enable_metrics, :telegraf_endpoint, :telegraf_debug, :custom_prometheus_update_block, :silencer_resque_finish, :blpop_queue
|
7
7
|
|
8
8
|
attr_accessor :oauth_client_id, :oauth_client_secret, :oauth_client_redirect_uri
|
9
9
|
|
@@ -24,7 +24,6 @@ module ZuoraConnect
|
|
24
24
|
@enable_metrics = false
|
25
25
|
@telegraf_endpoint = 'udp://telegraf-app-metrics.monitoring.svc.cluster.local:8094'
|
26
26
|
@telegraf_debug = false
|
27
|
-
@enable_apm = false
|
28
27
|
# OAuth Settings
|
29
28
|
@oauth_client_id = ""
|
30
29
|
@oauth_client_secret = ""
|
@@ -8,23 +8,23 @@ module ZuoraConnect
|
|
8
8
|
#Skip session for api requests
|
9
9
|
Thread.current[:appinstance] = nil
|
10
10
|
request.session_options[:skip] = true
|
11
|
-
ElasticAPM.set_tag(:trace_id, request.uuid) if defined?(ElasticAPM)
|
11
|
+
ElasticAPM.set_tag(:trace_id, request.uuid) if defined?(ElasticAPM) && ElasticAPM.running?
|
12
12
|
|
13
13
|
start_time = Time.now
|
14
14
|
if request.headers["API-Token"].present?
|
15
15
|
@appinstance = ZuoraConnect::AppInstance.where(:api_token => request.headers["API-Token"]).first
|
16
|
-
|
16
|
+
ZuoraConnect.logger.debug("[#{@appinstance.id}] API REQUEST - API token") if @appinstance.present?
|
17
17
|
check_instance
|
18
18
|
else
|
19
19
|
authenticate_or_request_with_http_basic do |username, password|
|
20
20
|
@appinstance = ZuoraConnect::AppInstance.where(:token => password).first
|
21
21
|
@appinstance ||= ZuoraConnect::AppInstance.where(:api_token => password).first
|
22
|
-
|
22
|
+
ZuoraConnect.logger.debug("[#{@appinstance.id}] API REQUEST - Basic Auth") if @appinstance.present?
|
23
23
|
check_instance
|
24
24
|
end
|
25
25
|
end
|
26
26
|
if @appinstance.present?
|
27
|
-
|
27
|
+
ZuoraConnect.logger.debug("[#{@appinstance.id}] Authenticate App API Request Completed In - #{(Time.now - start_time).round(2)}s")
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
@@ -66,13 +66,13 @@ module ZuoraConnect
|
|
66
66
|
render "zuora_connect/static/invalid_launch_request"
|
67
67
|
end
|
68
68
|
rescue => ex
|
69
|
-
|
69
|
+
ZuoraConnect.logger.debug("Error parsing Instance ID's: #{ex.message}")
|
70
70
|
render "zuora_connect/static/invalid_launch_request"
|
71
71
|
end
|
72
72
|
end
|
73
73
|
|
74
74
|
def authenticate_connect_app_request
|
75
|
-
ElasticAPM.set_tag(:trace_id, request.uuid) if defined?(ElasticAPM)
|
75
|
+
ElasticAPM.set_tag(:trace_id, request.uuid) if defined?(ElasticAPM) && ElasticAPM.running?
|
76
76
|
Thread.current[:appinstance] = nil
|
77
77
|
if params[:app_instance_ids].present? && !params[:app_instance_id].present?
|
78
78
|
begin
|
@@ -86,7 +86,7 @@ module ZuoraConnect
|
|
86
86
|
@appinstance.cache_app_instance
|
87
87
|
session["appInstance"] = app_instance_ids[0]
|
88
88
|
else
|
89
|
-
|
89
|
+
ZuoraConnect.logger.fatal("Launch Error: Param Instance didnt match session data")
|
90
90
|
render "zuora_connect/static/invalid_launch_request"
|
91
91
|
return
|
92
92
|
end
|
@@ -95,7 +95,7 @@ module ZuoraConnect
|
|
95
95
|
return
|
96
96
|
end
|
97
97
|
rescue => ex
|
98
|
-
|
98
|
+
ZuoraConnect.logger.fatal("Launch Error: #{ex.message}")
|
99
99
|
render "zuora_connect/static/invalid_launch_request"
|
100
100
|
return
|
101
101
|
end
|
@@ -113,7 +113,7 @@ module ZuoraConnect
|
|
113
113
|
return
|
114
114
|
end
|
115
115
|
rescue => ex
|
116
|
-
|
116
|
+
ZuoraConnect.logger.fatal("Launch Error: #{ex.message}")
|
117
117
|
render "zuora_connect/static/invalid_launch_request"
|
118
118
|
return
|
119
119
|
end
|
@@ -136,16 +136,16 @@ module ZuoraConnect
|
|
136
136
|
end
|
137
137
|
end
|
138
138
|
if session["#{@appinstance.id}::user::email"].present?
|
139
|
-
ElasticAPM.set_user(session["#{@appinstance.id}::user::email"]) if defined?(ElasticAPM)
|
139
|
+
ElasticAPM.set_user(session["#{@appinstance.id}::user::email"]) if defined?(ElasticAPM) && ElasticAPM.running?
|
140
140
|
PaperTrail.whodunnit = session["#{@appinstance.id}::user::email"] if defined?(PaperTrail)
|
141
141
|
end
|
142
142
|
begin
|
143
143
|
I18n.locale = session["#{@appinstance.id}::user::locale"] ? session["#{@appinstance.id}::user::locale"] : @appinstance.locale
|
144
144
|
rescue I18n::InvalidLocale => ex
|
145
|
-
|
145
|
+
ZuoraConnect.logger.error("Invalid Locale: #{ex.message}")
|
146
146
|
end
|
147
147
|
Time.zone = session["#{@appinstance.id}::user::timezone"] ? session["#{@appinstance.id}::user::timezone"] : @appinstance.timezone
|
148
|
-
|
148
|
+
ZuoraConnect.logger.debug("[#{@appinstance.blank? ? "N/A" : @appinstance.id}] Authenticate App Request Completed In - #{(Time.now - start_time).round(2)}s")
|
149
149
|
end
|
150
150
|
|
151
151
|
def persist_connect_app_session
|
@@ -170,7 +170,7 @@ module ZuoraConnect
|
|
170
170
|
def setup_instance_via_data
|
171
171
|
session.clear
|
172
172
|
values = JSON.parse(ZuoraConnect::AppInstance.decrypt_response(Base64.urlsafe_decode64(request["data"])))
|
173
|
-
|
173
|
+
ZuoraConnect.logger.debug("Data: #{values.to_json}")
|
174
174
|
if values["param_data"]
|
175
175
|
values["param_data"].each do |k ,v|
|
176
176
|
params[k] = v
|
@@ -185,7 +185,7 @@ module ZuoraConnect
|
|
185
185
|
session["#{values["appInstance"]}::user::email"] = values["current_user"]["email"]
|
186
186
|
end
|
187
187
|
|
188
|
-
|
188
|
+
ZuoraConnect.logger.debug("App Params: #{values.to_json}}") if Rails.env != "production"
|
189
189
|
|
190
190
|
@appinstance = ZuoraConnect::AppInstance.where(:id => values["appInstance"].to_i).first
|
191
191
|
if @appinstance.blank?
|
@@ -193,7 +193,7 @@ module ZuoraConnect
|
|
193
193
|
begin
|
194
194
|
Apartment::Tenant.create(values["appInstance"].to_s)
|
195
195
|
rescue Apartment::TenantExists => ex
|
196
|
-
|
196
|
+
ZuoraConnect.logger.debug("Tenant Already Exists")
|
197
197
|
end
|
198
198
|
@appinstance = ZuoraConnect::AppInstance.new(:api_token => values[:api_token],:id => values["appInstance"].to_i, :access_token => values["access_token"].blank? ? values["user"] : values["access_token"], :token => values["refresh_token"] , :refresh_token => values["refresh_token"].blank? ? values["key"] : values["refresh_token"], :oauth_expires_at => values["expires"])
|
199
199
|
@appinstance.save(:validate => false)
|
@@ -250,7 +250,7 @@ module ZuoraConnect
|
|
250
250
|
end
|
251
251
|
Thread.current[:appinstance] = @appinstance
|
252
252
|
PaperTrail.whodunnit = "API User" if defined?(PaperTrail)
|
253
|
-
ElasticAPM.set_user("API User") if defined?(ElasticAPM)
|
253
|
+
ElasticAPM.set_user("API User") if defined?(ElasticAPM) && ElasticAPM.running?
|
254
254
|
return true
|
255
255
|
else
|
256
256
|
render text: "Access Denied", status: :unauthorized
|
data/lib/zuora_connect/engine.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
1
|
module ZuoraConnect
|
2
|
-
VERSION = "1.
|
3
|
-
end
|
2
|
+
VERSION = "1.8.71s"
|
3
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: zuora_connect
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.8.71s
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Connect Team
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-03-
|
11
|
+
date: 2019-03-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: apartment
|
@@ -28,56 +28,42 @@ dependencies:
|
|
28
28
|
name: zuora_api
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: 1.6.21
|
34
|
-
- - "
|
34
|
+
- - "~>"
|
35
35
|
- !ruby/object:Gem::Version
|
36
36
|
version: 1.6.21
|
37
37
|
type: :runtime
|
38
38
|
prerelease: false
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- - "
|
41
|
+
- - ">="
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: 1.6.21
|
44
|
-
- - "
|
44
|
+
- - "~>"
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 1.6.21
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: httparty
|
49
49
|
requirement: !ruby/object:Gem::Requirement
|
50
50
|
requirements:
|
51
|
-
- - "~>"
|
52
|
-
- !ruby/object:Gem::Version
|
53
|
-
version: 0.16.4
|
54
51
|
- - ">="
|
55
52
|
- !ruby/object:Gem::Version
|
56
53
|
version: 0.16.4
|
57
|
-
type: :runtime
|
58
|
-
prerelease: false
|
59
|
-
version_requirements: !ruby/object:Gem::Requirement
|
60
|
-
requirements:
|
61
54
|
- - "~>"
|
62
55
|
- !ruby/object:Gem::Version
|
63
56
|
version: 0.16.4
|
64
|
-
- - ">="
|
65
|
-
- !ruby/object:Gem::Version
|
66
|
-
version: 0.16.4
|
67
|
-
- !ruby/object:Gem::Dependency
|
68
|
-
name: elastic-apm
|
69
|
-
requirement: !ruby/object:Gem::Requirement
|
70
|
-
requirements:
|
71
|
-
- - ">="
|
72
|
-
- !ruby/object:Gem::Version
|
73
|
-
version: '0'
|
74
57
|
type: :runtime
|
75
58
|
prerelease: false
|
76
59
|
version_requirements: !ruby/object:Gem::Requirement
|
77
60
|
requirements:
|
78
61
|
- - ">="
|
79
62
|
- !ruby/object:Gem::Version
|
80
|
-
version:
|
63
|
+
version: 0.16.4
|
64
|
+
- - "~>"
|
65
|
+
- !ruby/object:Gem::Version
|
66
|
+
version: 0.16.4
|
81
67
|
- !ruby/object:Gem::Dependency
|
82
68
|
name: bundler
|
83
69
|
requirement: !ruby/object:Gem::Requirement
|
@@ -299,7 +285,6 @@ files:
|
|
299
285
|
- app/views/zuora_connect/static/session_error.html.erb
|
300
286
|
- config/initializers/apartment.rb
|
301
287
|
- config/initializers/aws.rb
|
302
|
-
- config/initializers/elastic_apm.rb
|
303
288
|
- config/initializers/object_method_hooks.rb
|
304
289
|
- config/initializers/postgresql_adapter.rb
|
305
290
|
- config/initializers/prometheus.rb
|
@@ -395,8 +380,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
395
380
|
- !ruby/object:Gem::Version
|
396
381
|
version: 1.3.1
|
397
382
|
requirements: []
|
398
|
-
|
399
|
-
rubygems_version: 2.6.8
|
383
|
+
rubygems_version: 3.0.3
|
400
384
|
signing_key:
|
401
385
|
specification_version: 4
|
402
386
|
summary: Summary of Connect.
|
@@ -1,25 +0,0 @@
|
|
1
|
-
if defined?(ElasticAPM)
|
2
|
-
if ZuoraConnect.configuration.enable_apm && !defined?(Rails::Console)
|
3
|
-
ElasticAPM.agent.config.disable_send = false
|
4
|
-
else
|
5
|
-
ElasticAPM.agent.config.disable_send = true
|
6
|
-
end
|
7
|
-
case Rails.env.to_s
|
8
|
-
when 'production'
|
9
|
-
ElasticAPM.agent.config.server_url = "http://apm-server.logging:8200"
|
10
|
-
ElasticAPM.agent.config.transaction_sample_rate = 0.20
|
11
|
-
ElasticAPM.agent.config.capture_body = false
|
12
|
-
when 'staging'
|
13
|
-
ElasticAPM.agent.config.server_url = "http://apm-server.logging:8200"
|
14
|
-
ElasticAPM.agent.config.transaction_sample_rate = 1.0
|
15
|
-
when 'development'
|
16
|
-
ElasticAPM.agent.config.server_url = "http://logging.0.ecc.auw2.zuora:8200"
|
17
|
-
ElasticAPM.agent.config.transaction_sample_rate = 1.0
|
18
|
-
end
|
19
|
-
ElasticAPM.agent.config.pool_size = 1
|
20
|
-
ElasticAPM.agent.config.transaction_max_spans = 500
|
21
|
-
ElasticAPM.agent.config.ignore_url_patterns = ['^\/admin\/resque.*', '^\/admin\/redis.*', '^\/admin\/peek.*', '^\/peek.*']
|
22
|
-
ElasticAPM.agent.config.verify_server_cert = false
|
23
|
-
ElasticAPM.agent.config.log_level = Logger::INFO
|
24
|
-
ElasticAPM.agent.config.service_name = ::ZuoraConnect::Telegraf.app_name
|
25
|
-
end
|