From 55a7587af46c0ddd95bf0ee38f44f12a9f564b3e Mon Sep 17 00:00:00 2001 From: Anusha Palliyil Date: Tue, 12 Dec 2023 14:36:23 -0500 Subject: [PATCH 01/15] Changed calls to MetricsService or metrics_service --- app/controllers/concerns/collect_data_dog_metrics.rb | 12 ++++++------ app/controllers/health_checks_controller.rb | 2 +- app/jobs/application_job.rb | 8 ++++---- .../middleware/job_data_dog_metric_middleware.rb | 4 ++-- config.ru | 8 ++++---- 5 files changed, 17 insertions(+), 17 deletions(-) diff --git a/app/controllers/concerns/collect_data_dog_metrics.rb b/app/controllers/concerns/collect_data_dog_metrics.rb index 196ab16ea..e0edfeb8c 100644 --- a/app/controllers/concerns/collect_data_dog_metrics.rb +++ b/app/controllers/concerns/collect_data_dog_metrics.rb @@ -1,6 +1,6 @@ # frozen_string_literal: true -module CollectDataDogMetrics +module CollectMetricsServiceMetrics extend ActiveSupport::Concern included do @@ -18,13 +18,13 @@ def collect_postgres_metrics dead = conns.count { |c| c.in_use? && !c.owner.alive? } idle = conns.count { |c| !c.in_use? } - emit_datadog_point("postgres", "active", active) - emit_datadog_point("postgres", "dead", dead) - emit_datadog_point("postgres", "idle", idle) + emit_metrics_service_point("postgres", "active", active) + emit_metrics_service_point("postgres", "dead", dead) + emit_metrics_service_point("postgres", "idle", idle) end - def emit_datadog_point(db_name, type, count) - DataDogService.emit_gauge( + def emit_metrics_service_point(db_name, type, count) + MetricsService.emit_gauge( metric_group: "database", metric_name: "#{type}_connections", metric_value: count, diff --git a/app/controllers/health_checks_controller.rb b/app/controllers/health_checks_controller.rb index 75a9aa368..2cff080db 100644 --- a/app/controllers/health_checks_controller.rb +++ b/app/controllers/health_checks_controller.rb @@ -1,5 +1,5 @@ class HealthChecksController < ApplicationController - include CollectDataDogMetrics + include CollectMetricsServiceMetrics skip_before_action :authenticate skip_before_action :check_out_of_service newrelic_ignore_apdex diff --git a/app/jobs/application_job.rb b/app/jobs/application_job.rb index e15677958..04d48c483 100644 --- a/app/jobs/application_job.rb +++ b/app/jobs/application_job.rb @@ -8,18 +8,18 @@ class ApplicationJob < ActiveJob::Base job.start_time = Time.zone.now end - def datadog_report_runtime(metric_group_name:) - DataDogService.record_runtime( + def metrics_service_report_runtime(metric_group_name:) + MetricsService.record_runtime( app_name: "efolder_job", metric_group: metric_group_name, start_time: start_time ) end - def datadog_report_time_segment(segment:, start_time:) + def metrics_service_report_time_segment(segment:, start_time:) job_duration_seconds = Time.zone.now - start_time - DataDogService.emit_gauge( + MetricsService.emit_gauge( app_name: "efolder_job_segment", metric_group: segment, metric_name: "runtime", diff --git a/app/jobs/middleware/job_data_dog_metric_middleware.rb b/app/jobs/middleware/job_data_dog_metric_middleware.rb index 4b83c372c..696efe34a 100644 --- a/app/jobs/middleware/job_data_dog_metric_middleware.rb +++ b/app/jobs/middleware/job_data_dog_metric_middleware.rb @@ -1,4 +1,4 @@ -class JobDataDogMetricMiddleware +class JobMetricsServiceMetricMiddleware def call(_worker, queue, _msg, body) job_class = body["job_class"] @@ -7,7 +7,7 @@ def call(_worker, queue, _msg, body) end begin - DataDogService.emit_gauge( + MetricsService.emit_gauge( metric_group: "job", metric_name: "elapsed_time", metric_value: stopwatch.real, diff --git a/config.ru b/config.ru index dab907baa..cae43449e 100644 --- a/config.ru +++ b/config.ru @@ -24,8 +24,8 @@ module PumaThreadLogger waiting = @waiting } - emit_datadog_point("idle", waiting) - emit_datadog_point("active", thread_count - waiting) + emit_metrics_service_point("idle", waiting) + emit_metrics_service_point("active", thread_count - waiting) # For some reason, even a single Puma server (not clustered) has two booted ThreadPools. # One of them is empty, and the other is actually doing work. @@ -49,8 +49,8 @@ module PumaThreadLogger super *args end - def emit_datadog_point(type, count) - DataDogService.emit_gauge( + def emit_metrics_service_point(type, count) + MetricsService.emit_gauge( metric_group: "puma", metric_name: "#{type}_threads", metric_value: count, From 9cbcefdd8ac675312d288d38930781958494379f Mon Sep 17 00:00:00 2001 From: Anusha Palliyil Date: Wed, 13 Dec 2023 10:48:01 -0500 Subject: [PATCH 02/15] change datadog --- app/services/data_dog_service.rb | 2 +- app/services/metrics_service.rb | 10 +++++----- config/initializers/shoryuken.rb | 2 +- spec/features/backend_error_flows_spec.rb | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/app/services/data_dog_service.rb b/app/services/data_dog_service.rb index 17a557141..b53c1e344 100644 --- a/app/services/data_dog_service.rb +++ b/app/services/data_dog_service.rb @@ -1,6 +1,6 @@ require "datadog/statsd" -class DataDogService +class MetricsService @statsd = Datadog::Statsd.new @host = `curl http://instance-data/latest/meta-data/instance-id --silent || echo "not-ec2"`.strip diff --git a/app/services/metrics_service.rb b/app/services/metrics_service.rb index c79995854..8c814d79a 100644 --- a/app/services/metrics_service.rb +++ b/app/services/metrics_service.rb @@ -15,7 +15,7 @@ def self.record(description, service: nil, name: "unknown") if service && Rails.env.production? latency = stopwatch.real - DataDogService.emit_gauge( + MetricsService.emit_gauge( metric_group: "service", metric_name: "request_latency", metric_value: latency, @@ -30,7 +30,7 @@ def self.record(description, service: nil, name: "unknown") Rails.logger.info("FINISHED #{description}: #{stopwatch}") return_value rescue StandardError - increment_datadog_counter("request_error", service, name) if service + increment_metrics_service_counter("request_error", service, name) if service Rails.logger.info("RESCUED #{description}") @@ -38,12 +38,12 @@ def self.record(description, service: nil, name: "unknown") # This is just to capture the metric. raise ensure - increment_datadog_counter("request_attempt", service, name) if service + increment_metrics_service_counter("request_attempt", service, name) if service end # rubocop:enable Metrics/MethodLength - private_class_method def self.increment_datadog_counter(metric_name, service, endpoint_name) - DataDogService.increment_counter( + private_class_method def self.increment_metrics_service_counter(metric_name, service, endpoint_name) + MetricsService.increment_counter( metric_group: "service", metric_name: metric_name, app_name: @app, diff --git a/config/initializers/shoryuken.rb b/config/initializers/shoryuken.rb index b39645a80..d72dad313 100644 --- a/config/initializers/shoryuken.rb +++ b/config/initializers/shoryuken.rb @@ -23,6 +23,6 @@ # register all shoryuken middleware config.server_middleware do |chain| - chain.add JobDataDogMetricMiddleware + chain.add JobMetricsServiceMetricMiddleware end end diff --git a/spec/features/backend_error_flows_spec.rb b/spec/features/backend_error_flows_spec.rb index 91af392dc..2d0b9b82d 100644 --- a/spec/features/backend_error_flows_spec.rb +++ b/spec/features/backend_error_flows_spec.rb @@ -39,7 +39,7 @@ end before do - allow(DataDogService).to receive(:emit_gauge) { true } # mock DD during tests + allow(MetricsService).to receive(:emit_gauge) { true } # mock DD during tests @user = User.create(css_id: "123123", station_id: "116") From 3f56b051b1fbd81704ec45faceb87576fba32928 Mon Sep 17 00:00:00 2001 From: Anusha Palliyil Date: Wed, 20 Dec 2023 11:44:21 -0500 Subject: [PATCH 03/15] ref updated --- Gemfile | 2 +- Gemfile.lock | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/Gemfile b/Gemfile index 568209be5..1dd4cf4a0 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "fb6fa9658825c143eb8d202b87128f34ca7e210b" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "7ac6202b4f84a0639892f128d6d01444468b9ca4" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index fbc6b08d4..6d5a924e7 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,10 +20,10 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: fb6fa9658825c143eb8d202b87128f34ca7e210b - ref: fb6fa9658825c143eb8d202b87128f34ca7e210b + revision: 7ac6202b4f84a0639892f128d6d01444468b9ca4 + ref: 7ac6202b4f84a0639892f128d6d01444468b9ca4 specs: - caseflow (0.4.6) + caseflow (0.4.8) aws-sdk (~> 2.10) bourbon (= 4.2.7) d3-rails @@ -188,7 +188,7 @@ GEM crack (0.4.5) rexml crass (1.0.6) - d3-rails (5.9.2) + d3-rails (7.8.5) railties (>= 3.1) database_cleaner (1.8.5) date (3.3.4) From 17677aba701dbaf889a350776d788effcc5bace7 Mon Sep 17 00:00:00 2001 From: Anusha Palliyil Date: Thu, 28 Dec 2023 15:45:11 -0500 Subject: [PATCH 04/15] removed datadog --- ...g_metrics.rb => collect_custom_metrics.rb} | 18 +++--- app/services/metrics_service.rb | 57 ------------------- config/initializers/metric_attributes.rb | 3 + config/initializers/metrics_service.rb | 3 + 4 files changed, 15 insertions(+), 66 deletions(-) rename app/controllers/concerns/{collect_data_dog_metrics.rb => collect_custom_metrics.rb} (52%) delete mode 100644 app/services/metrics_service.rb create mode 100644 config/initializers/metric_attributes.rb create mode 100644 config/initializers/metrics_service.rb diff --git a/app/controllers/concerns/collect_data_dog_metrics.rb b/app/controllers/concerns/collect_custom_metrics.rb similarity index 52% rename from app/controllers/concerns/collect_data_dog_metrics.rb rename to app/controllers/concerns/collect_custom_metrics.rb index e0edfeb8c..7a7206f78 100644 --- a/app/controllers/concerns/collect_data_dog_metrics.rb +++ b/app/controllers/concerns/collect_custom_metrics.rb @@ -1,26 +1,26 @@ # frozen_string_literal: true -module CollectMetricsServiceMetrics +module CollectCustomMetrics extend ActiveSupport::Concern included do - before_action :collect_data_dog_metrics + before_action :collect_custom_metrics end - def collect_data_dog_metrics + def collect_custom_metrics collect_postgres_metrics end def collect_postgres_metrics conns = ActiveRecord::Base.connection_pool.connections - active = conns.count { |c| c.in_use? && c.owner.alive? } - dead = conns.count { |c| c.in_use? && !c.owner.alive? } - idle = conns.count { |c| !c.in_use? } + active = conns.count { |conn| conn.in_use? && conn.owner.alive? } + dead = conns.count { |conn| conn.in_use? && !conn.owner.alive? } + idle = conns.count { |conn| !conn.in_use? } - emit_metrics_service_point("postgres", "active", active) - emit_metrics_service_point("postgres", "dead", dead) - emit_metrics_service_point("postgres", "idle", idle) + emit_metrics_point("postgres", "active", active) + emit_metrics_point("postgres", "dead", dead) + emit_metrics_point("postgres", "idle", idle) end def emit_metrics_service_point(db_name, type, count) diff --git a/app/services/metrics_service.rb b/app/services/metrics_service.rb deleted file mode 100644 index 8c814d79a..000000000 --- a/app/services/metrics_service.rb +++ /dev/null @@ -1,57 +0,0 @@ -require "benchmark" - -# see https://dropwizard.github.io/metrics/3.1.0/getting-started/ for abstractions on metric types -# :nocov: -class MetricsService - # rubocop:disable Metrics/MethodLength - @app = "eFolder" - def self.record(description, service: nil, name: "unknown") - return_value = nil - - Rails.logger.info("STARTED #{description}") - stopwatch = Benchmark.measure do - return_value = yield - end - - if service && Rails.env.production? - latency = stopwatch.real - MetricsService.emit_gauge( - metric_group: "service", - metric_name: "request_latency", - metric_value: latency, - app_name: @app, - attrs: { - service: service, - endpoint: name - } - ) - end - - Rails.logger.info("FINISHED #{description}: #{stopwatch}") - return_value - rescue StandardError - increment_metrics_service_counter("request_error", service, name) if service - - Rails.logger.info("RESCUED #{description}") - - # Re-raise the same error. We don't want to interfere at all in normal error handling. - # This is just to capture the metric. - raise - ensure - increment_metrics_service_counter("request_attempt", service, name) if service - end - # rubocop:enable Metrics/MethodLength - - private_class_method def self.increment_metrics_service_counter(metric_name, service, endpoint_name) - MetricsService.increment_counter( - metric_group: "service", - metric_name: metric_name, - app_name: @app, - attrs: { - service: service, - endpoint: endpoint_name - } - ) - end -end -# :nocov: diff --git a/config/initializers/metric_attributes.rb b/config/initializers/metric_attributes.rb new file mode 100644 index 000000000..909e167c4 --- /dev/null +++ b/config/initializers/metric_attributes.rb @@ -0,0 +1,3 @@ +require 'caseflow' + +MetricAttributes = Caseflow::MetricAttributes \ No newline at end of file diff --git a/config/initializers/metrics_service.rb b/config/initializers/metrics_service.rb new file mode 100644 index 000000000..c222bcba8 --- /dev/null +++ b/config/initializers/metrics_service.rb @@ -0,0 +1,3 @@ +require 'caseflow' + +MetricsService = Caseflow::MetricsService From 2d4d9f254e756abc77aea56818367a26f5974f24 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Fri, 8 Mar 2024 14:45:34 -0500 Subject: [PATCH 05/15] update caseflow-commons version --- Gemfile | 2 +- Gemfile.lock | 66 ++++++++++++++++++++++++++++------------------------ 2 files changed, 37 insertions(+), 31 deletions(-) diff --git a/Gemfile b/Gemfile index 1dd4cf4a0..97839dfce 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "7ac6202b4f84a0639892f128d6d01444468b9ca4" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "a77244b75e5333f0616e5a335386f934204d1d9d" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index 34881eb9e..a4e2c80cf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,8 +20,8 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: 7ac6202b4f84a0639892f128d6d01444468b9ca4 - ref: 7ac6202b4f84a0639892f128d6d01444468b9ca4 + revision: a77244b75e5333f0616e5a335386f934204d1d9d + ref: a77244b75e5333f0616e5a335386f934204d1d9d specs: caseflow (0.4.8) aws-sdk (~> 2.10) @@ -141,7 +141,7 @@ GEM nokogiri arel (9.0.0) ast (2.4.1) - aws-eventstream (1.1.0) + aws-eventstream (1.3.0) aws-sdk (2.11.632) aws-sdk-resources (= 2.11.632) aws-sdk-core (2.11.632) @@ -149,7 +149,7 @@ GEM jmespath (~> 1.0) aws-sdk-resources (2.11.632) aws-sdk-core (= 2.11.632) - aws-sigv4 (1.2.2) + aws-sigv4 (1.8.0) aws-eventstream (~> 1, >= 1.0.2) bootsnap (1.16.0) msgpack (~> 1.2) @@ -184,7 +184,8 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.2.2) + concurrent-ruby (1.2.3) + connection_pool (2.4.1) crack (0.4.5) rexml crass (1.0.6) @@ -210,7 +211,7 @@ GEM multipart-post (>= 1.2, < 3) ruby2_keywords faraday-net_http (1.0.0) - ffi (1.14.2) + ffi (1.16.3) globalid (1.1.0) activesupport (>= 5.0) gyoku (1.3.1) @@ -224,13 +225,13 @@ GEM httpi (2.5.0) rack socksify - i18n (1.14.1) + i18n (1.14.4) concurrent-ruby (~> 1.0) jaro_winkler (1.5.4) jbuilder (2.10.1) activesupport (>= 5.0.0) - jmespath (1.4.0) - jquery-rails (4.4.0) + jmespath (1.6.2) + jquery-rails (4.6.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) @@ -244,7 +245,7 @@ GEM logstasher (2.1.5) activesupport (>= 5.2) request_store - loofah (2.21.3) + loofah (2.22.0) crass (~> 1.0.2) nokogiri (>= 1.12.0) macaddr (1.7.2) @@ -256,7 +257,7 @@ GEM net-smtp makara (0.4.1) activerecord (>= 3.0.0) - marcel (1.0.2) + marcel (1.0.4) matrix (0.4.2) method_source (1.0.0) mime-types (3.3.1) @@ -265,7 +266,7 @@ GEM mini_magick (4.11.0) mini_mime (1.1.5) mini_portile2 (2.8.5) - minitest (5.20.0) + minitest (5.22.2) moment_timezone-rails (0.5.14) momentjs-rails (~> 2.15.1) momentjs-rails (2.15.1) @@ -277,17 +278,17 @@ GEM ruby2_keywords (~> 0.0.1) neat (4.0.0) thor (~> 0.19) - net-imap (0.4.5) + net-imap (0.4.10) date net-protocol net-pop (0.1.2) net-protocol net-protocol (0.2.2) timeout - net-smtp (0.4.0) + net-smtp (0.4.0.1) net-protocol newrelic_rpm (6.14.0) - nio4r (2.5.9) + nio4r (2.7.0) nokogiri (1.15.5) mini_portile2 (~> 2.8.2) racc (~> 1.4) @@ -314,11 +315,13 @@ GEM puma (5.6.4) nio4r (~> 2.0) racc (1.7.3) - rack (2.2.8) + rack (2.2.8.1) rack-cors (1.1.1) rack (>= 2.0.0) rack-protection (2.2.0) rack + rack-session (1.0.2) + rack (< 3) rack-test (2.1.0) rack (>= 1.3) rails (5.2.8.1) @@ -349,23 +352,26 @@ GEM rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) rainbow (3.0.0) - rake (13.0.6) - rb-fsevent (0.10.4) + rake (13.1.0) + rb-fsevent (0.11.2) rb-inotify (0.10.1) ffi (~> 1.0) rb-readline (0.5.5) - redis (4.2.5) - redis-actionpack (5.2.0) - actionpack (>= 5, < 7) - redis-rack (>= 2.1.0, < 3) + redis (5.1.0) + redis-client (>= 0.17.0) + redis-actionpack (5.4.0) + actionpack (>= 5, < 8) + redis-rack (>= 2.1.0, < 4) redis-store (>= 1.1.0, < 2) - redis-activesupport (5.2.0) - activesupport (>= 3, < 7) + redis-activesupport (5.3.0) + activesupport (>= 3, < 8) redis-store (>= 1.3, < 2) - redis-namespace (1.8.0) - redis (>= 3.0.4) - redis-rack (2.1.3) - rack (>= 2.0.8, < 3) + redis-client (0.21.0) + connection_pool + redis-namespace (1.11.0) + redis (>= 4) + redis-rack (3.0.0) + rack-session (>= 0.2.0) redis-store (>= 1.2, < 2) redis-rails (5.0.2) redis-actionpack (>= 5.0, < 6) @@ -373,8 +379,8 @@ GEM redis-store (>= 1.2, < 2) redis-semaphore (0.3.1) redis - redis-store (1.9.0) - redis (>= 4, < 5) + redis-store (1.10.0) + redis (>= 4, < 6) ref (2.0.0) regexp_parser (2.8.3) request_store (1.5.0) From 5f89bf1b9ab9f21933adebe03df3cea22d5e3a63 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Fri, 8 Mar 2024 14:47:38 -0500 Subject: [PATCH 06/15] update caseflow-commons version --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 97839dfce..a02e6dc06 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "a77244b75e5333f0616e5a335386f934204d1d9d" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "949a76f3bec687c156a68165cf3bb9ff6ae8674d" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index a4e2c80cf..8f2328425 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,8 +20,8 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: a77244b75e5333f0616e5a335386f934204d1d9d - ref: a77244b75e5333f0616e5a335386f934204d1d9d + revision: 949a76f3bec687c156a68165cf3bb9ff6ae8674d + ref: 949a76f3bec687c156a68165cf3bb9ff6ae8674d specs: caseflow (0.4.8) aws-sdk (~> 2.10) From a028b556e12d391a915e1876cd008f9d7165afc4 Mon Sep 17 00:00:00 2001 From: Anusha Palliyil Date: Wed, 13 Mar 2024 12:15:24 -0400 Subject: [PATCH 07/15] caseflow-commons ref change & data_dog_service file removed --- Gemfile | 2 +- Gemfile.lock | 4 ++-- app/services/data_dog_service.rb | 35 -------------------------------- 3 files changed, 3 insertions(+), 38 deletions(-) delete mode 100644 app/services/data_dog_service.rb diff --git a/Gemfile b/Gemfile index a02e6dc06..3f5ce51a8 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "949a76f3bec687c156a68165cf3bb9ff6ae8674d" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "4ccbaf9f0bfa0d234f446a2b09b8f9c11ea654d0" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index 8f2328425..f6e1552a6 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,8 +20,8 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: 949a76f3bec687c156a68165cf3bb9ff6ae8674d - ref: 949a76f3bec687c156a68165cf3bb9ff6ae8674d + revision: 4ccbaf9f0bfa0d234f446a2b09b8f9c11ea654d0 + ref: 4ccbaf9f0bfa0d234f446a2b09b8f9c11ea654d0 specs: caseflow (0.4.8) aws-sdk (~> 2.10) diff --git a/app/services/data_dog_service.rb b/app/services/data_dog_service.rb deleted file mode 100644 index b53c1e344..000000000 --- a/app/services/data_dog_service.rb +++ /dev/null @@ -1,35 +0,0 @@ -require "datadog/statsd" - -class MetricsService - @statsd = Datadog::Statsd.new - @host = `curl http://instance-data/latest/meta-data/instance-id --silent || echo "not-ec2"`.strip - - def self.increment_counter(metric_group:, metric_name:, app_name:, attrs: {}) - tags = get_tags(app_name, attrs) - stat_name = get_stat_name(metric_group, metric_name) - @statsd.increment(stat_name, tags: tags) - end - - def self.emit_gauge(metric_group:, metric_name:, metric_value:, app_name:, attrs: {}) - tags = get_tags(app_name, attrs) - stat_name = get_stat_name(metric_group, metric_name) - @statsd.gauge(stat_name, metric_value, tags: tags) - end - - private_class_method def self.get_stat_name(metric_group, metric_name) - "dsva-appeals.#{metric_group}.#{metric_name}" - end - - private_class_method def self.get_tags(app_name, attrs) - extra_tags = attrs.reduce([]) do |tags, (key, val)| - tags + ["#{key}:#{val}"] - end - [ - "app:#{app_name}", - "env:#{Rails.current_env}", - # I am not sure that dogstatsd lets us set the hostname. - # https://github.com/DataDog/dogstatsd-ruby/issues/66 - "hostname:#{@host}" - ] + extra_tags - end -end From 352bd6283142f52e37c4ede01e3ebde1c8e629a2 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:03:31 -0400 Subject: [PATCH 08/15] Revert "update caseflow-commons version" This reverts commit 2d4d9f254e756abc77aea56818367a26f5974f24. --- Gemfile | 2 +- Gemfile.lock | 66 ++++++++++++++++++++++++---------------------------- 2 files changed, 31 insertions(+), 37 deletions(-) diff --git a/Gemfile b/Gemfile index 3f5ce51a8..1dd4cf4a0 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "4ccbaf9f0bfa0d234f446a2b09b8f9c11ea654d0" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "7ac6202b4f84a0639892f128d6d01444468b9ca4" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index f6e1552a6..34881eb9e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,8 +20,8 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: 4ccbaf9f0bfa0d234f446a2b09b8f9c11ea654d0 - ref: 4ccbaf9f0bfa0d234f446a2b09b8f9c11ea654d0 + revision: 7ac6202b4f84a0639892f128d6d01444468b9ca4 + ref: 7ac6202b4f84a0639892f128d6d01444468b9ca4 specs: caseflow (0.4.8) aws-sdk (~> 2.10) @@ -141,7 +141,7 @@ GEM nokogiri arel (9.0.0) ast (2.4.1) - aws-eventstream (1.3.0) + aws-eventstream (1.1.0) aws-sdk (2.11.632) aws-sdk-resources (= 2.11.632) aws-sdk-core (2.11.632) @@ -149,7 +149,7 @@ GEM jmespath (~> 1.0) aws-sdk-resources (2.11.632) aws-sdk-core (= 2.11.632) - aws-sigv4 (1.8.0) + aws-sigv4 (1.2.2) aws-eventstream (~> 1, >= 1.0.2) bootsnap (1.16.0) msgpack (~> 1.2) @@ -184,8 +184,7 @@ GEM coffee-script-source execjs coffee-script-source (1.12.2) - concurrent-ruby (1.2.3) - connection_pool (2.4.1) + concurrent-ruby (1.2.2) crack (0.4.5) rexml crass (1.0.6) @@ -211,7 +210,7 @@ GEM multipart-post (>= 1.2, < 3) ruby2_keywords faraday-net_http (1.0.0) - ffi (1.16.3) + ffi (1.14.2) globalid (1.1.0) activesupport (>= 5.0) gyoku (1.3.1) @@ -225,13 +224,13 @@ GEM httpi (2.5.0) rack socksify - i18n (1.14.4) + i18n (1.14.1) concurrent-ruby (~> 1.0) jaro_winkler (1.5.4) jbuilder (2.10.1) activesupport (>= 5.0.0) - jmespath (1.6.2) - jquery-rails (4.6.0) + jmespath (1.4.0) + jquery-rails (4.4.0) rails-dom-testing (>= 1, < 3) railties (>= 4.2.0) thor (>= 0.14, < 2.0) @@ -245,7 +244,7 @@ GEM logstasher (2.1.5) activesupport (>= 5.2) request_store - loofah (2.22.0) + loofah (2.21.3) crass (~> 1.0.2) nokogiri (>= 1.12.0) macaddr (1.7.2) @@ -257,7 +256,7 @@ GEM net-smtp makara (0.4.1) activerecord (>= 3.0.0) - marcel (1.0.4) + marcel (1.0.2) matrix (0.4.2) method_source (1.0.0) mime-types (3.3.1) @@ -266,7 +265,7 @@ GEM mini_magick (4.11.0) mini_mime (1.1.5) mini_portile2 (2.8.5) - minitest (5.22.2) + minitest (5.20.0) moment_timezone-rails (0.5.14) momentjs-rails (~> 2.15.1) momentjs-rails (2.15.1) @@ -278,17 +277,17 @@ GEM ruby2_keywords (~> 0.0.1) neat (4.0.0) thor (~> 0.19) - net-imap (0.4.10) + net-imap (0.4.5) date net-protocol net-pop (0.1.2) net-protocol net-protocol (0.2.2) timeout - net-smtp (0.4.0.1) + net-smtp (0.4.0) net-protocol newrelic_rpm (6.14.0) - nio4r (2.7.0) + nio4r (2.5.9) nokogiri (1.15.5) mini_portile2 (~> 2.8.2) racc (~> 1.4) @@ -315,13 +314,11 @@ GEM puma (5.6.4) nio4r (~> 2.0) racc (1.7.3) - rack (2.2.8.1) + rack (2.2.8) rack-cors (1.1.1) rack (>= 2.0.0) rack-protection (2.2.0) rack - rack-session (1.0.2) - rack (< 3) rack-test (2.1.0) rack (>= 1.3) rails (5.2.8.1) @@ -352,26 +349,23 @@ GEM rake (>= 0.8.7) thor (>= 0.19.0, < 2.0) rainbow (3.0.0) - rake (13.1.0) - rb-fsevent (0.11.2) + rake (13.0.6) + rb-fsevent (0.10.4) rb-inotify (0.10.1) ffi (~> 1.0) rb-readline (0.5.5) - redis (5.1.0) - redis-client (>= 0.17.0) - redis-actionpack (5.4.0) - actionpack (>= 5, < 8) - redis-rack (>= 2.1.0, < 4) + redis (4.2.5) + redis-actionpack (5.2.0) + actionpack (>= 5, < 7) + redis-rack (>= 2.1.0, < 3) redis-store (>= 1.1.0, < 2) - redis-activesupport (5.3.0) - activesupport (>= 3, < 8) + redis-activesupport (5.2.0) + activesupport (>= 3, < 7) redis-store (>= 1.3, < 2) - redis-client (0.21.0) - connection_pool - redis-namespace (1.11.0) - redis (>= 4) - redis-rack (3.0.0) - rack-session (>= 0.2.0) + redis-namespace (1.8.0) + redis (>= 3.0.4) + redis-rack (2.1.3) + rack (>= 2.0.8, < 3) redis-store (>= 1.2, < 2) redis-rails (5.0.2) redis-actionpack (>= 5.0, < 6) @@ -379,8 +373,8 @@ GEM redis-store (>= 1.2, < 2) redis-semaphore (0.3.1) redis - redis-store (1.10.0) - redis (>= 4, < 6) + redis-store (1.9.0) + redis (>= 4, < 5) ref (2.0.0) regexp_parser (2.8.3) request_store (1.5.0) From 4ae2c54f0796675348195dbcebd9d16f72b7cdd1 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:07:17 -0400 Subject: [PATCH 09/15] update commons version with --conservative --- Gemfile | 2 +- Gemfile.lock | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/Gemfile b/Gemfile index 1dd4cf4a0..8981b1bb5 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "7ac6202b4f84a0639892f128d6d01444468b9ca4" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "dea6b30780bf44f6a146b69be961ede825ac02bd" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index 34881eb9e..b668f7812 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,8 +20,8 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: 7ac6202b4f84a0639892f128d6d01444468b9ca4 - ref: 7ac6202b4f84a0639892f128d6d01444468b9ca4 + revision: dea6b30780bf44f6a146b69be961ede825ac02bd + ref: dea6b30780bf44f6a146b69be961ede825ac02bd specs: caseflow (0.4.8) aws-sdk (~> 2.10) From cbf83ec3f7950bcdf4c66ede2593868afc0c958b Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:10:15 -0400 Subject: [PATCH 10/15] rename concern --- app/controllers/health_checks_controller.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/controllers/health_checks_controller.rb b/app/controllers/health_checks_controller.rb index 2cff080db..d2fb2a49f 100644 --- a/app/controllers/health_checks_controller.rb +++ b/app/controllers/health_checks_controller.rb @@ -1,5 +1,5 @@ class HealthChecksController < ApplicationController - include CollectMetricsServiceMetrics + include CollectCustomMetrics skip_before_action :authenticate skip_before_action :check_out_of_service newrelic_ignore_apdex From e246f90b9f59220bff858abdacfc43ae5cbb2089 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Thu, 14 Mar 2024 11:16:56 -0400 Subject: [PATCH 11/15] replace datadog reference --- app/controllers/concerns/collect_custom_metrics.rb | 6 +++--- config/initializers/shoryuken.rb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/app/controllers/concerns/collect_custom_metrics.rb b/app/controllers/concerns/collect_custom_metrics.rb index 7a7206f78..5f1ae095c 100644 --- a/app/controllers/concerns/collect_custom_metrics.rb +++ b/app/controllers/concerns/collect_custom_metrics.rb @@ -18,9 +18,9 @@ def collect_postgres_metrics dead = conns.count { |conn| conn.in_use? && !conn.owner.alive? } idle = conns.count { |conn| !conn.in_use? } - emit_metrics_point("postgres", "active", active) - emit_metrics_point("postgres", "dead", dead) - emit_metrics_point("postgres", "idle", idle) + emit_metrics_service_point("postgres", "active", active) + emit_metrics_service_point("postgres", "dead", dead) + emit_metrics_service_point("postgres", "idle", idle) end def emit_metrics_service_point(db_name, type, count) diff --git a/config/initializers/shoryuken.rb b/config/initializers/shoryuken.rb index d72dad313..b508b0c3c 100644 --- a/config/initializers/shoryuken.rb +++ b/config/initializers/shoryuken.rb @@ -1,4 +1,4 @@ -require "#{Rails.root}/app/jobs/middleware/job_data_dog_metric_middleware" +require "#{Rails.root}/app/jobs/middleware/job_metrics_service_metric_middleware" # set up default exponential backoff parameters ActiveJob::QueueAdapters::ShoryukenAdapter::JobWrapper From 4ac5bdd549ea04274cd4d3320f4f489714861061 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Thu, 14 Mar 2024 15:07:23 -0400 Subject: [PATCH 12/15] include statsd library --- Gemfile | 2 +- Gemfile.lock | 4 ++-- ...middleware.rb => job_metrics_service_metric_middleware.rb} | 0 3 files changed, 3 insertions(+), 3 deletions(-) rename app/jobs/middleware/{job_data_dog_metric_middleware.rb => job_metrics_service_metric_middleware.rb} (100%) diff --git a/Gemfile b/Gemfile index 8981b1bb5..14bf1b724 100644 --- a/Gemfile +++ b/Gemfile @@ -12,7 +12,7 @@ gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" gem "distribute_reads" -gem "dogstatsd-ruby" +gem "statsd-instrument" gem "httpclient" gem "jbuilder", "~> 2.0" gem "jquery-rails", ">= 4.3.4" diff --git a/Gemfile.lock b/Gemfile.lock index b668f7812..11701cfeb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -198,7 +198,6 @@ GEM distribute_reads (0.3.3) makara (>= 0.3) docile (1.3.4) - dogstatsd-ruby (4.8.2) dotenv (2.7.6) dotenv-rails (2.7.6) dotenv (= 2.7.6) @@ -470,6 +469,7 @@ GEM actionpack (>= 5.2) activesupport (>= 5.2) sprockets (>= 3.0.0) + statsd-instrument (3.7.0) systemu (2.6.5) therubyracer (0.12.3) libv8 (~> 3.16.14.15) @@ -543,7 +543,6 @@ DEPENDENCIES connect_vva! database_cleaner distribute_reads - dogstatsd-ruby dotenv-rails httpclient jbuilder (~> 2.0) @@ -584,6 +583,7 @@ DEPENDENCIES sinatra (= 2.2.0) single_cov sniffybara! + statsd-instrument therubyracer timecop turbolinks diff --git a/app/jobs/middleware/job_data_dog_metric_middleware.rb b/app/jobs/middleware/job_metrics_service_metric_middleware.rb similarity index 100% rename from app/jobs/middleware/job_data_dog_metric_middleware.rb rename to app/jobs/middleware/job_metrics_service_metric_middleware.rb From 2d22d34890256f57f72a74b0f964e05c48536bb9 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Fri, 15 Mar 2024 10:54:40 -0400 Subject: [PATCH 13/15] update caseflow commons version --- Gemfile | 2 +- Gemfile.lock | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/Gemfile b/Gemfile index 14bf1b724..6cac5a7f4 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "dea6b30780bf44f6a146b69be961ede825ac02bd" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "01dd8c52352ea558504af7da4e7ea73e8e2c4065" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index 11701cfeb..23f5041cf 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,13 +20,12 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: dea6b30780bf44f6a146b69be961ede825ac02bd - ref: dea6b30780bf44f6a146b69be961ede825ac02bd + revision: 01dd8c52352ea558504af7da4e7ea73e8e2c4065 + ref: 01dd8c52352ea558504af7da4e7ea73e8e2c4065 specs: caseflow (0.4.8) aws-sdk (~> 2.10) bourbon (= 4.2.7) - d3-rails jquery-rails momentjs-rails neat @@ -188,8 +187,6 @@ GEM crack (0.4.5) rexml crass (1.0.6) - d3-rails (7.8.5) - railties (>= 3.1) database_cleaner (1.8.5) date (3.3.4) delayed_job (4.1.9) From 84603fbfd13a22c37b3d652f9e24def0e801956b Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Fri, 15 Mar 2024 17:28:14 -0400 Subject: [PATCH 14/15] add datadog back in --- Gemfile | 1 + Gemfile.lock | 2 ++ 2 files changed, 3 insertions(+) diff --git a/Gemfile b/Gemfile index 6cac5a7f4..fb84f1c7c 100644 --- a/Gemfile +++ b/Gemfile @@ -12,6 +12,7 @@ gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" gem "distribute_reads" +gem "dogstatsd-ruby" gem "statsd-instrument" gem "httpclient" gem "jbuilder", "~> 2.0" diff --git a/Gemfile.lock b/Gemfile.lock index 23f5041cf..10e7f65bb 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -195,6 +195,7 @@ GEM distribute_reads (0.3.3) makara (>= 0.3) docile (1.3.4) + dogstatsd-ruby (4.8.2) dotenv (2.7.6) dotenv-rails (2.7.6) dotenv (= 2.7.6) @@ -540,6 +541,7 @@ DEPENDENCIES connect_vva! database_cleaner distribute_reads + dogstatsd-ruby dotenv-rails httpclient jbuilder (~> 2.0) From bff2669ec4691003a20549b8f2ae458a84c231f7 Mon Sep 17 00:00:00 2001 From: mikefinneran <110622959+mikefinneran@users.noreply.github.com> Date: Mon, 18 Mar 2024 23:36:23 -0400 Subject: [PATCH 15/15] refactor metrics service out of caseflow commons --- Gemfile | 2 +- Gemfile.lock | 9 +- app/services/metrics_service.rb | 124 +++++++++++++++++++++++ config/environments/development.rb | 3 + config/environments/test.rb | 3 + config/initializers/metric_attributes.rb | 3 - config/initializers/metrics_service.rb | 3 - 7 files changed, 137 insertions(+), 10 deletions(-) create mode 100644 app/services/metrics_service.rb delete mode 100644 config/initializers/metric_attributes.rb delete mode 100644 config/initializers/metrics_service.rb diff --git a/Gemfile b/Gemfile index fb84f1c7c..35421cbc9 100644 --- a/Gemfile +++ b/Gemfile @@ -7,7 +7,7 @@ gem "activejob_dj_overrides" gem "aws-sdk", "~> 2" gem "bgs", git: "https://github.com/department-of-veterans-affairs/ruby-bgs.git", ref: "98547485d863f2f0d3bb9a1b9ec92a8fe21ba306" gem "bootsnap", require: false -gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "01dd8c52352ea558504af7da4e7ea73e8e2c4065" +gem "caseflow", git: "https://github.com/department-of-veterans-affairs/caseflow-commons", ref: "fb6fa9658825c143eb8d202b87128f34ca7e210b" gem "coffee-rails", "> 4.1.0" gem "connect_vbms", git: "https://github.com/department-of-veterans-affairs/connect_vbms.git", branch: "master" gem "connect_vva", git: "https://github.com/department-of-veterans-affairs/connect_vva.git", ref: "dfd1aeb2605c1f237f520bcdc41b059202e8944d" diff --git a/Gemfile.lock b/Gemfile.lock index 10e7f65bb..acc04a611 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -20,12 +20,13 @@ GIT GIT remote: https://github.com/department-of-veterans-affairs/caseflow-commons - revision: 01dd8c52352ea558504af7da4e7ea73e8e2c4065 - ref: 01dd8c52352ea558504af7da4e7ea73e8e2c4065 + revision: fb6fa9658825c143eb8d202b87128f34ca7e210b + ref: fb6fa9658825c143eb8d202b87128f34ca7e210b specs: - caseflow (0.4.8) + caseflow (0.4.6) aws-sdk (~> 2.10) bourbon (= 4.2.7) + d3-rails jquery-rails momentjs-rails neat @@ -187,6 +188,8 @@ GEM crack (0.4.5) rexml crass (1.0.6) + d3-rails (5.9.2) + railties (>= 3.1) database_cleaner (1.8.5) date (3.3.4) delayed_job (4.1.9) diff --git a/app/services/metrics_service.rb b/app/services/metrics_service.rb new file mode 100644 index 000000000..03a5719b3 --- /dev/null +++ b/app/services/metrics_service.rb @@ -0,0 +1,124 @@ +# frozen_string_literal: true + +require "benchmark" +require "datadog/statsd" +require "statsd-instrument" + +# see https://dropwizard.github.io/metrics/3.1.0/getting-started/ for abstractions on metric types +class MetricsService + @statsd = Datadog::Statsd.new + + # :reek:LongParameterList + def self.increment_counter(metric_group:, metric_name:, app_name:, attrs: {}, by: 1) + tags = get_tags(app_name, attrs) + stat_name = get_stat_name(metric_group, metric_name) + @statsd.increment(stat_name, tags: tags, by: by) + + # Dynatrace statD implementation + StatsD.increment(stat_name, tags: tags) + end + + def self.record_runtime(metric_group:, app_name:, start_time: Time.zone.now) + metric_name = "runtime" + job_duration_seconds = Time.zone.now - start_time + + emit_gauge( + app_name: app_name, + metric_group: metric_group, + metric_name: metric_name, + metric_value: job_duration_seconds + ) + end + + # :reek:LongParameterList + def self.emit_gauge(metric_group:, metric_name:, metric_value:, app_name:, attrs: {}) + tags = get_tags(app_name, attrs) + stat_name = get_stat_name(metric_group, metric_name) + @statsd.gauge(stat_name, metric_value, tags: tags) + + # Dynatrace statD implementation + StatsD.gauge(stat_name, metric_value, tags: tags) + end + + # :nocov: + # :reek:LongParameterList + def self.histogram(metric_group:, metric_name:, metric_value:, app_name:, attrs: {}) + tags = get_tags(app_name, attrs) + stat_name = get_stat_name(metric_group, metric_name) + @statsd.histogram(stat_name, metric_value, tags: tags) + + # Dynatrace statD implementation + StatsD.histogram(stat_name, metric_value, tags: tags) + end + # :nocov: + + private_class_method def self.get_stat_name(metric_group, metric_name) + "dsva-appeals.#{metric_group}.#{metric_name}" + end + + private_class_method def self.get_tags(app_name, attrs) + extra_tags = attrs.reduce([]) do |tags, (key, val)| + tags + ["#{key}:#{val}"] + end + [ + "app:#{app_name}", + "env:#{Rails.current_env}" + ] + extra_tags + end + + # rubocop:disable Metrics/AbcSize, Metrics/MethodLength + # :reek:LongParameterList + def self.record(description, service: nil, name: "unknown", caller: nil) + return_value = nil + app = RequestStore[:application] || "other" + + Rails.logger.info("STARTED #{description}") + stopwatch = Benchmark.measure do + return_value = yield + end + + if service + latency = stopwatch.real + sent_to_info = { + metric_group: "service", + metric_name: "request_latency", + metric_value: latency, + app_name: app, + attrs: { + service: service ||= app, + endpoint: name, + uuid: SecureRandom.uuid + } + } + MetricsService.emit_gauge(sent_to_info) + end + + Rails.logger.info("FINISHED #{description}: #{stopwatch}") + + return_value + rescue StandardError => error + Rails.logger.error("#{error.message}\n#{error.backtrace.join("\n")}") + Raven.capture_exception(error, extra: { type: "request_error", service: service, name: name, app: app }) + + increment_metrics_service_counter("request_error", service, name, app) if service + + # Re-raise the same error. We don't want to interfere at all in normal error handling. + # This is just to capture the metric. + raise + ensure + increment_metrics_service_counter("request_attempt", service, name, app) if service + end + # rubocop:enable Metrics/AbcSize, Metrics/MethodLength + + private_class_method def self.increment_metrics_service_counter(metric_name, service, endpoint_name, app_name) + increment_counter( + metric_group: "service", + metric_name: metric_name, + app_name: app_name, + attrs: { + service: service, + endpoint: endpoint_name + } + ) + end +end \ No newline at end of file diff --git a/config/environments/development.rb b/config/environments/development.rb index 805361a92..6d347ae2e 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -74,4 +74,7 @@ config.sqs_create_queues = true config.sqs_endpoint = 'http://localhost:4566' + + # Dynatrace variables + ENV["STATSD_ENV"] = "development" end diff --git a/config/environments/test.rb b/config/environments/test.rb index e4170a107..03135b907 100644 --- a/config/environments/test.rb +++ b/config/environments/test.rb @@ -52,4 +52,7 @@ config.s3_enabled = false config.api_key = "token" + + # Dynatrace variables + ENV["STATSD_ENV"] = "test" end diff --git a/config/initializers/metric_attributes.rb b/config/initializers/metric_attributes.rb deleted file mode 100644 index 909e167c4..000000000 --- a/config/initializers/metric_attributes.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'caseflow' - -MetricAttributes = Caseflow::MetricAttributes \ No newline at end of file diff --git a/config/initializers/metrics_service.rb b/config/initializers/metrics_service.rb deleted file mode 100644 index c222bcba8..000000000 --- a/config/initializers/metrics_service.rb +++ /dev/null @@ -1,3 +0,0 @@ -require 'caseflow' - -MetricsService = Caseflow::MetricsService