diff options
author | Jarka Kadlecova <jarka@gitlab.com> | 2017-07-28 08:08:00 +0200 |
---|---|---|
committer | Jarka Kadlecova <jarka@gitlab.com> | 2017-07-28 08:08:11 +0200 |
commit | 0370ac3a8e98da7044782e813a7cd863eb7c0f53 (patch) | |
tree | 48e65710f03dafdddf2a44eedb0b32e625f0dd0f | |
parent | aa2b3ff1e4c8bb725a96ed55906d142300ccf017 (diff) | |
download | gitlab-ce-add-perc-to-convdevindex.tar.gz |
Store and use metrics percentage calculated in version appadd-perc-to-convdevindex
8 files changed, 84 insertions, 18 deletions
diff --git a/app/models/conversational_development_index/metric.rb b/app/models/conversational_development_index/metric.rb index f42f516f99a..863ac6ae282 100644 --- a/app/models/conversational_development_index/metric.rb +++ b/app/models/conversational_development_index/metric.rb @@ -13,6 +13,8 @@ module ConversationalDevelopmentIndex end def percentage_score(feature) + return self["percentage_#{feature}"] if self["percentage_#{feature}"] + return 100 if leader_score(feature).zero? 100 * instance_score(feature) / leader_score(feature) diff --git a/app/services/submit_usage_ping_service.rb b/app/services/submit_usage_ping_service.rb index 17857ca62f2..7863d6d9f0c 100644 --- a/app/services/submit_usage_ping_service.rb +++ b/app/services/submit_usage_ping_service.rb @@ -28,13 +28,14 @@ class SubmitUsagePingService ConversationalDevelopmentIndex::Metric.create!( response['conv_index'].slice( - 'leader_issues', 'instance_issues', 'leader_notes', 'instance_notes', - 'leader_milestones', 'instance_milestones', 'leader_boards', 'instance_boards', - 'leader_merge_requests', 'instance_merge_requests', 'leader_ci_pipelines', - 'instance_ci_pipelines', 'leader_environments', 'instance_environments', - 'leader_deployments', 'instance_deployments', 'leader_projects_prometheus_active', - 'instance_projects_prometheus_active', 'leader_service_desk_issues', - 'instance_service_desk_issues' + 'leader_issues', 'instance_issues', 'percentage_issues', 'leader_notes', 'instance_notes', 'percentage_notes', + 'leader_milestones', 'instance_milestones', 'percentage_milestones', 'leader_boards', 'instance_boards', + 'percentage_boards', 'leader_merge_requests', 'instance_merge_requests', 'percentage_merge_requests', + 'leader_ci_pipelines', 'instance_ci_pipelines', 'percentage_ci_pipelines', 'leader_environments', + 'instance_environments', 'percentage_environments', 'leader_deployments', 'instance_deployments', + 'percentage_deployments', 'leader_projects_prometheus_active', 'instance_projects_prometheus_active', + 'percentage_prometheus_active', 'leader_service_desk_issues', 'instance_service_desk_issues', + 'percentage_service_desk_issues' ) ) end diff --git a/db/migrate/20170728052509_add_percentages_to_conv_dev.rb b/db/migrate/20170728052509_add_percentages_to_conv_dev.rb new file mode 100644 index 00000000000..a93e1ba29e9 --- /dev/null +++ b/db/migrate/20170728052509_add_percentages_to_conv_dev.rb @@ -0,0 +1,18 @@ +class AddPercentagesToConvDev < ActiveRecord::Migration + include Gitlab::Database::MigrationHelpers + + DOWNTIME = false + + def change + add_column :conversational_development_index_metrics, :percentage_boards, :float + add_column :conversational_development_index_metrics, :percentage_ci_pipelines, :float + add_column :conversational_development_index_metrics, :percentage_deployments, :float + add_column :conversational_development_index_metrics, :percentage_environments, :float + add_column :conversational_development_index_metrics, :percentage_issues, :float + add_column :conversational_development_index_metrics, :percentage_merge_requests, :float + add_column :conversational_development_index_metrics, :percentage_milestones, :float + add_column :conversational_development_index_metrics, :percentage_notes, :float + add_column :conversational_development_index_metrics, :percentage_projects_prometheus_active, :float + add_column :conversational_development_index_metrics, :percentage_service_desk_issues, :float + end +end diff --git a/db/schema.rb b/db/schema.rb index 284b2068166..6cad4917d2f 100644 --- a/db/schema.rb +++ b/db/schema.rb @@ -11,7 +11,7 @@ # # It's strongly recommended that you check this file into your version control system. -ActiveRecord::Schema.define(version: 20170717150329) do +ActiveRecord::Schema.define(version: 20170728052509) do # These are extensions that must be enabled in order to support this database enable_extension "plpgsql" @@ -254,32 +254,32 @@ ActiveRecord::Schema.define(version: 20170717150329) do add_index "ci_builds", ["updated_at"], name: "index_ci_builds_on_updated_at", using: :btree add_index "ci_builds", ["user_id"], name: "index_ci_builds_on_user_id", using: :btree - create_table "ci_pipeline_schedule_variables", force: :cascade do |t| + create_table "ci_group_variables", force: :cascade do |t| t.string "key", null: false t.text "value" t.text "encrypted_value" t.string "encrypted_value_salt" t.string "encrypted_value_iv" - t.integer "pipeline_schedule_id", null: false + t.integer "group_id", null: false + t.boolean "protected", default: false, null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end - add_index "ci_pipeline_schedule_variables", ["pipeline_schedule_id", "key"], name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", unique: true, using: :btree + add_index "ci_group_variables", ["group_id", "key"], name: "index_ci_group_variables_on_group_id_and_key", unique: true, using: :btree - create_table "ci_group_variables", force: :cascade do |t| + create_table "ci_pipeline_schedule_variables", force: :cascade do |t| t.string "key", null: false t.text "value" t.text "encrypted_value" t.string "encrypted_value_salt" t.string "encrypted_value_iv" - t.integer "group_id", null: false - t.boolean "protected", default: false, null: false + t.integer "pipeline_schedule_id", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false end - add_index "ci_group_variables", ["group_id", "key"], name: "index_ci_group_variables_on_group_id_and_key", unique: true, using: :btree + add_index "ci_pipeline_schedule_variables", ["pipeline_schedule_id", "key"], name: "index_ci_pipeline_schedule_variables_on_schedule_id_and_key", unique: true, using: :btree create_table "ci_pipeline_schedules", force: :cascade do |t| t.string "description" @@ -440,6 +440,16 @@ ActiveRecord::Schema.define(version: 20170717150329) do t.float "instance_service_desk_issues", null: false t.datetime "created_at", null: false t.datetime "updated_at", null: false + t.float "percentage_boards" + t.float "percentage_ci_pipelines" + t.float "percentage_deployments" + t.float "percentage_environments" + t.float "percentage_issues" + t.float "percentage_merge_requests" + t.float "percentage_milestones" + t.float "percentage_notes" + t.float "percentage_projects_prometheus_active" + t.float "percentage_service_desk_issues" end create_table "deploy_keys_projects", force: :cascade do |t| @@ -1580,8 +1590,8 @@ ActiveRecord::Schema.define(version: 20170717150329) do add_foreign_key "ci_builds", "ci_pipelines", column: "auto_canceled_by_id", name: "fk_a2141b1522", on_delete: :nullify add_foreign_key "ci_builds", "ci_stages", column: "stage_id", name: "fk_3a9eaa254d", on_delete: :cascade add_foreign_key "ci_builds", "projects", name: "fk_befce0568a", on_delete: :cascade - add_foreign_key "ci_pipeline_schedule_variables", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_41c35fda51", on_delete: :cascade add_foreign_key "ci_group_variables", "namespaces", column: "group_id", name: "fk_33ae4d58d8", on_delete: :cascade + add_foreign_key "ci_pipeline_schedule_variables", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_41c35fda51", on_delete: :cascade add_foreign_key "ci_pipeline_schedules", "projects", name: "fk_8ead60fcc4", on_delete: :cascade add_foreign_key "ci_pipeline_schedules", "users", column: "owner_id", name: "fk_9ea99f58d2", on_delete: :nullify add_foreign_key "ci_pipelines", "ci_pipeline_schedules", column: "pipeline_schedule_id", name: "fk_3d34ab2e06", on_delete: :nullify diff --git a/spec/factories/conversational_development_index_metrics.rb b/spec/factories/conversational_development_index_metrics.rb index a5412629195..899b3c1340e 100644 --- a/spec/factories/conversational_development_index_metrics.rb +++ b/spec/factories/conversational_development_index_metrics.rb @@ -2,6 +2,7 @@ FactoryGirl.define do factory :conversational_development_index_metric, class: ConversationalDevelopmentIndex::Metric do leader_issues 9.256 instance_issues 1.234 + percentage_issues 13.33 leader_notes 30.33333 instance_notes 28.123 diff --git a/spec/models/conversational_development_index/metric_spec.rb b/spec/models/conversational_development_index/metric_spec.rb new file mode 100644 index 00000000000..ffedbcd5dce --- /dev/null +++ b/spec/models/conversational_development_index/metric_spec.rb @@ -0,0 +1,27 @@ +require 'spec_helper' + +describe ConversationalDevelopmentIndex::Metric do + let(:conv_dev_index) { build(:conversational_development_index_metric) } + + describe '#instance_score' do + it 'returns the instance score' do + expect(conv_dev_index.instance_score('issues')).to eq(1.234) + end + end + + describe '#leader_score' do + it 'returns the instance score' do + expect(conv_dev_index.leader_score('issues')).to eq(9.256) + end + end + + describe '#percentage_score' do + it 'returns the stored percentage score' do + expect(conv_dev_index.percentage_score('issues')).to eq(13.33) + end + + it 'returns the calculated percentage score for not scored metrics' do + expect(conv_dev_index.percentage_score('notes')).to be_within(95.0).of(100.0) + end + end +end diff --git a/spec/presenters/conversational_development_index/metric_presenter_spec.rb b/spec/presenters/conversational_development_index/metric_presenter_spec.rb index 1e015c71f5b..cda54c6ee96 100644 --- a/spec/presenters/conversational_development_index/metric_presenter_spec.rb +++ b/spec/presenters/conversational_development_index/metric_presenter_spec.rb @@ -10,7 +10,8 @@ describe ConversationalDevelopmentIndex::MetricPresenter do expect(issues_card.instance_score).to eq 1.234 expect(issues_card.leader_score).to eq 9.256 - expect(issues_card.percentage_score).to be_within(0.1).of(13.3) + expect(issues_card.leader_score).to eq 9.256 + expect(issues_card.percentage_score).to eq(13.33) end end diff --git a/spec/services/submit_usage_ping_service_spec.rb b/spec/services/submit_usage_ping_service_spec.rb index 817fa4262d5..1c7b628d78c 100644 --- a/spec/services/submit_usage_ping_service_spec.rb +++ b/spec/services/submit_usage_ping_service_spec.rb @@ -46,6 +46,8 @@ describe SubmitUsagePingService do .by(1) expect(ConversationalDevelopmentIndex::Metric.last.leader_issues).to eq 10.2 + expect(ConversationalDevelopmentIndex::Metric.last.instance_issues).to eq 3.2 + expect(ConversationalDevelopmentIndex::Metric.last.percentage_issues).to eq 31.37 end end @@ -59,6 +61,7 @@ describe SubmitUsagePingService do { conv_index: { leader_issues: 10.2, + percentage_issues: 31.37, instance_issues: 3.2, leader_notes: 25.3, @@ -86,7 +89,10 @@ describe SubmitUsagePingService do instance_projects_prometheus_active: 0.30, leader_service_desk_issues: 15.8, - instance_service_desk_issues: 15.1 + instance_service_desk_issues: 15.1, + + created_at: DateTime.now, + some_other_field: 'test' } } end |