cartodb-4.29/lib/carto/export/map_statistics.rb
2020-06-15 10:58:47 +08:00

47 lines
1.4 KiB
Ruby

require 'csv'
module Carto
module Export
class MapStatistics
attr_reader :filepath
def initialize(types: ['derived'])
@types = types
@headers_written = false
@filepath = "/tmp/map_statistics_#{Time.now.strftime('%Y%m%d%H%M%S')}.csv"
end
def run!
csv = CSV.open(filepath, 'wb', headers: true)
Carto::Visualization.where(type: @types).find_each { |vis| process_row(statistics_for_visualization(vis), csv) if vis.user.present? }
csv.close
end
private
def process_row(row, csv)
if !@headers_written
csv << row.keys
@headers_written = true
end
csv << row.values
end
def statistics_for_visualization(visualization)
analysis_nodes = visualization.analyses.flat_map { |a| a.analysis_node.descendants }.uniq(&:id)
{
id: visualization.id,
total_data_layers: visualization.data_layers.count,
total_analysis_nodes: analysis_nodes.count,
non_source_analysis_nodes: analysis_nodes.reject(&:source?).count,
analysis_nodes_per_layer: (analysis_nodes.count.to_f / visualization.layers.count.to_f).round(2),
user_account_type: visualization.user.account_type,
creation_date: visualization.created_at,
type: visualization.builder? ? 'builder' : 'editor'
}
end
end
end
end