From fd66e25a317c51aa13cf07f8d4bce6db95735923 Mon Sep 17 00:00:00 2001 From: Martin Fenner Date: Sun, 2 Feb 2020 19:19:28 +0100 Subject: [PATCH] include aggregate metrics. #390 --- app/controllers/clients_controller.rb | 7 +++- app/controllers/concerns/countable.rb | 48 ++++++++++++++++++++++ app/controllers/providers_controller.rb | 15 ++++++- app/controllers/repositories_controller.rb | 6 ++- app/models/doi.rb | 3 ++ 5 files changed, 76 insertions(+), 3 deletions(-) diff --git a/app/controllers/clients_controller.rb b/app/controllers/clients_controller.rb index 6485078af..173f2f4b7 100644 --- a/app/controllers/clients_controller.rb +++ b/app/controllers/clients_controller.rb @@ -96,7 +96,12 @@ def index def show options = {} - options[:meta] = { dois: doi_count(client_id: params[:id]) } + options[:meta] = { + dois: doi_count(client_id: params[:id]), + citations: citation_count(client_id: params[:id]), + views: view_count(client_id: params[:id]), + downloads: download_count(client_id: params[:id]), + }.compact options[:include] = @include options[:is_collection] = false options[:params] = { current_ability: current_ability } diff --git a/app/controllers/concerns/countable.rb b/app/controllers/concerns/countable.rb index 021447006..5dc2059a1 100644 --- a/app/controllers/concerns/countable.rb +++ b/app/controllers/concerns/countable.rb @@ -18,6 +18,54 @@ def doi_count(client_id: nil, provider_id: nil, consortium_id: nil, user_id: nil response.results.total.positive? ? facet_by_year(response.response.aggregations.created.buckets) : [] end + def view_count(client_id: nil, provider_id: nil, consortium_id: nil, user_id: nil, state: nil) + if client_id + response = Doi.query(nil, client_id: client_id, page: { number: 1, size: 0 }) + elsif provider_id + response = Doi.query(nil, provider_id: provider_id, page: { number: 1, size: 0 }) + elsif consortium_id + response = Doi.query(nil, consortium_id: consortium_id, page: { number: 1, size: 0 }) + elsif user_id + response = Doi.query(nil, user_id: user_id, state: state, page: { number: 1, size: 0 }) + else + response = Doi.query(nil, page: { number: 1, size: 0 }) + end + + response.results.total.positive? ? facet_by_year(response.response.aggregations.views.buckets) : 0 + end + + def download_count(client_id: nil, provider_id: nil, consortium_id: nil, user_id: nil, state: nil) + if client_id + response = Doi.query(nil, client_id: client_id, page: { number: 1, size: 0 }) + elsif provider_id + response = Doi.query(nil, provider_id: provider_id, page: { number: 1, size: 0 }) + elsif consortium_id + response = Doi.query(nil, consortium_id: consortium_id, page: { number: 1, size: 0 }) + elsif user_id + response = Doi.query(nil, user_id: user_id, state: state, page: { number: 1, size: 0 }) + else + response = Doi.query(nil, page: { number: 1, size: 0 }) + end + + response.results.total.positive? ? facet_by_year(response.response.aggregations.downloads.buckets) : 0 + end + + def citation_count(client_id: nil, provider_id: nil, consortium_id: nil, user_id: nil, state: nil) + if client_id + response = Doi.query(nil, client_id: client_id, page: { number: 1, size: 0 }) + elsif provider_id + response = Doi.query(nil, provider_id: provider_id, page: { number: 1, size: 0 }) + elsif consortium_id + response = Doi.query(nil, consortium_id: consortium_id, page: { number: 1, size: 0 }) + elsif user_id + response = Doi.query(nil, user_id: user_id, state: state, page: { number: 1, size: 0 }) + else + response = Doi.query(nil, page: { number: 1, size: 0 }) + end + + response.results.total.positive? ? facet_by_year(response.response.aggregations.citations.buckets) : 0 + end + # cumulative count clients by year # count until the previous year if client has been deleted # show all clients for admin diff --git a/app/controllers/providers_controller.rb b/app/controllers/providers_controller.rb index d139af87c..ef3c69895 100644 --- a/app/controllers/providers_controller.rb +++ b/app/controllers/providers_controller.rb @@ -155,16 +155,25 @@ def show clients = client_count(provider_id: nil) dois = doi_count(provider_id: nil) resource_types = resource_type_count(provider_id: nil) + citations = citation_count(provider_id: nil) + views = view_count(provider_id: nil) + downloads = download_count(provider_id: nil) elsif @provider.member_type == "consortium" providers = provider_count(consortium_id: params[:id]) clients = client_count(consortium_id: params[:id]) dois = doi_count(consortium_id: params[:id]) resource_types = resource_type_count(consortium_id: params[:id]) + citations = citation_count(consortium_id: params[:id]) + views = view_count(consortium_id: params[:id]) + downloads = download_count(consortium_id: params[:id]) else providers = nil clients = client_count(provider_id: params[:id]) dois = doi_count(provider_id: params[:id]) resource_types = resource_type_count(provider_id: params[:id]) + citations = citation_count(provider_id: params[:id]) + views = view_count(provider_id: params[:id]) + downloads = download_count(provider_id: params[:id]) end options = {} @@ -172,7 +181,11 @@ def show providers: providers, clients: clients, dois: dois, - "resourceTypes" => resource_types }.compact + "resourceTypes" => resource_types, + citations: citations, + views: views, + downloads: downloads, + }.compact options[:include] = @include options[:is_collection] = false options[:params] = { current_ability: current_ability } diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index 0674a1c48..9ce1b282b 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -122,7 +122,11 @@ def show options = {} options[:meta] = { dois: doi_count(client_id: params[:id]), - "resourceTypes" => resource_type_count(client_id: params[:id]) }.compact + "resourceTypes" => resource_type_count(client_id: params[:id]), + citations: citation_count(client_id: params[:id]), + views: view_count(client_id: params[:id]), + downloads: download_count(client_id: params[:id]), + }.compact options[:include] = @include options[:is_collection] = false options[:params] = { current_ability: current_ability } diff --git a/app/models/doi.rb b/app/models/doi.rb index 4b46557f5..e1a0e63d6 100644 --- a/app/models/doi.rb +++ b/app/models/doi.rb @@ -534,6 +534,9 @@ def self.query_aggregations sources: { terms: { field: 'source', size: 15, min_doc_count: 1 } }, subjects: { terms: { field: 'subjects.subject', size: 15, min_doc_count: 1 } }, certificates: { terms: { field: 'client.certificate', size: 15, min_doc_count: 1 } }, + views: { value_count: { field: "views_count" } }, + downloads: { value_count: { field: "download_count" } }, + citations: { value_count: { field: "citation_count" } }, } end