parent
cb0ca54cf5
commit
6af3aa43c4
@ -0,0 +1,37 @@
|
||||
require_dependency 'carto/metrics/mapviews_usage_metrics'
|
||||
require_dependency 'carto/metrics/usage_metrics_retriever'
|
||||
require_dependency 'carto/metrics/twitter_imports_retriever'
|
||||
|
||||
module Carto::Superadmin
|
||||
module MetricsControllerHelper
|
||||
USAGE_METRICS_CLASSES = [
|
||||
CartoDB::GeocoderUsageMetrics,
|
||||
CartoDB::IsolinesUsageMetrics,
|
||||
CartoDB::ObservatoryGeneralUsageMetrics,
|
||||
CartoDB::ObservatorySnapshotUsageMetrics,
|
||||
CartoDB::RoutingUsageMetrics,
|
||||
Carto::Metrics::MapviewsUsageMetrics
|
||||
].freeze
|
||||
|
||||
USAGE_METRICS_RETRIEVERS = (
|
||||
USAGE_METRICS_CLASSES.map { |cls| Carto::Metrics::UsageMetricsRetriever.new(cls) } +
|
||||
[Carto::Metrics::TwitterImportsRetriever.new]
|
||||
).freeze
|
||||
|
||||
private
|
||||
|
||||
def get_usage(user, org, date_from, date_to)
|
||||
usage = {}
|
||||
USAGE_METRICS_RETRIEVERS.each do |retriever|
|
||||
retriever.services.each do |service|
|
||||
usage[service] = {}
|
||||
retriever.metrics.each do |metric|
|
||||
usage[service][metric] = retriever.get_range(user, org, service, metric, date_from, date_to)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
usage
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,32 @@
|
||||
# encoding: UTF-8
|
||||
|
||||
require_dependency 'carto/superadmin/metrics_controller_helper'
|
||||
|
||||
module Carto
|
||||
module Superadmin
|
||||
class UsersController < ::Superadmin::SuperadminController
|
||||
include MetricsControllerHelper
|
||||
|
||||
respond_to :json
|
||||
|
||||
ssl_required :usage
|
||||
before_filter :load_user
|
||||
|
||||
def usage
|
||||
date_to = (params[:to] ? params[:to].to_date : Date.today)
|
||||
date_from = (params[:from] ? params[:from].to_date : Date.today)
|
||||
|
||||
usage = get_usage(@user, nil, date_from, date_to)
|
||||
|
||||
respond_with(usage)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def load_user
|
||||
@user = Carto::User.where(id: params[:id]).first
|
||||
render json: { error: 'User not found' }, status: 404 unless @user
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,19 @@
|
||||
module Carto::Metrics
|
||||
class MapviewsUsageMetrics
|
||||
VALID_METRICS = [
|
||||
:total_views
|
||||
].freeze
|
||||
|
||||
VALID_SERVICES = [
|
||||
:mapviews
|
||||
].freeze
|
||||
|
||||
def initialize(user, _org)
|
||||
@user = user
|
||||
end
|
||||
|
||||
def get(_service, _metric, date)
|
||||
CartoDB::Stats::APICalls.new.get_api_calls_from_redis_source(@user, 'mapviews', from: date, to: date).values[0]
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,15 @@
|
||||
module Carto::Metrics
|
||||
class TwitterImportsRetriever
|
||||
def metrics
|
||||
[:retrieved_items]
|
||||
end
|
||||
|
||||
def services
|
||||
[:twitter_imports]
|
||||
end
|
||||
|
||||
def get_range(user, _org, _service, _metric, date_from, date_to)
|
||||
Carto::SearchTweet.twitter_imports_count_by_date(user.search_tweets, date_from, date_to)
|
||||
end
|
||||
end
|
||||
end
|
@ -0,0 +1,27 @@
|
||||
module Carto::Metrics
|
||||
class UsageMetricsRetriever
|
||||
def initialize(cls)
|
||||
@cls = cls
|
||||
end
|
||||
|
||||
def services
|
||||
@cls::VALID_SERVICES
|
||||
end
|
||||
|
||||
def metrics
|
||||
@cls::VALID_METRICS
|
||||
end
|
||||
|
||||
def get_range(user, org, service, metric, date_from, date_to)
|
||||
user = user
|
||||
org = org
|
||||
usage_metrics = @cls.new(user.username, org ? org.name : nil)
|
||||
|
||||
result = {}
|
||||
date_from.upto(date_to).each do |date|
|
||||
result[date] = usage_metrics.get(service, metric, date)
|
||||
end
|
||||
result
|
||||
end
|
||||
end
|
||||
end
|
Loading…
Reference in new issue