summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJarka Kadlecova <jarka@gitlab.com>2017-07-28 08:08:00 +0200
committerJarka Kadlecova <jarka@gitlab.com>2017-07-28 08:08:11 +0200
commit0370ac3a8e98da7044782e813a7cd863eb7c0f53 (patch)
tree48e65710f03dafdddf2a44eedb0b32e625f0dd0f
parentaa2b3ff1e4c8bb725a96ed55906d142300ccf017 (diff)
downloadgitlab-ce-add-perc-to-convdevindex.tar.gz
Store and use metrics percentage calculated in version appadd-perc-to-convdevindex
-rw-r--r--app/models/conversational_development_index/metric.rb2
-rw-r--r--app/services/submit_usage_ping_service.rb15
-rw-r--r--db/migrate/20170728052509_add_percentages_to_conv_dev.rb18
-rw-r--r--db/schema.rb28
-rw-r--r--spec/factories/conversational_development_index_metrics.rb1
-rw-r--r--spec/models/conversational_development_index/metric_spec.rb27
-rw-r--r--spec/presenters/conversational_development_index/metric_presenter_spec.rb3
-rw-r--r--spec/services/submit_usage_ping_service_spec.rb8
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