lib/gdk/diagnostic/geo.rb (64 lines of code) (raw):
# frozen_string_literal: true
module GDK
module Diagnostic
class Geo < Base
TITLE = 'Geo'
def success?
@success ||= if geo_enabled?
geo_secondary? ? geo_database_exists? : !geo_database_exists?
else
!geo_database_exists?
end
end
def detail
return if success?
<<~MESSAGE
There is a mismatch in your Geo configuration.
#{geo_mismatch_description}
Please run `gdk reconfigure` to apply settings in gdk.yml.
For more details, please refer to #{geo_howto_url}.
MESSAGE
end
private
def geo_enabled?
config.geo.enabled
end
def geo_secondary?
config.geo.secondary
end
def database_yml_file
@database_yml_file ||= config.gitlab.dir.join('config', 'database.yml').expand_path.to_s
end
def database_yml_file_exists?
File.exist?(database_yml_file)
end
def database_yml_file_content
return {} unless database_yml_file_exists?
raw_yaml = File.read(database_yml_file)
YAML.safe_load(raw_yaml, aliases: true, symbolize_names: true) || {}
end
def database_names
database_yml_file_content[:development].to_h.keys
end
def geo_database_exists?
database_names.include?(:geo)
end
def geo_howto_url
'https://gitlab.com/gitlab-org/gitlab-development-kit/blob/main/doc/howto/geo.md'
end
def geo_mismatch_description
if !geo_enabled? && geo_database_exists?
<<~MESSAGE
Geo is disabled in GDK, but `#{database_yml_file}` contains geo database.
MESSAGE
elsif geo_enabled? && !geo_secondary? && geo_database_exists?
<<~MESSAGE
Geo is enabled in GDK, but not as a secondary node, so `#{database_yml_file}` should not contain geo database.
MESSAGE
elsif geo_enabled? && geo_secondary? && !geo_database_exists?
<<~MESSAGE
Geo is enabled in GDK as a secondary, but `#{database_yml_file}` does not contain geo database.
MESSAGE
end
end
end
end
end