diff --git a/app/controllers/health_controller.rb b/app/controllers/health_controller.rb index 03cc896fce9512b7b4f8c8bc672388436416ec9c..6f8038f6ec3ab5afbd0168b35d1e215499b97403 100644 --- a/app/controllers/health_controller.rb +++ b/app/controllers/health_controller.rb @@ -23,15 +23,27 @@ class HealthController < ActionController::Base end def metrics - results = CHECKS.flat_map(&:metrics) + response = health_metrics_text + "\n" + + if Gitlab::Metrics.prometheus_metrics_enabled? + response += Prometheus::Client::Formats::Text.marshal_multiprocess(ENV['prometheus_multiproc_dir']) + end - response = results.map(&method(:metric_to_prom_line)).join("\n") - response = ::Prometheus::Client::Formats::Text.marshal_multiprocess render text: response, content_type: 'text/plain; version=0.0.4' end private + def health_metrics_text + results = CHECKS.flat_map(&:metrics) + + types = results.map(&:name) + .uniq + .map { |metric_name| "# TYPE #{metric_name} gauge" } + metrics = results.map(&method(:metric_to_prom_line)) + types.concat(metrics).join("\n") + end + def metric_to_prom_line(metric) labels = metric.labels&.map { |key, value| "#{key}=\"#{value}\"" }&.join(',') || '' if labels.empty? diff --git a/app/controllers/sessions_controller.rb b/app/controllers/sessions_controller.rb index 9870d4286a6ec308a534803b6071b5461585f04b..eaed878283ecdcf545790b66473ed8d320398487 100644 --- a/app/controllers/sessions_controller.rb +++ b/app/controllers/sessions_controller.rb @@ -34,7 +34,6 @@ class SessionsController < Devise::SessionsController end # hide the signed-in notification flash[:notice] = nil - PromService.instance.login.increment log_audit_event(current_user, with: authentication_method) log_user_activity(current_user) end @@ -48,6 +47,10 @@ class SessionsController < Devise::SessionsController private + def self.login_counter + @login_counter ||= Gitlab::Metrics.counter(:user_session_logins, 'User logins count') + end + # Handle an "initial setup" state, where there's only one user, it's an admin, # and they require a password change. def check_initial_setup @@ -126,6 +129,7 @@ class SessionsController < Devise::SessionsController end def log_user_activity(user) + SessionsController.login_counter.increment Users::ActivityService.new(user, 'login').execute end diff --git a/app/services/prom_service.rb b/app/services/prom_service.rb deleted file mode 100644 index 93d52fd2c79e96d4f8d2911ce53187be3d520f71..0000000000000000000000000000000000000000 --- a/app/services/prom_service.rb +++ /dev/null @@ -1,15 +0,0 @@ -require 'prometheus/client' -require 'singleton' - -class PromService - include Singleton - - attr_reader :login - - def initialize - @prometheus = Prometheus::Client.registry - - @login = Prometheus::Client::Counter.new(:login, 'Login counter') - @prometheus.register(@login) - end -end