From: Tom Clegg Date: Thu, 5 May 2022 14:53:32 +0000 (-0400) Subject: 18794: Add version and config metrics to workbench1. X-Git-Tag: 2.5.0~184^2~9 X-Git-Url: https://git.arvados.org/arvados.git/commitdiff_plain/10fc5ae4d7c95bef5056fa06e708320b149a47d3 18794: Add version and config metrics to workbench1. Arvados-DCO-1.1-Signed-off-by: Tom Clegg --- diff --git a/apps/workbench/app/controllers/healthcheck_controller.rb b/apps/workbench/app/controllers/management_controller.rb similarity index 54% rename from apps/workbench/app/controllers/healthcheck_controller.rb rename to apps/workbench/app/controllers/management_controller.rb index 691bef8ee5..4c8b52f661 100644 --- a/apps/workbench/app/controllers/healthcheck_controller.rb +++ b/apps/workbench/app/controllers/management_controller.rb @@ -2,7 +2,9 @@ # # SPDX-License-Identifier: AGPL-3.0 -class HealthcheckController < ApplicationController +require 'app_version' + +class ManagementController < ApplicationController skip_around_action :thread_clear skip_around_action :set_thread_api_token skip_around_action :require_thread_api_token @@ -28,7 +30,21 @@ class HealthcheckController < ApplicationController end end - def ping + def metrics + render content_type: 'text/plain', plain: <<~EOF +# HELP arvados_config_load_timestamp_seconds Time when config file was loaded. +# TYPE arvados_config_load_timestamp_seconds gauge +arvados_config_load_timestamp_seconds{sha256="#{Rails.configuration.SourceSHA256}"} #{Rails.configuration.LoadTimestamp.to_f} +# HELP arvados_config_source_timestamp_seconds Timestamp of config file when it was loaded. +# TYPE arvados_config_source_timestamp_seconds gauge +arvados_config_source_timestamp_seconds{sha256="#{Rails.configuration.SourceSHA256}"} #{Rails.configuration.SourceTimestamp.to_f} +# HELP arvados_version_running Indicated version is running. +# TYPE arvados_version_running gauge +arvados_version_running{version="#{AppVersion.package_version}"} 1 +EOF + end + + def health resp = {"health" => "OK"} render json: resp end diff --git a/apps/workbench/config/arvados_config.rb b/apps/workbench/config/arvados_config.rb index 7cc46d2983..86b4a47539 100644 --- a/apps/workbench/config/arvados_config.rb +++ b/apps/workbench/config/arvados_config.rb @@ -21,6 +21,7 @@ require 'open3' # Load the defaults, used by config:migrate and fallback loading # legacy application.yml +load_time = Time.now.utc defaultYAML, stderr, status = Open3.capture3("arvados-server", "config-dump", "-config=-", "-skip-legacy", stdin_data: "Clusters: {xxxxx: {}}") if !status.success? puts stderr @@ -30,6 +31,8 @@ confs = YAML.load(defaultYAML, deserialize_symbols: false) clusterID, clusterConfig = confs["Clusters"].first $arvados_config_defaults = clusterConfig $arvados_config_defaults["ClusterID"] = clusterID +$arvados_config_defaults["SourceTimestamp"] = Time.rfc3339(confs["SourceTimestamp"]) +$arvados_config_defaults["SourceSHA256"] = confs["SourceSHA256"] if ENV["ARVADOS_CONFIG"] == "none" # Don't load config. This magic value is set by packaging scripts so @@ -45,6 +48,8 @@ else clusterID, clusterConfig = confs["Clusters"].first $arvados_config_global = clusterConfig $arvados_config_global["ClusterID"] = clusterID + $arvados_config_global["SourceTimestamp"] = Time.rfc3339(confs["SourceTimestamp"]) + $arvados_config_global["SourceSHA256"] = confs["SourceSHA256"] else # config-dump failed, assume we will be loading from legacy # application.yml, initialize with defaults. @@ -55,6 +60,7 @@ end # Now make a copy $arvados_config = $arvados_config_global.deep_dup +$arvados_config["LoadTimestamp"] = load_time # Declare all our configuration items. arvcfg = ConfigLoader.new diff --git a/apps/workbench/config/routes.rb b/apps/workbench/config/routes.rb index ffc09ac933..0bf8dffc67 100644 --- a/apps/workbench/config/routes.rb +++ b/apps/workbench/config/routes.rb @@ -130,7 +130,8 @@ Rails.application.routes.draw do root :to => 'projects#index' - match '/_health/ping', to: 'healthcheck#ping', via: [:get] + match '/_health/:check', to: 'management#health', via: [:get] + match '/metrics', to: 'management#metrics', via: [:get] get '/tests/mithril', to: 'tests#mithril'