govuk_app_config 9.1.0 → 9.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b294855ddebc514295005646929b0097f632fee29abca5e5bcfcf8762fa6a074
4
- data.tar.gz: 5001db9a6a2ea18b55337fa58ffc43698949201644f0274c337468c0228b7220
3
+ metadata.gz: 91aa874fe05081ba23cdf6d37cb9046b357fe1d20d79ec3c336877a3e75e2edc
4
+ data.tar.gz: eff73c0ebf947cd2adb0c8bd37599c5bae85497db9c3942621b2178465c586de
5
5
  SHA512:
6
- metadata.gz: 5f022124d42f44d65e8b34f47451b2bed770340690529983d9277cf2d5f747d85400b7061048c64e0e9c1b5c040c975b0421bb1143bca052736ffa4e75e6557f
7
- data.tar.gz: 80af52848ba6276c0103bb6f7b32830b5cd4ca8fda42b2e4cb682dbce4ea958fd761c394b5864f3ea450f19e85197ccd0fadbd18c921cfee8783bb196a12a650
6
+ metadata.gz: fcf73e2e1bcf53b466918e89fd23b2083e02dc7d9e8dd4333021db40f46a3d9774d52079c443d204bc00b0d09547e5be83c0f824611f532fc90a786f07cfe8f4
7
+ data.tar.gz: b0ffcd15e23557623c9749eb925ec52ffa867558769da1cb13cd9d52e275e1201576c5c1d040ce9d90b80af5a7848452bd43ffe8d59d328bfdbed4029781f4b4
@@ -20,7 +20,7 @@ jobs:
20
20
  ruby: ['3.0', 3.1, 3.2]
21
21
  runs-on: ubuntu-latest
22
22
  steps:
23
- - uses: actions/checkout@v3
23
+ - uses: actions/checkout@v4
24
24
  with:
25
25
  ref: ${{ inputs.ref || github.ref }}
