Class: Kanaui::DashboardController

Inherits:
EngineController show all
Defined in:
app/controllers/kanaui/dashboard_controller.rb

Instance Method Summary collapse

Methods inherited from EngineController

#as_string, #as_string_from_response, #current_tenant_user, #dashboard_reports_json_request?, #get_layout, #json_request?, #log_rescue_error, #options_for_klient

Instance Method Details

#available_reportsObject

Not used anymore as reports are pulled from index



69
70
71
72
# File 'app/controllers/kanaui/dashboard_controller.rb', line 69

def available_reports
  available_reports = Kanaui::DashboardHelper::DashboardApi.available_reports(options_for_klient)
  render json: available_reports
end

#indexObject

Load the dashboard by rendering the view and executing the javascript that will call the reports and available_reports endpoints below.



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
58
59
60
61
62
63
64
65
66
# File 'app/controllers/kanaui/dashboard_controller.rb', line 9

def index
  raw_reports = Kanaui::DashboardHelper::DashboardApi.available_reports(options_for_klient)

  @raw_name = (params[:name] || '').split('^')[0]

  @end_date = params[:end_date] || Time.zone.today.to_s

  @available_start_dates = start_date_options
  @start_date = params[:start_date] || (params[:delta_days].present? ? (@end_date.to_date - params[:delta_days].to_i.day).to_s : @available_start_dates['Last 6 months'])

  @reports = JSON.parse(raw_reports)
  @report = current_report(@reports) || {}

  # If no report name is provided, redirect to a default report.
  # Prefer the historical default (second report) when present, but fall back
  # to the first report so a single configured report still renders the
  # dashboard controls and chart area.
  default_report = @reports[1] || @reports[0] if @reports.is_a?(Array)
  default_name = default_report&.fetch('reportName', nil).presence
  if @raw_name.blank? && default_name.present?
    query_params = { start_date: @start_date,
                     end_date: @end_date,
                     name: default_name,
                     smooth: params[:smooth],
                     sql_only: params[:sql_only],
                     format: params[:format] }

    query_params[:fake] = params[:fake] if params[:fake].present?
    query_params[:type] = params[:type] if params[:type].present?

    redirect_to dashboard_index_path(query_params) and return
  end

  query = build_slice_and_dice_query

  # get columns visibility from query parameters to be used by tables
  @visible_columns = params[:columns]

  # Redirect also in case the dates have been updated to avoid any confusion in the view
  if query.present? || params[:start_date].blank? || params[:end_date].blank?
    # TODO: Make metrics configurable
    name = query.present? ? "#{params[:name]}#{query}^metric:count" : params[:name]
    query_params = { start_date: @start_date,
                     end_date: @end_date,
                     name:,
                     smooth: params[:smooth],
                     sql_only: params[:sql_only],
                     format: params[:format] }

    # Test only
    query_params[:fake] = params[:fake] if params[:fake].present?
    query_params[:type] = params[:type] if params[:type].present?

    redirect_to dashboard_index_path(query_params) and return
  end

  params.permit!
end

#reportsObject



74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'app/controllers/kanaui/dashboard_controller.rb', line 74

def reports
  format = params[:format] || 'json'
  raw_reports = fetch_reports(format)

  if format == 'json' && params[:sql_only] != 'true'
    reports = JSON.parse(raw_reports)

    # Remove reports with empty data
    reports.reject! do |report|
      reject = false
      (report['data'] || []).each { |data| reject = true if (data['values'] || []).empty? && data['value'].blank? }
      reject
    end
  else
    reports = raw_reports
  end
  respond_to do |fmt|
    fmt.csv do
      filename = params[:name]
      if params[:start_date].present?
        filename += "_#{params[:start_date]}"
        filename += "-#{params[:end_date]}" if params[:end_date].present?
      end
      filename += '.csv'
      send_data(raw_reports, filename:)
    end
    fmt.all { render json: reports }
  end
end