zuora_connect 2.0.59a → 2.0.60d

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a40ca87d7094e3f69418c9e339a61f3d89be11ca4e4d4c20df1cdca3c7a9af14
4
- data.tar.gz: a30171ac13b845b3b9c2871af570564e5d1d0ae57e625809b4217d2dc0a4a2a5
3
+ metadata.gz: f68ca8630651e624313553f6799344c23c5e63b05ed6345a4fc1cc082ea62491
4
+ data.tar.gz: d3da0f0dfaadda7cd0ee62abfd413ceaa64c5e3869f9b131e543d86d538a1efc
5
5
  SHA512:
6
- metadata.gz: 9cbfc416d448d4d800f4704361306e80d3033bc38e6128227725eb49c3d67ac27e05ef672fdf591b5919e3c27348f65ff6e1d05c5f38f8c27f42d68c7a2103a0
7
- data.tar.gz: 6aa04b8bea5686529095e693db98be19839f36a48cab820f61145d6649571c212a1e10a659efc08cab61ee92053607ba003810c7e74ddb5ab9bebc5c0af3d87a
6
+ metadata.gz: '00539cc692ffa61e7b13c5dbbd7cc7b9a204f3fc8ebcec71247f56b46d8915a116f47c987d2cfa36102911bf2aeb6b9dff0034565c459b414a332521f6fd6bd9'
7
+ data.tar.gz: 1ed5cab4fdcf39c80981cfab2c75d071e9c4371ae74a82ef25e90721020667e8e5129f51760c5a92a530f630bb8e57b255d0caa18b39123a1a0bd5fe93acacd3
@@ -1,11 +1,11 @@
1
1
  module ZuoraConnect
2
2
  class StaticController < ApplicationController
3
- before_action :authenticate_connect_app_request, :except => [:metrics, :health, :initialize_app, :provision]
4
- before_action :clear_connect_app_session, :only => [:metrics, :health, :initialize_app, :provision]
5
- after_action :persist_connect_app_session, :except => [:metrics, :health, :initialize_app, :provision]
3
+ before_action :authenticate_connect_app_request, :except => [:metrics, :health, :initialize_app, :provision, :instance_user]
4
+ before_action :clear_connect_app_session, :only => [:metrics, :health, :initialize_app, :provision, :instance_user]
5
+ after_action :persist_connect_app_session, :except => [:metrics, :health, :initialize_app, :provision, :instance_user]
6
6
 
7
7
  skip_before_action :verify_authenticity_token, :only => [:initialize_app, :provision]
8
- http_basic_authenticate_with name: ENV['PROVISION_USER'], password: ENV['PROVISION_SECRET'], :only => [:provision]
8
+ http_basic_authenticate_with name: ENV['PROVISION_USER'], password: ENV['PROVISION_SECRET'], :only => [:provision, :instance_user]
9
9
 
10
10
  def metrics
11
11
  type = params[:type].present? ? params[:type] : "versions"
@@ -14,11 +14,11 @@ module ZuoraConnect
14
14
 
15
15
  def health
16
16
  if params[:error].present?
17
- begin
17
+ begin
18
18
  raise ZuoraConnect::Exceptions::Error.new('This is an error')
19
19
  rescue => ex
20
20
  case params[:error]
21
- when 'Log'
21
+ when 'Log'
22
22
  Rails.logger.error("Error in Health", ex)
23
23
  when 'Exception'
24
24
  raise
@@ -77,6 +77,52 @@ module ZuoraConnect
77
77
  end
78
78
  end
79
79
 