26
26
  - uses: ruby/setup-ruby@v1
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ # 9.3.0
2
+
3
+ * Get prometheus labels from controller, not params ([#320](https://github.com/alphagov/govuk_app_config/pull/320))
4
+
5
+ # 9.2.0
6
+
7
+ * Default to Prometheus histograms, not summaries ([#318](https://github.com/alphagov/govuk_app_config/pull/318))
8
+
1
9
  # 9.1.0
2
10
 
3
11
  * GovukAppConfig silences OpenTelemetry log output when running a rake task ([#311](https://github.com/alphagov/govuk_app_config/pull/311))
@@ -22,7 +22,7 @@ Gem::Specification.new do |spec|
22
22
 
23
23
  spec.add_dependency "logstasher", "~> 2.1"
24
24
  spec.add_dependency "opentelemetry-exporter-otlp", ">= 0.25", "< 0.27"
25
- spec.add_dependency "opentelemetry-instrumentation-all", ">= 0.39.1", "< 0.41.0"
25
+ spec.add_dependency "opentelemetry-instrumentation-all", ">= 0.39.1", "< 0.51.0"
26
26
  spec.add_dependency "opentelemetry-sdk", "~> 1.2"
27
27
  spec.add_dependency "plek", ">= 4", "< 6"
28
28
  spec.add_dependency "prometheus_exporter", "~> 2.0"
@@ -1,4 +1,46 @@
1
+ require "prometheus_exporter"
2
+ require "prometheus_exporter/metric"
3
+ require "prometheus_exporter/server"
4
+ require "prometheus_exporter/middleware"
5
+
1
6
  module GovukPrometheusExporter
7
+ #
8
+ # See https://github.com/discourse/prometheus_exporter/pull/293
9
+ #
10
+ # RailsMiddleware can be removed and replaced with the default middleware if
11
+ # that PR is merged / released
12
+ #
13
+ class RailsMiddleware < PrometheusExporter::Middleware
14
+ def default_labels(env, _result)
15
+ controller_instance = env["action_controller.instance"]
16
+ action = controller = nil
17
+ if controller_instance
18
+ action = controller_instance.action_name
19
+ controller = controller_instance.controller_name
20
+ elsif (cors = env["rack.cors"]) && cors.respond_to?(:preflight?) && cors.preflight?
21
+ # if the Rack CORS Middleware identifies the request as a preflight request,
22
+ # the stack doesn't get to the point where controllers/actions are defined
23
+ action = "preflight"
24
+ controller = "preflight"
25
+ end
26
+ {
27
+ action: action || "other",
28
+ controller: controller || "other",
29
+ }
30
+ end
31
+ end
32
+
33
+ class SinatraMiddleware < PrometheusExporter::Middleware
34
+ def default_labels(_env, _result)
35
+ # The default prometheus exporter middleware uses the controller and
36
+ # action as labels. These aren't meaningful in Sinatra applications, and
37
+ # other options (such as request.path_info) have potentially very high
38
+ # cardinality. For now, just accept that we can't be more specific than
39
+ # the application / pod and don't provide any other labels
40
+ {}
41
+ end
42
+ end
43
+
2
44
  def self.should_configure
3
45
  # Allow us to force the Prometheus Exporter for persistent Rake tasks...
4
46
  if ENV["GOVUK_PROMETHEUS_EXPORTER"] == "force"
@@ -11,12 +53,14 @@ module GovukPrometheusExporter
11
53
  end
12
54
  end
13
55
 
14
- def self.configure(collectors: [])
56
+ def self.configure(collectors: [], default_aggregation: PrometheusExporter::Metric::Histogram)
15
57
  return unless should_configure
16
58
 
17
- require "prometheus_exporter"
18
- require "prometheus_exporter/server"
19
- require "prometheus_exporter/middleware"
59
+ # PrometheusExporter::Metric::Histogram.DEFAULT_BUCKETS tops out at 10 but
60
+ # we have a few controller actions which are slower than this, so we add a
61
+ # few extra buckets for slower requests
62
+ PrometheusExporter::Metric::Histogram.default_buckets = [0.005, 0.01, 0.025, 0.05, 0.1, 0.25, 0.5, 1, 2.5, 5, 10, 15, 25, 50].freeze
63
+ PrometheusExporter::Metric::Base.default_aggregation = default_aggregation
20
64
 
21
65
  if defined?(Sidekiq)
22
66
  Sidekiq.configure_server do |config|
@@ -43,11 +87,11 @@ module GovukPrometheusExporter
43
87
  server.start
44
88
 
45
89
  if defined?(Rails)
46
- Rails.application.middleware.unshift PrometheusExporter::Middleware, instrument: :prepend
90
+ Rails.application.middleware.unshift RailsMiddleware, instrument: :prepend
47
91
  end
48
92
 
49
93
  if defined?(Sinatra)
50
- Sinatra.use PrometheusExporter::Middleware
94
+ Sinatra.use SinatraMiddleware
51
95
  end
52
96
  rescue Errno::EADDRINUSE
53
97
  warn "Could not start Prometheus metrics server as address already in use."
@@ -1,3 +1,3 @@
1
1
  module GovukAppConfig
2
- VERSION = "9.1.0".freeze
2
+ VERSION = "9.3.0".freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: govuk_app_config
3
3
  version: !ruby/object:Gem::Version
4
- version: 9.1.0
4
+ version: 9.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - GOV.UK Dev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-09-08 00:00:00.000000000 Z
11
+ date: 2023-10-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: logstasher
@@ -53,7 +53,7 @@ dependencies:
53
53
  version: 0.39.1
54
54
  - - "<"
55
55
  - !ruby/object:Gem::Version
56
- version: 0.41.0
56
+ version: 0.51.0
57
57
  type: :runtime
58
58
  prerelease: false
59
59
  version_requirements: !ruby/object:Gem::Requirement
@@ -63,7 +63,7 @@ dependencies:
63
63
  version: 0.39.1
64
64
  - - "<"
65
65
  - !ruby/object:Gem::Version
66
- version: 0.41.0
66
+ version: 0.51.0
67
67
  - !ruby/object:Gem::Dependency
68
68
  name: opentelemetry-sdk
69
69
  requirement: !ruby/object:Gem::Requirement
@@ -375,7 +375,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
375
375
  - !ruby/object:Gem::Version
376
376
  version: '0'
377
377
  requirements: []
378
- rubygems_version: 3.4.19
378
+ rubygems_version: 3.4.20
379
379
  signing_key:
380
380
  specification_version: 4
381
381
  summary: Base configuration for GOV.UK applications