From 414523b0bf7fc5728d8d118b2823be8610546fe6 Mon Sep 17 00:00:00 2001 From: Reuben Pereira Date: Mon, 2 Sep 2019 14:35:02 +0000 Subject: Handle :9090 and 0.0.0.0:9090 listen_address formats Prometheus listen_address can be in formats of :9090 and 0.0.0.0:9090. But before these can be used to connect a project to Prometheus, they have to converted into absolute URIs. --- .../self_monitoring/project/create_service.rb | 40 ++++++++++++++-------- locale/gitlab.pot | 26 +------------- .../self_monitoring/project/create_service_spec.rb | 16 ++++++++- 3 files changed, 42 insertions(+), 40 deletions(-) diff --git a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb b/lib/gitlab/database_importers/self_monitoring/project/create_service.rb index 3a170e8b5f8..5422a8631a0 100644 --- a/lib/gitlab/database_importers/self_monitoring/project/create_service.rb +++ b/lib/gitlab/database_importers/self_monitoring/project/create_service.rb @@ -45,20 +45,20 @@ module Gitlab def validate_application_settings return success if application_settings - log_error(_('No application_settings found')) + log_error('No application_settings found') error(_('No application_settings found')) end def validate_project_created return success unless project_created? - log_error(_('Project already created')) + log_error('Project already created') error(_('Project already created')) end def validate_admins unless instance_admins.any? - log_error(_('No active admin user found')) + log_error('No active admin user found') return error(_('No active admin user found')) end @@ -83,7 +83,7 @@ module Gitlab def create_project if project_created? - log_info(_('Instance administration project already exists')) + log_info('Instance administration project already exists') @project = application_settings.instance_administration_project return success(project: project) end @@ -93,7 +93,7 @@ module Gitlab if project.persisted? success(project: project) else - log_error(_("Could not create instance administration project. Errors: %{errors}") % { errors: project.errors.full_messages }) + log_error("Could not create instance administration project. Errors: %{errors}" % { errors: project.errors.full_messages }) error(_('Could not create project')) end end @@ -106,7 +106,7 @@ module Gitlab if result success else - log_error(_("Could not save instance administration project ID, errors: %{errors}") % { errors: application_settings.errors.full_messages }) + log_error("Could not save instance administration project ID, errors: %{errors}" % { errors: application_settings.errors.full_messages }) error(_('Could not save project ID')) end end @@ -116,7 +116,7 @@ module Gitlab errors = members.flat_map { |member| member.errors.full_messages } if errors.any? - log_error(_('Could not add admins as members to self-monitoring project. Errors: %{errors}') % { errors: errors }) + log_error('Could not add admins as members to self-monitoring project. Errors: %{errors}' % { errors: errors }) error(_('Could not add admins as members')) else success @@ -128,7 +128,7 @@ module Gitlab return success unless prometheus_listen_address.present? uri = parse_url(internal_prometheus_listen_address_uri) - return error(_('Prometheus listen_address is not a valid URI')) unless uri + return error(_('Prometheus listen_address in config/gitlab.yml is not a valid URI')) unless uri application_settings.add_to_outbound_local_requests_whitelist([uri.normalized_host]) result = application_settings.save @@ -140,7 +140,7 @@ module Gitlab Gitlab::CurrentSettings.expire_current_application_settings success else - log_error(_("Could not add prometheus URL to whitelist, errors: %{errors}") % { errors: application_settings.errors.full_messages }) + log_error("Could not add prometheus URL to whitelist, errors: %{errors}" % { errors: application_settings.errors.full_messages }) error(_('Could not add prometheus URL to whitelist')) end end @@ -152,7 +152,7 @@ module Gitlab service = project.find_or_initialize_service('prometheus') unless service.update(prometheus_service_attributes) - log_error(_('Could not save prometheus manual configuration for self-monitoring project. Errors: %{errors}') % { errors: service.errors.full_messages }) + log_error('Could not save prometheus manual configuration for self-monitoring project. Errors: %{errors}' % { errors: service.errors.full_messages }) return error(_('Could not save prometheus manual configuration')) end @@ -175,15 +175,15 @@ module Gitlab def prometheus_enabled? Gitlab.config.prometheus.enable if Gitlab.config.prometheus rescue Settingslogic::MissingSetting - log_error(_('prometheus.enable is not present in gitlab.yml')) + log_error('prometheus.enable is not present in config/gitlab.yml') false end def prometheus_listen_address - Gitlab.config.prometheus.listen_address if Gitlab.config.prometheus + Gitlab.config.prometheus.listen_address.to_s if Gitlab.config.prometheus rescue Settingslogic::MissingSetting - log_error(_('prometheus.listen_address is not present in gitlab.yml')) + log_error('Prometheus listen_address is not present in config/gitlab.yml') nil end @@ -228,9 +228,21 @@ module Gitlab end def internal_prometheus_listen_address_uri - if prometheus_listen_address.starts_with?('http') + if prometheus_listen_address.starts_with?('0.0.0.0:') + # 0.0.0.0:9090 + port = ':' + prometheus_listen_address.split(':').second + 'http://localhost' + port + + elsif prometheus_listen_address.starts_with?(':') + # :9090 + 'http://localhost' + prometheus_listen_address + + elsif prometheus_listen_address.starts_with?('http') + # https://localhost:9090 prometheus_listen_address + else + # localhost:9090 'http://' + prometheus_listen_address end end diff --git a/locale/gitlab.pot b/locale/gitlab.pot index e91061e74c2..a1836646b1a 100644 --- a/locale/gitlab.pot +++ b/locale/gitlab.pot @@ -3374,15 +3374,9 @@ msgstr "" msgid "Could not add admins as members" msgstr "" -msgid "Could not add admins as members to self-monitoring project. Errors: %{errors}" -msgstr "" - msgid "Could not add prometheus URL to whitelist" msgstr "" -msgid "Could not add prometheus URL to whitelist, errors: %{errors}" -msgstr "" - msgid "Could not authorize chat nickname. Try again!" msgstr "" @@ -3398,9 +3392,6 @@ msgstr "" msgid "Could not create group" msgstr "" -msgid "Could not create instance administration project. Errors: %{errors}" -msgstr "" - msgid "Could not create project" msgstr "" @@ -3419,18 +3410,12 @@ msgstr "" msgid "Could not revoke personal access token %{personal_access_token_name}." msgstr "" -msgid "Could not save instance administration project ID, errors: %{errors}" -msgstr "" - msgid "Could not save project ID" msgstr "" msgid "Could not save prometheus manual configuration" msgstr "" -msgid "Could not save prometheus manual configuration for self-monitoring project. Errors: %{errors}" -msgstr "" - msgid "Coverage" msgstr "" @@ -6098,9 +6083,6 @@ msgstr "" msgid "Instance Statistics visibility" msgstr "" -msgid "Instance administration project already exists" -msgstr "" - msgid "Instance administrators group already exists" msgstr "" @@ -9202,7 +9184,7 @@ msgstr "" msgid "ProjectsNew|Want to house several dependent projects under the same namespace? %{link_start}Create a group.%{link_end}" msgstr "" -msgid "Prometheus listen_address is not a valid URI" +msgid "Prometheus listen_address in config/gitlab.yml is not a valid URI" msgstr "" msgid "PrometheusService|%{exporters} with %{metrics} were found" @@ -14177,12 +14159,6 @@ msgstr "" msgid "project avatar" msgstr "" -msgid "prometheus.enable is not present in gitlab.yml" -msgstr "" - -msgid "prometheus.listen_address is not present in gitlab.yml" -msgstr "" - msgid "quick actions" msgstr "" diff --git a/spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb b/spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb index b3dedfe1f77..aab6fbcbbd1 100644 --- a/spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb +++ b/spec/lib/gitlab/database_importers/self_monitoring/project/create_service_spec.rb @@ -176,14 +176,28 @@ describe Gitlab::DatabaseImporters::SelfMonitoring::Project::CreateService do end context 'with non default prometheus address' do + let(:listen_address) { 'https://localhost:9090' } + let(:prometheus_settings) do { enable: true, - listen_address: 'https://localhost:9090' + listen_address: listen_address } end it_behaves_like 'has prometheus service', 'https://localhost:9090' + + context 'with :9090 symbol' do + let(:listen_address) { :':9090' } + + it_behaves_like 'has prometheus service', 'http://localhost:9090' + end + + context 'with 0.0.0.0:9090' do + let(:listen_address) { '0.0.0.0:9090' } + + it_behaves_like 'has prometheus service', 'http://localhost:9090' + end end context 'when prometheus setting is not present in gitlab.yml' do -- cgit v1.2.1