Skip to content

Usage ping data: Add Jira issues enabled counter

Arturo Herrero requested to merge 227238-jira-issues-usage-ping-data into master

What does this MR do?

As part of &3622 (closed), we need to add an item to the usage ping payload that indicates how many projects currently have this feature enabled.

We added issues_enabled column to jira_tracker_data table !35987 (merged) to support the controls to enable the Jira issues list #223787 (closed).

Basically, if a user checks Enable Jira issues, we want to track them in the usage ping data.

Screen_Shot_2020-07-02_at_17.41.09

All &3622 (closed) functionality is currently under a feature flag before the next release gitlab-com/www-gitlab-com!55366 (merged).

SQL Queries

Original query:

pry(main)> Gitlab::UsageData.count(JiraService.active.includes(:jira_tracker_data).where(jira_tracker_data: { issues_enabled: true }))
   (3.4ms)  SELECT MIN("services"."id") FROM "services" LEFT OUTER JOIN "jira_tracker_data" ON "jira_tracker_data"."service_id" = "services"."id" WHERE "services"."type" = 'JiraService' AND "services"."active" = TRUE AND "jira_tracker_data"."issues_enabled" = TRUE
   (0.4ms)  SELECT MAX("services"."id") FROM "services" LEFT OUTER JOIN "jira_tracker_data" ON "jira_tracker_data"."service_id" = "services"."id" WHERE "services"."type" = 'JiraService' AND "services"."active" = TRUE AND "jira_tracker_data"."issues_enabled" = TRUE
   (1.0ms)  SELECT COUNT(DISTINCT "services"."id") FROM "services" LEFT OUTER JOIN "jira_tracker_data" ON "jira_tracker_data"."service_id" = "services"."id" WHERE "services"."type" = 'JiraService' AND "services"."active" = TRUE AND "jira_tracker_data"."issues_enabled" = TRUE AND "services"."id" BETWEEN 11 AND 100010

Optimization passing start and finish:

pry(main)> JiraTrackerData.where(issues_enabled: true).minimum(:service_id)
   (0.4ms)  SELECT MIN("jira_tracker_data"."service_id") FROM "jira_tracker_data" WHERE "jira_tracker_data"."issues_enabled" = TRUE

pry(main)> JiraTrackerData.where(issues_enabled: true).maximum(:service_id)
   (0.5ms)  SELECT MAX("jira_tracker_data"."service_id") FROM "jira_tracker_data" WHERE "jira_tracker_data"."issues_enabled" = TRUE

Query 1

Original
EXPLAIN SELECT MIN("services"."id") FROM "services" LEFT OUTER JOIN "jira_tracker_data" ON "jira_tracker_data"."service_id" = "services"."id" WHERE "services"."type" = 'JiraService' AND "services"."active" = TRUE AND "jira_tracker_data"."issues_enabled" = TRUE
Time: 262.420 ms
  - planning: 0.364 ms
  - execution: 262.056 ms

https://explain.depesz.com/s/2Yc2

Optimization
explain SELECT MIN("jira_tracker_data"."service_id") FROM "jira_tracker_data" WHERE "jira_tracker_data"."issues_enabled" = TRUE
Time: 104.507 ms
  - planning: 0.325 ms
  - execution: 104.182 ms

https://explain.depesz.com/s/UcTR

Query 2

EXPLAIN SELECT MAX("services"."id") FROM "services" LEFT OUTER JOIN "jira_tracker_data" ON "jira_tracker_data"."service_id" = "services"."id" WHERE "services"."type" = 'JiraService' AND "services"."active" = TRUE AND "jira_tracker_data"."issues_enabled" = TRUE
Time: 249.867 ms
  - planning: 0.487 ms
  - execution: 249.380 ms

https://explain.depesz.com/s/y20Y

Optimization
explain SELECT MAX("jira_tracker_data"."service_id") FROM "jira_tracker_data" WHERE "jira_tracker_data"."issues_enabled" = TRUE
Time: 88.499 ms
  - planning: 0.162 ms
  - execution: 88.337 ms

https://explain.depesz.com/s/QiPH

Query 3

EXPLAIN SELECT COUNT(DISTINCT services.id) FROM services LEFT OUTER JOIN jira_tracker_data ON jira_tracker_data.service_id = services.id WHERE services.type = JiraService AND services.active = TRUE AND jira_tracker_data.issues_enabled = TRUE AND services.id BETWEEN 11 AND 100010
Time: 0.591 ms
  - planning: 0.490 ms
  - execution: 0.101 ms

https://explain.depesz.com/s/GmGf

Closes #227238 (closed)

Edited by Arturo Herrero

Merge request reports