Migrate email_campaign_counts to use Metric Instrumentation class
Will implement DatabaseMetric
for implementing the metric instrumentation class
https://gitlab.com/gitlab-org/gitlab/-/blob/master/lib/gitlab/usage_data.rb#L792
def email_campaign_counts
# rubocop:disable UsageData/LargeTable
sent_emails = count(Users::InProductMarketingEmail.group(:track, :series))
clicked_emails = count(Users::InProductMarketingEmail.where.not(cta_clicked_at: nil).group(:track, :series))
Users::InProductMarketingEmail::ACTIVE_TRACKS.keys.each_with_object({}) do |track, result|
series_amount = Namespaces::InProductMarketingEmailsService.email_count_for_track(track)
# rubocop: enable UsageData/LargeTable:
0.upto(series_amount - 1).map do |series|
# When there is an error with the query and it's not the Hash we expect, we return what we got from `count`.
sent_count = sent_emails.is_a?(Hash) ? sent_emails.fetch([track, series], 0) : sent_emails
clicked_count = clicked_emails.is_a?(Hash) ? clicked_emails.fetch([track, series], 0) : clicked_emails
result["in_product_marketing_email_#{track}_#{series}_sent"] = sent_count
result["in_product_marketing_email_#{track}_#{series}_cta_clicked"] = clicked_count unless track == 'experience'
end
end
end
Metrics added with this method
Gitlab::UsageData.send :email_campaign_counts
{"in_product_marketing_email_create_0_sent"=>0,
"in_product_marketing_email_create_0_cta_clicked"=>0,
"in_product_marketing_email_create_1_sent"=>0,
"in_product_marketing_email_create_1_cta_clicked"=>0,
"in_product_marketing_email_create_2_sent"=>0,
"in_product_marketing_email_create_2_cta_clicked"=>0,
"in_product_marketing_email_verify_0_sent"=>0,
"in_product_marketing_email_verify_0_cta_clicked"=>0,
"in_product_marketing_email_verify_1_sent"=>0,
"in_product_marketing_email_verify_1_cta_clicked"=>0,
"in_product_marketing_email_verify_2_sent"=>0,
"in_product_marketing_email_verify_2_cta_clicked"=>0,
"in_product_marketing_email_trial_0_sent"=>0,
"in_product_marketing_email_trial_0_cta_clicked"=>0,
"in_product_marketing_email_trial_1_sent"=>0,
"in_product_marketing_email_trial_1_cta_clicked"=>0,
"in_product_marketing_email_trial_2_sent"=>0,
"in_product_marketing_email_trial_2_cta_clicked"=>0,
"in_product_marketing_email_team_0_sent"=>0,
"in_product_marketing_email_team_0_cta_clicked"=>0,
"in_product_marketing_email_team_1_sent"=>0,
"in_product_marketing_email_team_1_cta_clicked"=>0,
"in_product_marketing_email_team_2_sent"=>0,
"in_product_marketing_email_team_2_cta_clicked"=>0,
"in_product_marketing_email_experience_0_sent"=>0,
"in_product_marketing_email_team_short_0_sent"=>0,
"in_product_marketing_email_team_short_0_cta_clicked"=>0,
"in_product_marketing_email_trial_short_0_sent"=>0,
"in_product_marketing_email_trial_short_0_cta_clicked"=>0,
"in_product_marketing_email_admin_verify_0_sent"=>0,
"in_product_marketing_email_admin_verify_0_cta_clicked"=>0}
Edited by Alina Mihaila