Usage ping data: Add Jira issues enabled counter
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.
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)