80
+ def instance_user
81
+ ZuoraConnect::AppInstance.read_master_db do
82
+ ZuoraConnect.logger.with_fields = {} if ZuoraConnect.logger.is_a?(Ougai::Logger)
83
+ Rails.logger.with_fields = {} if Rails.logger.is_a?(Ougai::Logger)
84
+
85
+ if defined?(ElasticAPM) && ElasticAPM.running? && ElasticAPM.respond_to?(:set_label)
86
+ ElasticAPM.set_label(:trace_id, request.uuid)
87
+ end
88
+
89
+ unless params[:id].present?
90
+ render json: {
91
+ status: 400,
92
+ message: 'No app instance id provided'
93
+ }, status: :bad_request
94
+ return
95
+ end
96
+
97
+ @appinstance = ZuoraConnect::AppInstance.find(params[:id]).new_session
98
+ end
99
+
100
+ zuora_client = @appinstance.send(ZuoraConnect::AppInstance::LOGIN_TENANT_DESTINATION).client
101
+ client_describe, = zuora_client.rest_call(
102
+ url: zuora_client.rest_endpoint('genesis/user/info').gsub('v1/', ''),
103
+ session_type: zuora_client.class == ZuoraAPI::Oauth ? :bearer : :basic
104
+ )
105
+
106
+ render json: {
107
+ status: 200,
108
+ message: 'Success',
109
+ user_id: client_describe['coreUserId'],
110
+ username: client_describe['username'],
111
+ email: client_describe['workEmail']
112
+ }, status: 200
113
+ rescue ActiveRecord::RecordNotFound
114
+ render json: {
115
+ status: 400,
116
+ message: 'No app instance found'
117
+ }, status: :bad_request
118
+ rescue StandardError => e
119
+ Rails.logger.error('Error occurred getting user details', e)
120
+ render json: {
121
+ status: 500,
122
+ message: 'Failed to get user details'
123
+ }, status: 500
124
+ end
125
+
80
126
  private
81
127
 
82
128
  def clear_connect_app_session
@@ -402,7 +402,7 @@ module ZuoraConnect
402
402
  end
403
403
 
404
404
  def self.write_to_telegraf(*args)
405
- if ZuoraConnect.configuration.enable_metrics
405
+ if ZuoraConnect.configuration.enable_metrics && !defined?(Prometheus)
406
406
  @@telegraf_host = ZuoraConnect::Telegraf.new() if @@telegraf_host == nil
407
407
  unicorn_stats = self.unicorn_listener_stats() if defined?(Unicorn) && Unicorn.respond_to?(:listener_names)
408
408
  @@telegraf_host.write(direction: 'Raindrops', tags: {}, values: unicorn_stats) unless unicorn_stats.blank?
@@ -3,38 +3,93 @@ if defined? Prometheus
3
3
  require "zuora_connect/version"
4
4
  require "zuora_api/version"
5
5
 
6
+ resque_path = "#{ENV['RESQUE_EXPORTER_PATH'] || Rails.root.join('tmp/resque_exporter')}/*.prom"
7
+ prometheus_path = Rails.root.join("tmp/prometheus")
8
+
9
+ Dir[resque_path, "#{prometheus_path}/*.bin"].each do |file_path|
10
+ File.unlink(file_path)
11
+ end
12
+
13
+ require 'prometheus/client/data_stores/direct_file_store'
14
+ Prometheus::Client.config.data_store = Prometheus::Client::DataStores::DirectFileStore.new(
15
+ dir: prometheus_path
16
+ )
17
+
18
+ class ResqueExporter
19
+ require 'prometheus/client/formats/text'
20
+ require 'fileutils'
21
+
22
+ def initialize
23
+ @lock = Monitor.new
24
+ @registry = Prometheus::Client.registry
25
+ @path = ENV['RESQUE_EXPORTER_PATH'] || Rails.root.join('tmp/resque_exporter')
26
+ FileUtils.mkdir_p(@path)
27
+ end
28
+
29
+ def export
30
+ filename = File.join(@path, 'resque_export.prom')
31
+ @lock.synchronize do
32
+ File.open(filename, 'w+') do |file|
33
+ file.write(Prometheus::Client::Formats::Text.marshal(@registry))
34
+ end
35
+ end
36
+ end
37
+ end
38
+
39
+ most_recent_aggregation = {}
40
+ sum_aggregation = {}
41
+ if defined?(Unicorn)
42
+ most_recent_aggregation[:aggregation] = :most_recent
43
+ sum_aggregation[:aggregation] = :sum
44
+ end
45
+
6
46
  # Create a default Prometheus registry for our metrics.
7
47
  prometheus = Prometheus::Client.registry
8
48
 
9
49
  # Create your metrics.
