summaryrefslogtreecommitdiff
path: root/lib/gitlab/metrics/boot_time_tracker.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/metrics/boot_time_tracker.rb')
-rw-r--r--lib/gitlab/metrics/boot_time_tracker.rb34
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/gitlab/metrics/boot_time_tracker.rb b/lib/gitlab/metrics/boot_time_tracker.rb
new file mode 100644
index 00000000000..3e7026b8dea
--- /dev/null
+++ b/lib/gitlab/metrics/boot_time_tracker.rb
@@ -0,0 +1,34 @@
+# frozen_string_literal: true
+
+module Gitlab
+ module Metrics
+ class BootTimeTracker
+ include Singleton
+
+ SUPPORTED_RUNTIMES = [:puma, :sidekiq, :console].freeze
+
+ def startup_time
+ @startup_time || 0
+ end
+
+ def track_boot_time!(logger: Gitlab::AppJsonLogger)
+ return if @startup_time
+
+ runtime = Gitlab::Runtime.safe_identify
+ return unless SUPPORTED_RUNTIMES.include?(runtime)
+
+ @startup_time = Gitlab::Metrics::System.process_runtime_elapsed_seconds
+
+ Gitlab::Metrics.gauge(
+ :gitlab_rails_boot_time_seconds, 'Time elapsed for Rails primary process to finish startup'
+ ).set({}, @startup_time)
+
+ logger.info(message: 'Application boot finished', runtime: runtime.to_s, duration_s: @startup_time)
+ end
+
+ def reset!
+ @startup_time = nil
+ end
+ end
+ end
+end