From 65245ea8e00a8b6da98d7e9b2da771f0c7c6fd47 Mon Sep 17 00:00:00 2001 From: Sean Rankine Date: Thu, 4 Jun 2026 19:36:15 +0100 Subject: [PATCH 1/5] Record submission counts with OpenTelemetry counter Record counts with an incrementing counter at submission creation time, exported via PeriodicMetricReader, instead of periodically aggregating submission counts from the database. --- Gemfile | 2 + Gemfile.lock | 20 +++ app/services/form_submission_service.rb | 2 + app/services/metrics.rb | 33 +++++ config/initializers/opentelemetry.rb | 10 ++ spec/services/form_submission_service_spec.rb | 9 ++ spec/services/metrics_spec.rb | 120 ++++++++++++++++++ 7 files changed, 196 insertions(+) create mode 100644 app/services/metrics.rb create mode 100644 spec/services/metrics_spec.rb diff --git a/Gemfile b/Gemfile index 6e637740a..3d1af98e6 100644 --- a/Gemfile +++ b/Gemfile @@ -62,7 +62,9 @@ gem "lograge" # For distributed tracing and telemetry gem "opentelemetry-exporter-otlp", "~> 0.34.0" +gem "opentelemetry-exporter-otlp-metrics", "~> 0.10.0" gem "opentelemetry-instrumentation-all", "~> 0.94.0" +gem "opentelemetry-metrics-sdk", "~> 0.15.0" gem "opentelemetry-propagator-xray", "~> 0.27.0" gem "opentelemetry-sdk", "~> 1.12" diff --git a/Gemfile.lock b/Gemfile.lock index 40bc45140..b32e88194 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -373,6 +373,15 @@ GEM opentelemetry-common (~> 0.20) opentelemetry-sdk (~> 1.10) opentelemetry-semantic_conventions + opentelemetry-exporter-otlp-metrics (0.10.0) + google-protobuf (>= 3.18, < 5.0) + googleapis-common-protos-types (~> 1.3) + opentelemetry-api (~> 1.1) + opentelemetry-common (~> 0.20) + opentelemetry-metrics-api (~> 0.2) + opentelemetry-metrics-sdk (~> 0.5) + opentelemetry-sdk (~> 1.2) + opentelemetry-semantic_conventions opentelemetry-helpers-mysql (0.6.0) opentelemetry-api (~> 1.7) opentelemetry-common (~> 0.21) @@ -527,6 +536,12 @@ GEM opentelemetry-helpers-sql-processor opentelemetry-instrumentation-base (~> 0.25) opentelemetry-semantic_conventions (>= 1.8.0) + opentelemetry-metrics-api (0.6.0) + opentelemetry-api (~> 1.0) + opentelemetry-metrics-sdk (0.15.0) + opentelemetry-api (~> 1.1) + opentelemetry-metrics-api (~> 0.2) + opentelemetry-sdk (~> 1.2) opentelemetry-propagator-xray (0.27.0) opentelemetry-api (~> 1.7) opentelemetry-registry (0.6.0) @@ -800,7 +815,9 @@ DEPENDENCIES omniauth-rails_csrf_protection omniauth_govuk_one_login! opentelemetry-exporter-otlp (~> 0.34.0) + opentelemetry-exporter-otlp-metrics (~> 0.10.0) opentelemetry-instrumentation-all (~> 0.94.0) + opentelemetry-metrics-sdk (~> 0.15.0) opentelemetry-propagator-xray (~> 0.27.0) opentelemetry-sdk (~> 1.12) pg (~> 1.6) @@ -947,6 +964,7 @@ CHECKSUMS opentelemetry-api (1.10.0) sha256=99ee7c829b18381c31a817ee9bf6a160d737542d99cb8da55d443336d266bfa9 opentelemetry-common (0.25.0) sha256=73915362e58d337fc92acbe1abfdaee1f725442527125fdb2af1420417f1149d opentelemetry-exporter-otlp (0.34.0) sha256=3b3cdf4329ba30f4389d849c7f13b8f9f983ecb4a030031c03997dffae1e2a60 + opentelemetry-exporter-otlp-metrics (0.10.0) sha256=d8cbff9b8a3391eb61486b8be9b6ad74e3b9306a3c60fb4c906b28bc857167c8 opentelemetry-helpers-mysql (0.6.0) sha256=7eeb5e6950c434775a8cf28b5fde4defc12e8b865c86479ce3119fcf593d9337 opentelemetry-helpers-sql (0.4.0) sha256=b10e8c3a2cca28a98af951bbb3e4efdc59e68b25ba0825e055574af543420afb opentelemetry-helpers-sql-processor (0.5.0) sha256=b199241bc9451fcbd9f00b2f454830af19d4ca27c2219ea379c9b0d53cd0e0f1 @@ -996,6 +1014,8 @@ CHECKSUMS opentelemetry-instrumentation-sidekiq (0.29.0) sha256=b1d2a0cb9041a5e14239fe7c94d99e3dd07f870e2759460ab63592d7cdd8aadc opentelemetry-instrumentation-sinatra (0.30.0) sha256=b67301153420f43264a0c68cdb3ca5bd77467cf5054e57b83a2bf891aaaa0361 opentelemetry-instrumentation-trilogy (0.69.0) sha256=0676dd720eeab284abfa52f273967442156fcac7084a1e1411373cf14ec026ad + opentelemetry-metrics-api (0.6.0) sha256=b9300821680a1370684098cb030c18423dd55909ea0206faadfa7bc47362df87 + opentelemetry-metrics-sdk (0.15.0) sha256=611a9cd9f473c461095c7401b8c25f9774160d286a1acbfcbf044da2972aeada opentelemetry-propagator-xray (0.27.0) sha256=753f756c7ad3146f182d428b06041084eecc77769edfd280f365e0bc09b9c4d1 opentelemetry-registry (0.6.0) sha256=5d3ed32ab9eee0fbdb30d4f0d0bb61ad11a4040b267b475ae815b80a8498a728 opentelemetry-sdk (1.12.0) sha256=a224abe0c59023d41cb7ac1c634d9d28843907efcd045ed1ae320796c48b864b diff --git a/app/services/form_submission_service.rb b/app/services/form_submission_service.rb index c2b15b6b1..a2d1a6b94 100644 --- a/app/services/form_submission_service.rb +++ b/app/services/form_submission_service.rb @@ -104,6 +104,8 @@ def create_submission_record submission.deliveries.create!(delivery_schedule: :immediate) + Metrics.record_submission(form_id: form.id, mode:) + submission end diff --git a/app/services/metrics.rb b/app/services/metrics.rb new file mode 100644 index 000000000..57e1560c2 --- /dev/null +++ b/app/services/metrics.rb @@ -0,0 +1,33 @@ +module Metrics + METER_NAME = "forms-runner".freeze + METER_VERSION = "1.0".freeze + + class << self + def record_submission(form_id:, mode:) + submission_counter.add( + 1, + attributes: { + "Environment" => Settings.forms_env.downcase, + "FormId" => form_id.to_s, + "Mode" => mode.to_s, + }, + ) + rescue StandardError => e + Sentry.capture_exception(e) + end + + private + + def submission_counter + @submission_counter ||= meter.create_counter( + "SubmissionCount", + unit: "1", + description: "Number of form submissions", + ) + end + + def meter + @meter ||= OpenTelemetry.meter_provider.meter(METER_NAME, version: METER_VERSION) + end + end +end diff --git a/config/initializers/opentelemetry.rb b/config/initializers/opentelemetry.rb index eda8872b3..c68fb935c 100644 --- a/config/initializers/opentelemetry.rb +++ b/config/initializers/opentelemetry.rb @@ -1,5 +1,7 @@ require "opentelemetry/sdk" require "opentelemetry/instrumentation/all" +require "opentelemetry-metrics-sdk" +require "opentelemetry-exporter-otlp-metrics" return unless ENV["ENABLE_OTEL"] == "true" @@ -12,6 +14,14 @@ c.id_generator = OpenTelemetry::Propagator::XRay::IDGenerator end + unless ENV.fetch("OTEL_METRICS_EXPORTER", "otlp") == "none" + c.add_metric_reader( + OpenTelemetry::SDK::Metrics::Export::PeriodicMetricReader.new( + exporter: OpenTelemetry::Exporter::OTLP::Metrics::MetricsExporter.new, + ), + ) + end + # Disable logging for Rake tasks to avoid cluttering output c.logger = Logger.new(File::NULL) if Rails.const_defined?(:Rake) && Rake.application.top_level_tasks.any? end diff --git a/spec/services/form_submission_service_spec.rb b/spec/services/form_submission_service_spec.rb index 158bdb406..79777243a 100644 --- a/spec/services/form_submission_service_spec.rb +++ b/spec/services/form_submission_service_spec.rb @@ -102,6 +102,15 @@ expect(log_line["submission_reference"]).to eq(reference) end + it "records a submission count metric" do + expect(Metrics).to receive(:record_submission).with( + form_id: form.id, + mode:, + ) + + service.submit + end + shared_examples "logging" do it "logs submission" do allow(LogEventService).to receive(:log_submit).once diff --git a/spec/services/metrics_spec.rb b/spec/services/metrics_spec.rb new file mode 100644 index 000000000..654aa2f53 --- /dev/null +++ b/spec/services/metrics_spec.rb @@ -0,0 +1,120 @@ +require "rails_helper" +require "opentelemetry-metrics-sdk" + +describe Metrics do + let(:meter_provider) { OpenTelemetry::SDK::Metrics::MeterProvider.new } + let(:metric_exporter) { OpenTelemetry::SDK::Metrics::Export::InMemoryMetricPullExporter.new } + let(:forms_env) { "test" } + let(:form_id) { 42 } + let(:mode) { Mode.new("form") } + + before do + allow(Settings).to receive(:forms_env).and_return(forms_env) + allow(OpenTelemetry).to receive(:meter_provider).and_return(meter_provider) + meter_provider.add_metric_reader(metric_exporter) + reset_memoized_instruments + end + + after do + reset_memoized_instruments + end + + describe ".record_submission" do + it "records a submission count metric" do + described_class.record_submission(form_id:, mode:) + + expect(exported_data_points).to contain_exactly( + have_attributes( + value: 1, + attributes: { + "Environment" => forms_env, + "FormId" => form_id.to_s, + "Mode" => "form", + }, + ), + ) + end + + context "when mode is preview" do + let(:mode) { Mode.new("preview-live") } + + it "records a metric with the preview mode label" do + described_class.record_submission(form_id:, mode:) + + expect(exported_data_points).to contain_exactly( + have_attributes( + value: 1, + attributes: include("Mode" => "preview-live"), + ), + ) + end + end + + it "accumulates counts for the same form" do + 2.times { described_class.record_submission(form_id:, mode:) } + + expect(exported_data_points).to contain_exactly( + have_attributes( + value: 2, + attributes: include("FormId" => form_id.to_s), + ), + ) + end + + it "records separate counts per form" do + described_class.record_submission(form_id:, mode:) + described_class.record_submission(form_id: 99, mode:) + + expect(exported_data_points).to contain_exactly( + have_attributes( + value: 1, + attributes: include("FormId" => form_id.to_s), + ), + have_attributes( + value: 1, + attributes: include("FormId" => "99"), + ), + ) + end + + it "records separate counts per mode" do + described_class.record_submission(form_id:, mode:) + described_class.record_submission(form_id:, mode: Mode.new("preview-draft")) + + expect(exported_data_points).to contain_exactly( + have_attributes( + value: 1, + attributes: include("Mode" => "form"), + ), + have_attributes( + value: 1, + attributes: include("Mode" => "preview-draft"), + ), + ) + end + + context "when recording the metric raises an error" do + let(:error) { StandardError.new("metrics unavailable") } + + before do + allow(described_class).to receive(:submission_counter).and_raise(error) + end + + it "captures the exception in Sentry and does not raise" do + expect(Sentry).to receive(:capture_exception).with(error) + + expect { described_class.record_submission(form_id:, mode:) }.not_to raise_error + end + end + end + + def exported_data_points + metric_exporter.pull + metric_exporter.metric_snapshots.flat_map(&:data_points) + end + + def reset_memoized_instruments + described_class.instance_variable_set(:@meter, nil) + described_class.instance_variable_set(:@submission_counter, nil) + end +end From a55d38d1e84cda36880476234c99e9aca5c2152b Mon Sep 17 00:00:00 2001 From: Sean Rankine Date: Mon, 6 Jul 2026 11:10:04 +0100 Subject: [PATCH 2/5] Label test form submissions with test mode Submissions to forms used for automated platform testing (capybara, smoke test and s3 test forms) were counted with their real mode, mixing them in with genuine user submissions. Label them as "test" so dashboards can exclude them without name-based filters. --- app/services/form_submission_service.rb | 2 +- app/services/metrics.rb | 17 +++++++- spec/services/form_submission_service_spec.rb | 1 + spec/services/metrics_spec.rb | 40 +++++++++++++++---- 4 files changed, 49 insertions(+), 11 deletions(-) diff --git a/app/services/form_submission_service.rb b/app/services/form_submission_service.rb index a2d1a6b94..5e3d6b488 100644 --- a/app/services/form_submission_service.rb +++ b/app/services/form_submission_service.rb @@ -104,7 +104,7 @@ def create_submission_record submission.deliveries.create!(delivery_schedule: :immediate) - Metrics.record_submission(form_id: form.id, mode:) + Metrics.record_submission(form_id: form.id, form_name: form.name, mode:) submission end diff --git a/app/services/metrics.rb b/app/services/metrics.rb index 57e1560c2..6d63dfabd 100644 --- a/app/services/metrics.rb +++ b/app/services/metrics.rb @@ -2,14 +2,17 @@ module Metrics METER_NAME = "forms-runner".freeze METER_VERSION = "1.0".freeze + # Forms with these names are used for automated testing of the platform + TEST_FORM_NAME_PATTERNS = [/\Acapybara/, /smoke/, /\As3/].freeze + class << self - def record_submission(form_id:, mode:) + def record_submission(form_id:, form_name:, mode:) submission_counter.add( 1, attributes: { "Environment" => Settings.forms_env.downcase, "FormId" => form_id.to_s, - "Mode" => mode.to_s, + "Mode" => mode_label(form_name:, mode:), }, ) rescue StandardError => e @@ -18,6 +21,16 @@ def record_submission(form_id:, mode:) private + def mode_label(form_name:, mode:) + return "test" if test_form?(form_name) + + mode.to_s + end + + def test_form?(form_name) + TEST_FORM_NAME_PATTERNS.any? { |pattern| pattern.match?(form_name.to_s) } + end + def submission_counter @submission_counter ||= meter.create_counter( "SubmissionCount", diff --git a/spec/services/form_submission_service_spec.rb b/spec/services/form_submission_service_spec.rb index 79777243a..c616dfc32 100644 --- a/spec/services/form_submission_service_spec.rb +++ b/spec/services/form_submission_service_spec.rb @@ -105,6 +105,7 @@ it "records a submission count metric" do expect(Metrics).to receive(:record_submission).with( form_id: form.id, + form_name: form.name, mode:, ) diff --git a/spec/services/metrics_spec.rb b/spec/services/metrics_spec.rb index 654aa2f53..b567ce5a9 100644 --- a/spec/services/metrics_spec.rb +++ b/spec/services/metrics_spec.rb @@ -6,6 +6,7 @@ let(:metric_exporter) { OpenTelemetry::SDK::Metrics::Export::InMemoryMetricPullExporter.new } let(:forms_env) { "test" } let(:form_id) { 42 } + let(:form_name) { "Apply for a juggling licence" } let(:mode) { Mode.new("form") } before do @@ -21,7 +22,7 @@ describe ".record_submission" do it "records a submission count metric" do - described_class.record_submission(form_id:, mode:) + described_class.record_submission(form_id:, form_name:, mode:) expect(exported_data_points).to contain_exactly( have_attributes( @@ -39,7 +40,7 @@ let(:mode) { Mode.new("preview-live") } it "records a metric with the preview mode label" do - described_class.record_submission(form_id:, mode:) + described_class.record_submission(form_id:, form_name:, mode:) expect(exported_data_points).to contain_exactly( have_attributes( @@ -51,7 +52,7 @@ end it "accumulates counts for the same form" do - 2.times { described_class.record_submission(form_id:, mode:) } + 2.times { described_class.record_submission(form_id:, form_name:, mode:) } expect(exported_data_points).to contain_exactly( have_attributes( @@ -62,8 +63,8 @@ end it "records separate counts per form" do - described_class.record_submission(form_id:, mode:) - described_class.record_submission(form_id: 99, mode:) + described_class.record_submission(form_id:, form_name:, mode:) + described_class.record_submission(form_id: 99, form_name:, mode:) expect(exported_data_points).to contain_exactly( have_attributes( @@ -78,8 +79,8 @@ end it "records separate counts per mode" do - described_class.record_submission(form_id:, mode:) - described_class.record_submission(form_id:, mode: Mode.new("preview-draft")) + described_class.record_submission(form_id:, form_name:, mode:) + described_class.record_submission(form_id:, form_name:, mode: Mode.new("preview-draft")) expect(exported_data_points).to contain_exactly( have_attributes( @@ -93,6 +94,29 @@ ) end + context "when the form is a test form" do + [ + "capybara test form", + "Automated smoke test form", + "s3 submission test form", + ].each do |test_form_name| + context "with the name #{test_form_name.inspect}" do + let(:form_name) { test_form_name } + + it "records a metric with the test mode label" do + described_class.record_submission(form_id:, form_name:, mode:) + + expect(exported_data_points).to contain_exactly( + have_attributes( + value: 1, + attributes: include("Mode" => "test"), + ), + ) + end + end + end + end + context "when recording the metric raises an error" do let(:error) { StandardError.new("metrics unavailable") } @@ -103,7 +127,7 @@ it "captures the exception in Sentry and does not raise" do expect(Sentry).to receive(:capture_exception).with(error) - expect { described_class.record_submission(form_id:, mode:) }.not_to raise_error + expect { described_class.record_submission(form_id:, form_name:, mode:) }.not_to raise_error end end end From a6e6a4f05968e4dbf2d2be2bfda21a23fa2cb6b7 Mon Sep 17 00:00:00 2001 From: Sean Rankine Date: Mon, 6 Jul 2026 11:44:47 +0100 Subject: [PATCH 3/5] Record submission metric after successful enqueue The submission count metric was incremented when the submission record was created, before the delivery job was enqueued. If enqueueing failed the submission was destroyed but the counter had already been bumped, inflating the KPI. Move the metric call to after the enqueue block so it only counts submissions that were successfully queued for delivery. --- app/services/form_submission_service.rb | 4 ++-- spec/services/form_submission_service_spec.rb | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/app/services/form_submission_service.rb b/app/services/form_submission_service.rb index 5e3d6b488..2a3be19ce 100644 --- a/app/services/form_submission_service.rb +++ b/app/services/form_submission_service.rb @@ -104,8 +104,6 @@ def create_submission_record submission.deliveries.create!(delivery_schedule: :immediate) - Metrics.record_submission(form_id: form.id, form_name: form.name, mode:) - submission end @@ -120,6 +118,8 @@ def enqueue_deliver_submission_job(job_class) raise StandardError, "Failed to enqueue submission for reference #{submission_reference}#{message_suffix}" end + Metrics.record_submission(form_id: form.id, form_name: form.name, mode:) + submission end diff --git a/spec/services/form_submission_service_spec.rb b/spec/services/form_submission_service_spec.rb index c616dfc32..a795eedb2 100644 --- a/spec/services/form_submission_service_spec.rb +++ b/spec/services/form_submission_service_spec.rb @@ -163,6 +163,12 @@ allow(SendS3SubmissionJob).to receive(:perform_later).and_yield(instance_double(SendS3SubmissionJob, successfully_enqueued?: false, enqueue_error:)) end + it "does not record a submission count metric" do + expect(Metrics).not_to receive(:record_submission) + + expect { service.submit }.to raise_error(StandardError) + end + context "and there is no enqueue error" do it "raises an error" do expect { service.submit }.to not_change(Submission, :count).and raise_error(StandardError, "Failed to enqueue submission for reference #{reference}") @@ -236,6 +242,12 @@ allow(SendSubmissionJob).to receive(:perform_later).and_yield(instance_double(SendSubmissionJob, successfully_enqueued?: false, enqueue_error:)) end + it "does not record a submission count metric" do + expect(Metrics).not_to receive(:record_submission) + + expect { service.submit }.to raise_error(StandardError) + end + context "and there is no enqueue error" do it "raises an error" do expect { service.submit }.to not_change(Submission, :count).and(not_change(Delivery, :count)).and raise_error(StandardError, "Failed to enqueue submission for reference #{reference}") From f5ae741dd7d1e650042f2007048a8f43eaab2d48 Mon Sep 17 00:00:00 2001 From: Sean Rankine Date: Mon, 6 Jul 2026 13:48:58 +0100 Subject: [PATCH 4/5] Rename submission metric to follow OTel conventions Use OpenTelemetry semantic conventions for the counter name, unit and attribute keys so the metric is consistent with other instrumented services and standard dashboards. --- app/services/metrics.rb | 12 ++++++------ spec/services/metrics_spec.rb | 20 ++++++++++---------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/app/services/metrics.rb b/app/services/metrics.rb index 6d63dfabd..fd9fe373e 100644 --- a/app/services/metrics.rb +++ b/app/services/metrics.rb @@ -10,9 +10,9 @@ def record_submission(form_id:, form_name:, mode:) submission_counter.add( 1, attributes: { - "Environment" => Settings.forms_env.downcase, - "FormId" => form_id.to_s, - "Mode" => mode_label(form_name:, mode:), + "deployment.environment.name" => Settings.forms_env.downcase, + "form.id" => form_id.to_s, + "form.submission.mode" => mode_label(form_name:, mode:), }, ) rescue StandardError => e @@ -33,9 +33,9 @@ def test_form?(form_name) def submission_counter @submission_counter ||= meter.create_counter( - "SubmissionCount", - unit: "1", - description: "Number of form submissions", + "form.submission.created", + unit: "{submission}", + description: "The number of form submissions queued for delivery", ) end diff --git a/spec/services/metrics_spec.rb b/spec/services/metrics_spec.rb index b567ce5a9..7740adc3e 100644 --- a/spec/services/metrics_spec.rb +++ b/spec/services/metrics_spec.rb @@ -28,9 +28,9 @@ have_attributes( value: 1, attributes: { - "Environment" => forms_env, - "FormId" => form_id.to_s, - "Mode" => "form", + "deployment.environment.name" => forms_env, + "form.id" => form_id.to_s, + "form.submission.mode" => "form", }, ), ) @@ -45,7 +45,7 @@ expect(exported_data_points).to contain_exactly( have_attributes( value: 1, - attributes: include("Mode" => "preview-live"), + attributes: include("form.submission.mode" => "preview-live"), ), ) end @@ -57,7 +57,7 @@ expect(exported_data_points).to contain_exactly( have_attributes( value: 2, - attributes: include("FormId" => form_id.to_s), + attributes: include("form.id" => form_id.to_s), ), ) end @@ -69,11 +69,11 @@ expect(exported_data_points).to contain_exactly( have_attributes( value: 1, - attributes: include("FormId" => form_id.to_s), + attributes: include("form.id" => form_id.to_s), ), have_attributes( value: 1, - attributes: include("FormId" => "99"), + attributes: include("form.id" => "99"), ), ) end @@ -85,11 +85,11 @@ expect(exported_data_points).to contain_exactly( have_attributes( value: 1, - attributes: include("Mode" => "form"), + attributes: include("form.submission.mode" => "form"), ), have_attributes( value: 1, - attributes: include("Mode" => "preview-draft"), + attributes: include("form.submission.mode" => "preview-draft"), ), ) end @@ -109,7 +109,7 @@ expect(exported_data_points).to contain_exactly( have_attributes( value: 1, - attributes: include("Mode" => "test"), + attributes: include("form.submission.mode" => "test"), ), ) end From 760424f106db68f0e733d14eadfbf3c192afac8f Mon Sep 17 00:00:00 2001 From: Sean Rankine Date: Mon, 6 Jul 2026 14:40:10 +0100 Subject: [PATCH 5/5] Remove environment label from submission metric The deployment.environment.name attribute is upserted by the OTel collector, so we don't need to manually add an environment label to every metric we record. --- app/services/metrics.rb | 1 - spec/services/metrics_spec.rb | 3 --- 2 files changed, 4 deletions(-) diff --git a/app/services/metrics.rb b/app/services/metrics.rb index fd9fe373e..f6a0f2d6e 100644 --- a/app/services/metrics.rb +++ b/app/services/metrics.rb @@ -10,7 +10,6 @@ def record_submission(form_id:, form_name:, mode:) submission_counter.add( 1, attributes: { - "deployment.environment.name" => Settings.forms_env.downcase, "form.id" => form_id.to_s, "form.submission.mode" => mode_label(form_name:, mode:), }, diff --git a/spec/services/metrics_spec.rb b/spec/services/metrics_spec.rb index 7740adc3e..cc010df1e 100644 --- a/spec/services/metrics_spec.rb +++ b/spec/services/metrics_spec.rb @@ -4,13 +4,11 @@ describe Metrics do let(:meter_provider) { OpenTelemetry::SDK::Metrics::MeterProvider.new } let(:metric_exporter) { OpenTelemetry::SDK::Metrics::Export::InMemoryMetricPullExporter.new } - let(:forms_env) { "test" } let(:form_id) { 42 } let(:form_name) { "Apply for a juggling licence" } let(:mode) { Mode.new("form") } before do - allow(Settings).to receive(:forms_env).and_return(forms_env) allow(OpenTelemetry).to receive(:meter_provider).and_return(meter_provider) meter_provider.add_metric_reader(metric_exporter) reset_memoized_instruments @@ -28,7 +26,6 @@ have_attributes( value: 1, attributes: { - "deployment.environment.name" => forms_env, "form.id" => form_id.to_s, "form.submission.mode" => "form", },