10
- ZUORA_VERSION = Prometheus::Client::Gauge.new(:zuora_version, 'The current Zuora Gem version.')
11
- CONNECT_VERSION = Prometheus::Client::Gauge.new(:gem_version, 'The current Connect Gem version.')
12
- RAILS_VERSION = Prometheus::Client::Gauge.new(:rails_version, 'The current Rails version.')
13
- RUBY_V = Prometheus::Client::Gauge.new(:ruby_version, 'The current Ruby version.')
50
+ ZUORA_VERSION = prometheus.gauge(:zuora_version, docstring: 'The current Zuora Gem version.', labels: %i(version name), preset_labels: { version: ZuoraAPI::VERSION, name: ZuoraConnect::Telegraf.app_name }, store_settings: most_recent_aggregation)
51
+ CONNECT_VERSION = prometheus.gauge(:gem_version, docstring: 'The current Connect Gem version.', labels: %i(version name), preset_labels: { version: ZuoraConnect::VERSION, name: ZuoraConnect::Telegraf.app_name }, store_settings: most_recent_aggregation)
52
+ RAILS_VERSION = prometheus.gauge(:rails_version, docstring: 'The current Rails version.', labels: %i(version name), preset_labels: { version: Rails.version, name: ZuoraConnect::Telegraf.app_name }, store_settings: most_recent_aggregation)
53
+ RUBY_V = prometheus.gauge(:ruby_version, docstring: 'The current Ruby version.', labels: %i(version name), preset_labels: { version: RUBY_VERSION, name: ZuoraConnect::Telegraf.app_name }, store_settings: most_recent_aggregation)
14
54
 
15
- # Register your metrics with the registry we previously created.
16
- prometheus.register(ZUORA_VERSION);ZUORA_VERSION.set({version: ZuoraAPI::VERSION, name: ZuoraConnect::Telegraf.app_name},0)
17
- prometheus.register(CONNECT_VERSION);CONNECT_VERSION.set({version: ZuoraConnect::VERSION, name: ZuoraConnect::Telegraf.app_name},0)
18
- prometheus.register(RAILS_VERSION);RAILS_VERSION.set({version: Rails.version, name: ZuoraConnect::Telegraf.app_name},0)
19
- prometheus.register(RUBY_V);RUBY_V.set({version: RUBY_VERSION, name: ZuoraConnect::Telegraf.app_name},0)
55
+ ZUORA_VERSION.set(0)
56
+ CONNECT_VERSION.set(0)
57
+ RAILS_VERSION.set(0)
58
+ RUBY_V.set(0)
20
59
 
21
60
  # Do they have resque jobs?
22
61
  if defined? Resque.redis
23
- REDIS_CONNECTION = Prometheus::Client::Gauge.new(:redis_connection, 'The status of the redis connection, 0 or 1')
24
- FINISHED_JOBS = Prometheus::Client::Gauge.new(:finished_jobs, 'Done resque jobs')
25
- WORKERS = Prometheus::Client::Gauge.new(:workers, 'Total resque workers')
26
- ACTIVE_WORKERS = Prometheus::Client::Gauge.new(:active_workers, 'Active resque workers')
27
- FAILED_JOBS = Prometheus::Client::Gauge.new(:failed_jobs, 'Failed resque jobs')
28
- PENDING_JOBS = Prometheus::Client::Gauge.new(:pending_jobs, 'Pending resque jobs')
29
-
30
- prometheus.register(REDIS_CONNECTION)
31
- prometheus.register(FINISHED_JOBS)
32
- prometheus.register(ACTIVE_WORKERS)
33
- prometheus.register(WORKERS)
34
- prometheus.register(FAILED_JOBS)
35
- prometheus.register(PENDING_JOBS)
36
-
62
+ REDIS_CONNECTION = prometheus.gauge(:redis_connection, docstring: 'The status of the redis connection, 0 or 1', labels: %i(connection name), preset_labels: {connection:'redis', name: ZuoraConnect::Telegraf.app_name}, store_settings: most_recent_aggregation)
63
+ JOBS_FINISHED = prometheus.gauge(:jobs_finished, docstring: 'Done resque jobs', labels: %i(type name), preset_labels: {type:'resque', name: ZuoraConnect::Telegraf.app_name}, store_settings: most_recent_aggregation)
64
+ WORKERS_TOTAL = prometheus.gauge(:workers_total, docstring: 'Total resque workers', labels: %i(type name), preset_labels: {type:'resque', name: ZuoraConnect::Telegraf.app_name}, store_settings: most_recent_aggregation)
65
+ WORKERS_ACTIVE = prometheus.gauge(:workers_active, docstring: 'Active resque workers', labels: %i(type name), preset_labels: {type:'resque', name: ZuoraConnect::Telegraf.app_name}, store_settings: most_recent_aggregation)
66
+ JOBS_FAILED = prometheus.gauge(:jobs_failed, docstring: 'Failed resque jobs', labels: %i(type name), preset_labels: {type:'resque', name: ZuoraConnect::Telegraf.app_name}, store_settings: most_recent_aggregation)
67
+ JOBS_PENDING = prometheus.gauge(:jobs_pending, docstring: 'Pending resque jobs', labels: %i(type name), preset_labels: {type:'resque', name: ZuoraConnect::Telegraf.app_name}, store_settings: most_recent_aggregation)
37
68
  end
