diff --git a/jobs/director/templates/indicator.yml.erb b/jobs/director/templates/indicator.yml.erb index d93785471fd..cb1143dde15 100644 --- a/jobs/director/templates/indicator.yml.erb +++ b/jobs/director/templates/indicator.yml.erb @@ -25,6 +25,8 @@ spec: type: "Type of the task (e.g. update_deployment, snapshot_deployment...)" - name: bosh_resurrection_enabled promql: bosh_resurrection_enabled + - name: bosh_deploy_config_enabled + promql: bosh_deploy_config_enabled - name: bosh_networks_dynamic_ips_total promql: bosh_networks_dynamic_ips_total documentation: diff --git a/src/bosh-director/lib/bosh/director/api/config_manager.rb b/src/bosh-director/lib/bosh/director/api/config_manager.rb index 74510ff2c5d..521e31d1cdd 100644 --- a/src/bosh-director/lib/bosh/director/api/config_manager.rb +++ b/src/bosh-director/lib/bosh/director/api/config_manager.rb @@ -13,6 +13,12 @@ def create(type, name, config_yaml, team_id = nil) config.save end + def deploy_config_enabled? + deploy_config = find(type: 'deploy') + + return !deploy_config.empty? + end + def find(type: nil, name: nil, limit: 1) dataset = Bosh::Director::Models::Config.where(deleted: false) dataset = dataset.where(type: type) if type diff --git a/src/bosh-director/lib/bosh/director/metrics_collector.rb b/src/bosh-director/lib/bosh/director/metrics_collector.rb index 30c6e123a17..7a109b25aa7 100644 --- a/src/bosh-director/lib/bosh/director/metrics_collector.rb +++ b/src/bosh-director/lib/bosh/director/metrics_collector.rb @@ -10,6 +10,11 @@ def initialize(config) @config = config @logger = config.metrics_server_logger + @deploy_config_enabled = Prometheus::Client.registry.gauge( + :bosh_deploy_config_enabled, + docstring: 'Is a config of type deploy uploaded? 0 for no, 1 for yes', + ) + @resurrection_enabled = Prometheus::Client.registry.gauge( :bosh_resurrection_enabled, docstring: 'Is resurrection enabled? 0 for disabled, 1 for enabled', @@ -82,6 +87,7 @@ def ensure_migrations def populate_metrics @logger.info('populating metrics') + @deploy_config_enabled.set(Api::ConfigManager.deploy_config_enabled? ? 1 : 0) @resurrection_enabled.set(Api::ResurrectorManager.new.pause_for_all? ? 0 : 1) metrics = { 'processing' => {}, 'queued' => {} } diff --git a/src/bosh-director/spec/unit/api/config_manager_spec.rb b/src/bosh-director/spec/unit/api/config_manager_spec.rb index 279b4dfc65b..99917704d41 100644 --- a/src/bosh-director/spec/unit/api/config_manager_spec.rb +++ b/src/bosh-director/spec/unit/api/config_manager_spec.rb @@ -282,5 +282,19 @@ end end + describe '#deploy_config_enabled?' do + context 'when config of type deploy does not exist' do + it "returns 'false'" do + expect(manager.deploy_config_enabled?).to eq(false) + end + end + + context 'when config of type deploy exists' do + let!(:config_id) { Bosh::Director::Models::Config.make(type: 'deploy', name: 'my-name') } + it "returns 'true'" do + expect(manager.deploy_config_enabled?).to eq(true) + end + end + end end diff --git a/src/bosh-director/spec/unit/metrics_collector_spec.rb b/src/bosh-director/spec/unit/metrics_collector_spec.rb index 248bcf4e80c..4e16a944d1d 100644 --- a/src/bosh-director/spec/unit/metrics_collector_spec.rb +++ b/src/bosh-director/spec/unit/metrics_collector_spec.rb @@ -23,12 +23,14 @@ def tick allow(Rufus::Scheduler).to receive(:new).and_return(scheduler) allow(Api::ResurrectorManager).to receive(:new).and_return(resurrector_manager) allow(resurrector_manager).to receive(:pause_for_all?).and_return(false, true, false) + allow(Api::ConfigManager).to receive(:deploy_config_enabled?).and_return(true, false) stub_request(:get, /unresponsive_agents/) .to_return(status: 200, body: JSON.dump('flaky_deployment' => 1, 'good_deployment' => 0)) end after do Prometheus::Client.registry.unregister(:bosh_resurrection_enabled) + Prometheus::Client.registry.unregister(:bosh_deploy_config_enabled) Prometheus::Client.registry.unregister(:bosh_tasks_total) Prometheus::Client.registry.unregister(:bosh_networks_dynamic_ips_total) Prometheus::Client.registry.unregister(:bosh_networks_dynamic_free_ips_total) @@ -46,6 +48,16 @@ def tick end end + describe 'deploy_config_enabled' do + it 'populates the metrics every 30 seconds' do + metrics_collector.start + expect(scheduler.interval_duration).to eq('30s') + expect(Prometheus::Client.registry.get(:bosh_deploy_config_enabled).get).to eq(1) + scheduler.tick + expect(Prometheus::Client.registry.get(:bosh_deploy_config_enabled).get).to eq(0) + end + end + describe 'network metrics' do let(:manual_network_spec) do {