summaryrefslogtreecommitdiff
path: root/app/controllers/projects/product_analytics_controller.rb
blob: c019dc191d69dab02840c78eb64a51e8e3d87ba8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
# frozen_string_literal: true

class Projects::ProductAnalyticsController < Projects::ApplicationController
  before_action :feature_enabled!
  before_action :authorize_read_product_analytics!
  before_action :tracker_variables, only: [:setup, :test]

  def index
    @events = product_analytics_events.order_by_time.page(params[:page])
  end

  def setup
  end

  def test
    @event = product_analytics_events.try(:first)
  end

  def graphs
    @graphs = []
    @timerange = 30

    requested_graphs = %w(platform os_timezone br_lang doc_charset)

    requested_graphs.each do |graph|
      @graphs << ProductAnalytics::BuildGraphService
        .new(project, { graph: graph, timerange: @timerange })
        .execute
    end

    @activity_graph = ProductAnalytics::BuildActivityGraphService
      .new(project, { timerange: @timerange })
      .execute
  end

  private

  def product_analytics_events
    @project.product_analytics_events
  end

  def tracker_variables
    # We use project id as Snowplow appId
    @project_id = @project.id.to_s

    # Snowplow remembers values like appId and platform between reloads.
    # That is why we have to rename the tracker with a random integer.
    @random = rand(999999)

    # Generate random platform every time a tracker is rendered.
    @platform = %w(web mob app)[(@random % 3)]
  end

  def feature_enabled!
    render_404 unless Feature.enabled?(:product_analytics, @project, default_enabled: false)
  end
end