38
69
 
70
+ if defined?(Unicorn) && Unicorn.respond_to?(:listener_names)
71
+ UNICORN_KILLS = prometheus.gauge(
72
+ :unicorn_kills,
73
+ docstring: 'Unicorn Kills',
74
+ labels: %i(type name),
75
+ preset_labels: {type:'Unicorn-Killer', name: ZuoraConnect::Telegraf.app_name},
76
+ store_settings: sum_aggregation
77
+ )
78
+
79
+ ZuoraConnect::AppInstanceBase.unicorn_listener_stats.each do |key, _|
80
+ gauge_name = "unicorn_#{key}".gsub(/[^a-zA-Z0-9_]/, '_')
81
+ gauge = prometheus.gauge(
82
+ gauge_name.to_sym,
83
+ docstring: 'Unicorn Stats',
84
+ labels: %i(type name),
85
+ preset_labels: { type: 'unicorn', name: ZuoraConnect::Telegraf.app_name },
86
+ store_settings: most_recent_aggregation
87
+ )
88
+ Prometheus.const_set(
89
+ gauge_name.upcase,
90
+ gauge
91
+ )
92
+ end
93
+ end
39
94
  end
40
95
  end
@@ -5,6 +5,20 @@ if defined?(Resque::Worker)
5
5
  Resque::Job.send(:include, Resque::SelfLookup)
6
6
  end
7
7
 
8
+ if defined?(Resque::Job) && defined?(Prometheus)
9
+ module ResquePrometheusExtensions
10
+ EXPORTER = Prometheus::ResqueExporter.new
11
+ def perform
12
+ super
13
+ EXPORTER.export
14
+ end
15
+ end
16
+
17
+ class Resque::Job
18
+ prepend ResquePrometheusExtensions
19
+ end
20
+ end
21
+
8
22
  Resque.module_eval do
9
23
  # Returns a hash, mapping queue names to queue sizes
10
24
  def queue_sizes
@@ -3,7 +3,35 @@ if defined?(Unicorn::WorkerKiller)
3
3
  self.singleton_class.send(:alias_method, :kill_self_old, :kill_self)
4
4
  def self.kill_self(logger, start_time)
5
5
  self.kill_self_old(logger, start_time)
6
- ZuoraConnect::AppInstance.write_to_telegraf(direction: 'Unicorn-Killer', tags: {app_instance: 0}, values: {kill: 1})
6
+ if defined?(Prometheus)
7
+ Prometheus::UNICORN_KILLS.set(1)
8
+ else
9
+ ZuoraConnect::AppInstance.write_to_telegraf(direction: 'Unicorn-Killer', tags: {app_instance: 0}, values: {kill: 1})
10
+ end
7
11
  end
8
12
  end
13
+ end
14
+
15
+ if defined?(Unicorn::HttpServer) && defined?(Prometheus)
16
+ module HttpServerExtensions
17
+ def kill_worker(signal, wpid)
18
+ Prometheus::UNICORN_KILLS.increment
19
+ super
20
+ end
21
+ end
22
+
23
+ module WorkerExtensions
24
+ def soft_kill(sig)
25
+ Prometheus::UNICORN_KILLS.increment
26
+ super
27
+ end
28
+ end
29
+
30
+ class Unicorn::HttpServer
31
+ prepend HttpServerExtensions
32
+ end
33
+
34
+ class Unicorn::Worker
35
+ prepend WorkerExtensions
36
+ end
9
37
  end
@@ -5,6 +5,7 @@ ZuoraConnect::Engine.routes.draw do
5
5
 
6
6
  if ENV['PROVISION_USER'].present? && ENV['PROVISION_SECRET'].present?
7
7
  post '/provision' => 'static#provision'
8
+ get '/instance/:id/user' => 'static#instance_user'
8
9
  end
9
10
 
10
11
  namespace :api do
@@ -7,7 +7,7 @@ module ZuoraConnect
7
7
  def call(env)
8
8
  begin
