From 6c7ea1e266ae7bdadbcf642594a15ad435d8590e 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 | 6 +- 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, 199 insertions(+), 1 deletion(-) create mode 100644 app/services/metrics.rb create mode 100644 spec/services/metrics_spec.rb diff --git a/Gemfile b/Gemfile index 8ce29ddf3..f69aa406a 100644 --- a/Gemfile +++ b/Gemfile @@ -62,7 +62,9 @@ gem "lograge" # For distributed tracing and telemetry gem "opentelemetry-exporter-otlp", "~> 0.34.1" +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 80a0b156b..73de40766 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -358,6 +358,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) @@ -512,6 +521,12 @@ GEM opentelemetry-helpers-sql-processor opentelemetry-instrumentation-base (~> 0.25) opentelemetry-semantic_conventions (>= 1.8.0) + opentelemetry-metrics-api (0.6.1) + 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.3) @@ -776,7 +791,9 @@ DEPENDENCIES omniauth-rails_csrf_protection omniauth_govuk_one_login! opentelemetry-exporter-otlp (~> 0.34.1) + 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) @@ -918,6 +935,7 @@ CHECKSUMS opentelemetry-api (1.10.1) sha256=5db9535a8aa9e569808518aa103b2cfac44728672a1799e1dd217fe6d9c5642e opentelemetry-common (0.25.1) sha256=38fe87c751e4e13fcd47a8290b4ad67bbedf76c4ed89aeced5ea5c620e66bfb1 opentelemetry-exporter-otlp (0.34.1) sha256=4697d81e03aff80ea6fbcc741b1c3c700d3624eddea14b453602ee23275450ca + 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 @@ -967,6 +985,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.1) sha256=e1785d317c0b4fe5bb128ab9dd4644486107fe28fba844f5329bf3db90aaa5ec + opentelemetry-metrics-sdk (0.15.0) sha256=611a9cd9f473c461095c7401b8c25f9774160d286a1acbfcbf044da2972aeada opentelemetry-propagator-xray (0.27.0) sha256=753f756c7ad3146f182d428b06041084eecc77769edfd280f365e0bc09b9c4d1 opentelemetry-registry (0.6.3) sha256=568fa8eaea94394f29f4fce3f0339ab10c3bf6d6c8beed6b3cfee6fd37fcc608 opentelemetry-sdk (1.12.0) sha256=a224abe0c59023d41cb7ac1c634d9d28843907efcd045ed1ae320796c48b864b diff --git a/app/services/form_submission_service.rb b/app/services/form_submission_service.rb index 2a9f3103c..0e6815af3 100644 --- a/app/services/form_submission_service.rb +++ b/app/services/form_submission_service.rb @@ -105,7 +105,7 @@ def resolve_submission_job_class(delivery_configuration) end def create_submission_record - Submission.create!( + submission = Submission.create!( reference: submission_reference, form_id: form.id, answers: current_context.answers, @@ -115,6 +115,10 @@ def create_submission_record submission_locale:, created_at: timestamp, ) + + Metrics.record_submission(form_id: form.id, mode:) + + submission end def enqueue_deliver_submission_job(job_class, submission, delivery) 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 209172d8e..036755425 100644 --- a/spec/services/form_submission_service_spec.rb +++ b/spec/services/form_submission_service_spec.rb @@ -98,6 +98,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 b6a57f20be7aa146dd6f5189f10e2d7db4a525ed 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 0e6815af3..056c05d5e 100644 --- a/app/services/form_submission_service.rb +++ b/app/services/form_submission_service.rb @@ -116,7 +116,7 @@ def create_submission_record created_at: timestamp, ) - 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 036755425..61bdfd854 100644 --- a/spec/services/form_submission_service_spec.rb +++ b/spec/services/form_submission_service_spec.rb @@ -101,6 +101,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 86564dc2bffa0ca7ecfebb65f69ab7497bc9bbfb 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 | 8 +++----- spec/services/form_submission_service_spec.rb | 12 ++++++++++++ 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/app/services/form_submission_service.rb b/app/services/form_submission_service.rb index 056c05d5e..dd8669106 100644 --- a/app/services/form_submission_service.rb +++ b/app/services/form_submission_service.rb @@ -29,6 +29,8 @@ def submit submission = create_submission_record enqueue_deliveries(submission) + Metrics.record_submission(form_id: form.id, form_name: form.name, mode:) + LogEventService.log_submit( current_context, requested_email_confirmation: requested_confirmation?, @@ -105,7 +107,7 @@ def resolve_submission_job_class(delivery_configuration) end def create_submission_record - submission = Submission.create!( + Submission.create!( reference: submission_reference, form_id: form.id, answers: current_context.answers, @@ -115,10 +117,6 @@ def create_submission_record submission_locale:, created_at: timestamp, ) - - Metrics.record_submission(form_id: form.id, form_name: form.name, mode:) - - submission end def enqueue_deliver_submission_job(job_class, submission, delivery) diff --git a/spec/services/form_submission_service_spec.rb b/spec/services/form_submission_service_spec.rb index 61bdfd854..2fcbbdfa4 100644 --- a/spec/services/form_submission_service_spec.rb +++ b/spec/services/form_submission_service_spec.rb @@ -162,6 +162,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 } @@ -248,6 +254,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 } From 3267314e6a3abc735cc2a279a4abe34c0e505e50 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 3a1dc6174c3e481e8555205b8ac73f9bfab70bd5 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", },