Return seats in use for free or trial subscriptions
What does this MR do?
Context
This is the summary posted on the issue which describes the problem perfectly:
We do not show
Seats currently in use
for top-level namespaces which are on the Free plan. This makes quoting difficult for sales and forces the prospect to go through many steps to identify how many total users they would be charged for if they purchased a plan.
We should always display
Seats currently in use
on the Billing page regardless of the tier.
Changes
The change is basically calculating the currently number of used seats at the fly. GitlabSubscription#seats_in_use
is invoked through an API call when rendering the subscription table by the frontend. I opted by this strategy instead of making the changes on the cronjob that runs daily by the following reasons:
- It will generate less stress to the DB because doing it in the worker means processing thousands (or millions?) of Groups.
- I'm confident that the billing page of a Group is not frequently visited.
- Calculating the used seats in the worker means that the data will be stale when the free users visit the billing section.
Database impact
As part of this MR, the following 4 queries will now be executed when the billing section for a free or trial Group is visited: https://gitlab.com/gitlab-org/gitlab/-/snippets/2031323
In order to grab the Group with most members, the following query was used: https://gitlab.slack.com/archives/C3NBYFJ6N/p1603145594224200
Screenshots
Before
After
Tooltips
Free
Trial
Before:
After:
- Copy about the seats usage data was removed
- tooltip copy was updated
Paid
Does this MR meet the acceptance criteria?
Conformity
-
Changelog entry -
Documentation (if required) -
Code review guidelines -
Merge request performance guidelines -
Style guides -
Database guides -
Separation of EE specific content
Availability and Testing
-
Review and add/update tests for this feature/bug. Consider all test levels. See the Test Planning Process. -
Tested in all supported browsers -
Informed Infrastructure department of a default or new setting change, if applicable per definition of done
Security
If this MR contains changes to processing or storing of credentials or tokens, authorization and authentication methods and other items described in the security review guidelines:
-
Label as security and @ mention @gitlab-com/gl-security/appsec
-
The MR includes necessary changes to maintain consistency between UI, API, email, or other methods -
Security reports checked/validated by a reviewer from the AppSec team
Related to #260378 (closed)