9
9
  @app.call(env)
10
- rescue ActionDispatch::ParamsParser::ParseError => error
10
+ rescue DynamicRailsError => error
11
11
  if env['HTTP_ACCEPT'] =~ /application\/json/ || env['CONTENT_TYPE'] =~ /application\/json/
12
12
  return [
13
13
  400, { "Content-Type" => "application/json" },
@@ -18,5 +18,16 @@ module ZuoraConnect
18
18
  end
19
19
  end
20
20
  end
21
+
22
+ # Note(hartley): remove once the minimum supported version of Rails is 5.2
23
+ class DynamicRailsError < StandardError
24
+ def self.===(exception)
25
+ if Rails.version >= "5.2"
26
+ exception.is_a?(ActionDispatch::Http::Parameters::ParseError)
27
+ else
28
+ exception.is_a?(ActionDispatch::ParamsParser::ParseError)
29
+ end
30
+ end
31
+ end
21
32
  end
22
- end
33
+ end
@@ -64,6 +64,22 @@ module ZuoraConnect
64
64
  #Remove bad headers
65
65
  @bad_headers.each { |header| env.delete(header) }
66
66
 
67
+ if defined?(Prometheus) && env['PATH_INFO'] == '/connect/internal/metrics'
68
+ # Prometheus Stuff
69
+ metrics = ZuoraConnect::AppInstance.get_metrics('stats')
70
+ redis_up = metrics.present? && metrics.dig(:Resque, :Workers_Total).present? ? 1 : 0
71
+ Prometheus::REDIS_CONNECTION.set(redis_up)
72
+
73
+ process_prometheus_metric(metrics: metrics)
74
+
75
+ if defined?(Unicorn) && Unicorn.respond_to?(:listener_names)
76
+ ZuoraConnect::AppInstanceBase.unicorn_listener_stats.each do |key, value|
77
+ gauge = Prometheus.const_get("unicorn_#{key}".gsub(/[^a-zA-Z0-9_]/, '_').upcase)
78
+ gauge.set(value) if gauge.present?
79
+ end
80
+ end
81
+ end
82
+
67
83
  #Thread.current[:appinstance] = nil
68
84
  start_time = Time.now
69
85
  begin
@@ -77,35 +93,6 @@ module ZuoraConnect
77
93
  ZuoraConnect::AppInstanceBase.write_to_telegraf(direction: 'request-inbound-assets', tags: tags, values: values)
78
94
  end
79
95
 
80
- if defined? Prometheus
81
- #Prometheus Stuff
82
- if env['PATH_INFO'] == '/connect/internal/metrics'
83
-
84
- #Do something before each scrape
85
- if defined? Resque.redis
86
- begin
87
-
88
- Resque.redis.ping
89
-
90
- Prometheus::REDIS_CONNECTION.set({connection:'redis',name: ZuoraConnect::Telegraf.app_name},1)
91
- Prometheus::FINISHED_JOBS.set({type:'resque',name: ZuoraConnect::Telegraf.app_name},Resque.info[:processed])
92
- Prometheus::PENDING_JOBS.set({type:'resque',name: ZuoraConnect::Telegraf.app_name},Resque.info[:pending])
93
- Prometheus::ACTIVE_WORKERS.set({type:'resque',name: ZuoraConnect::Telegraf.app_name},Resque.info[:working])
94
- Prometheus::WORKERS.set({type:'resque',name: ZuoraConnect::Telegraf.app_name},Resque.info[:workers])
95
- Prometheus::FAILED_JOBS.set({type:'resque',name: ZuoraConnect::Telegraf.app_name},Resque.info[:failed])
96
-
97
- rescue Redis::CannotConnectError
98
- Prometheus::REDIS_CONNECTION.set({connection:'redis',name: ZuoraConnect::Telegraf.app_name},0)
99
- end
100
-
101
- if ZuoraConnect.configuration.custom_prometheus_update_block != nil
102
- ZuoraConnect.configuration.custom_prometheus_update_block.call()
103
- end
104
- end
105
-
106
- end
107
- end
108
-
109
96
  # Uncomment following block of code for handling engine requests/requests without controller
110
97
  # else
111
98
  # # Handling requests which do not have controllers (engines)
@@ -119,10 +106,10 @@ module ZuoraConnect
119
106
  content_type = @headers['Content-Type'].split(';')[0] if @headers['Content-Type']
120
107
  content_type = content_type.gsub('text/javascript', 'application/javascript')
121
108
  tags = {status: @status, content_type: content_type}
122
-
109
+
123
110
  tags = tags.merge({controller: 'ActionController'})
124
111
  tags = tags.merge({action: 'RoutingError' }) if @status == 404
125
-
112
+
126
113
  values = {response_time: ((Time.now - start_time)*1000).round(2) }
127
114
 
128
115
  ZuoraConnect::AppInstanceBase.write_to_telegraf(direction: :inbound, tags: tags, values: values)
@@ -133,5 +120,32 @@ module ZuoraConnect
133
120
  [@status, @headers, @response]
134
121
  end
135
122
  end
123
+
124
+ def process_prometheus_metric(type: 'none', metrics: {})
125
+ return if metrics.blank?
126
+
127
+ prometheus = Prometheus::Client.registry
128
+ most_recent_aggregation = {}
129
+ if Prometheus::Client.config.data_store.is_a?(Prometheus::Client::DataStores::DirectFileStore)
130
+ most_recent_aggregation[:aggregation] = :most_recent
131
+ end
132
+ metrics.each do |key, value|
133
+ next if %w[app_name url].include?(key.to_s)
134
+
135
+ if value.is_a?(Hash)
136
+ process_prometheus_metric(type: key.to_s, metrics: value)
137
+ else
138
+ gauge_name = key.to_s.downcase.gsub(/[^a-z0-9_]/, '_')
139
+ gauge = prometheus.get(gauge_name.to_sym) || prometheus.gauge(
140
+ gauge_name.to_sym,
141
+ docstring: "#{key} metric",
142
+ labels: %i(type name),
143
+ preset_labels: { type: type, name: ZuoraConnect::Telegraf.app_name },
144
+ store_settings: most_recent_aggregation
145
+ )
146
+ gauge.set(value)
147
+ end
148
+ end
149
+ end
136
150
  end
137
151
  end
@@ -47,7 +47,7 @@ module Resque
47
47
  raise
48
48
  end
49
49
  rescue PG::ConnectionBad => exception
50
- Rails.logger.info("Bad Connection Restart")
50
+ Rails.logger.warn("Bad Connection Restart", exception)
51
51
  Resque.enqueue_to(self.job.queue, self.job.payload['class'], args)
52
52
  return
53
53
  rescue ZuoraConnect::Exceptions::ConnectCommunicationError => exception
@@ -28,11 +28,6 @@ module ZuoraConnect
28
28
  ::Rails.configuration.action_dispatch.x_sendfile_header = nil
29
29
  end
30
30
 
31
- if defined? Prometheus
32
- initializer "prometheus.configure_rails_initialization" do |app|
33
- app.middleware.use Prometheus::Middleware::Exporter,(options ={:path => '/connect/internal/metrics'})
34
- end
35
- end
36
31
  initializer "zuora_connect.configure_rails_initialization" do |app|
37
32
  app.middleware.insert_after Rack::Sendfile, ZuoraConnect::MetricsMiddleware
38
33
  app.middleware.insert_after ActionDispatch::RequestId, ZuoraConnect::RequestIdMiddleware
@@ -40,6 +35,15 @@ module ZuoraConnect
40
35
  app.config.middleware.use ZuoraConnect::JsonParseErrors
41
36
  end
42
37
 
38
+ if defined? Prometheus
39
+ require 'rack'
40
+ require 'prometheus/middleware/exporter'
41
+ initializer "prometheus.configure_rails_initialization" do |app|
42
+ app.middleware.insert_after ZuoraConnect::MetricsMiddleware, Prometheus::Middleware::Exporter, path: '/connect/internal/metrics'
43
+ app.config.middleware.use Rack::Deflater, if: ->(env, *) { env['PATH_INFO'] == '/connect/internal/metrics' }
44
+ end
45
+ end
46
+
43
47
  # hook to process_action
44
48
  ActiveSupport::Notifications.subscribe('process_action.action_controller', ZuoraConnect::PageRequest.new)
45
49
 
@@ -1,3 +1,3 @@
1
1
  module ZuoraConnect
2
- VERSION = "2.0.59a"
2
+ VERSION = "2.0.60d"
3
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: 2.0.59a
4
+ version: 2.0.60d
5
5
  platform: ruby
6
6
  authors:
7
7
  - Connect Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-26 00:00:00.000000000 Z
11
+ date: 2020-08-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apartment