Skip to content

Commit a854c4e

Browse files
authored
Merge pull request #493 from ncbo/bugfix/statistics/492
Refactor home page statistics for slices
2 parents 25dffb9 + 7323a66 commit a854c4e

File tree

5 files changed

+66
-28
lines changed

5 files changed

+66
-28
lines changed

app/controllers/application_controller.rb

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -642,24 +642,6 @@ def get_recent_mappings
642642
return recent_mappings
643643
end
644644

645-
def total_mapping_count
646-
total_count = 0
647-
648-
begin
649-
stats = LinkedData::Client::HTTP.get("#{REST_URI}/mappings/statistics/ontologies")
650-
unless stats.blank?
651-
stats = stats.to_h.compact
652-
# Some of the mapping counts are erroneously stored as strings
653-
stats.transform_values!(&:to_i)
654-
total_count = stats.values.sum
655-
end
656-
rescue
657-
Log.add :error, e.message
658-
end
659-
660-
return total_count
661-
end
662-
663645
def determine_layout
664646
if Rails.env.appliance?
665647
'appliance'

app/controllers/concerns/mapping_statistics.rb

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
module MappingStatistics
44
extend ActiveSupport::Concern
55

6-
MAPPING_STATISTICS_URL = "#{LinkedData::Client.settings.rest_url}/mappings/statistics/ontologies/"
6+
MAPPING_STATISTICS_URL = "#{LinkedData::Client.settings.rest_url}/mappings/statistics/ontologies"
77

88
def mapping_counts(source_acronym)
99
mapping_counts = []
@@ -13,10 +13,11 @@ def mapping_counts(source_acronym)
1313
display_links: false,
1414
display_context: false
1515
)
16+
ontologies_by_acronym = ontologies.index_by(&:acronym)
1617

17-
statistics = LinkedData::Client::HTTP.get(MAPPING_STATISTICS_URL + source_acronym)
18+
statistics = LinkedData::Client::HTTP.get("#{MAPPING_STATISTICS_URL}/#{source_acronym}")
1819
statistics&.each_pair do |target_acronym, count|
19-
ont = ontologies.find { |o| o.acronym.eql? target_acronym.to_s }
20+
ont = ontologies_by_acronym[target_acronym.to_s]
2021
# Handle the case where statistics are still present for a deleted ontology
2122
next if ont.nil? || ont.summaryOnly
2223

@@ -25,4 +26,17 @@ def mapping_counts(source_acronym)
2526

2627
mapping_counts.sort! { |a, b| a[:target_ontology].name.downcase <=> b[:target_ontology].name.downcase }
2728
end
29+
30+
def total_mapping_count(ont_acronyms)
31+
stats = LinkedData::Client::HTTP.get(MAPPING_STATISTICS_URL)
32+
return 0 if stats.blank?
33+
34+
stats = stats.to_h.compact
35+
stats = stats.select { |k, _| ont_acronyms.include?(k.to_s) }
36+
stats.transform_values!(&:to_i)
37+
stats.values.sum
38+
rescue StandardError => e
39+
Log.add :error, e.message
40+
0
41+
end
2842
end

app/controllers/home_controller.rb

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# frozen_string_literal: true
22

33
class HomeController < ApplicationController
4+
include MappingStatistics
5+
46
layout :determine_layout
57

68
def index
@@ -12,10 +14,10 @@ def index
1214
organize_groups
1315

1416
# Calculate BioPortal summary statistics
15-
@ont_count = @ontologies.length
16-
@cls_count = LinkedData::Client::Models::Metrics.all.map { |m| m.classes.to_i }.sum
17-
@prop_count = 36286
18-
@map_count = total_mapping_count
17+
ont_acronyms = @ontologies.map(&:acronym)
18+
@statistics = OntologyStatisticsService.call(ont_acronyms)
19+
@map_count = total_mapping_count(ont_acronyms)
20+
1921
@analytics = LinkedData::Client::Analytics.last_month
2022

2123
@ontology_names = @ontologies.map { |ont| ["#{ont.name} (#{ont.acronym})", ont.acronym] }
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
# frozen_string_literal: true
2+
3+
class OntologyStatisticsService < ApplicationService
4+
def initialize(ont_acronyms)
5+
@ont_acronyms = ont_acronyms
6+
@metrics = ontology_metrics(@ont_acronyms)
7+
end
8+
9+
def call
10+
{
11+
ontology_count: @ont_acronyms.size,
12+
class_count: @metrics[:classes],
13+
property_count: @metrics[:properties],
14+
individual_count: @metrics[:individuals]
15+
}
16+
end
17+
18+
private
19+
20+
def ontology_metrics(ont_acronyms)
21+
query_string = { include: 'classes,properties,individuals', display_links: false, display_context: false }
22+
metrics = LinkedData::Client::Models::Metrics.all(query_string)
23+
24+
metrics.select! do |m|
25+
acronym = m.id.split('/ontologies/').last.split('/').first
26+
ont_acronyms.include?(acronym)
27+
end
28+
29+
metrics.each_with_object({ classes: 0, properties: 0, individuals: 0 }) do |m, sums|
30+
sums[:classes] += m.classes
31+
sums[:properties] += m.properties
32+
sums[:individuals] += m.individuals
33+
end
34+
end
35+
end

app/views/home/index.html.haml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -75,17 +75,22 @@
7575
%div.d-flex.justify-content-between.align-items-center
7676
Ontologies
7777
%h4
78-
%span.badge.text-bg-secondary= number_with_delimiter(@ont_count)
78+
%span.badge.text-bg-secondary= number_with_delimiter(@statistics[:ontology_count])
7979
%li.list-group-item
8080
%div.d-flex.justify-content-between.align-items-center
8181
Classes
8282
%h4
83-
%span.badge.text-bg-secondary= number_with_delimiter(@cls_count)
83+
%span.badge.text-bg-secondary= number_with_delimiter(@statistics[:class_count])
8484
%li.list-group-item
8585
%div.d-flex.justify-content-between.align-items-center
8686
Properties
8787
%h4
88-
%span.badge.text-bg-secondary= number_with_delimiter(@prop_count)
88+
%span.badge.text-bg-secondary= number_with_delimiter(@statistics[:property_count])
89+
%li.list-group-item
90+
%div.d-flex.justify-content-between.align-items-center
91+
Individuals
92+
%h4
93+
%span.badge.text-bg-secondary= number_with_delimiter(@statistics[:individual_count])
8994
%li.list-group-item
9095
%div.d-flex.justify-content-between.align-items-center
9196
Mappings

0 commit comments

Comments
 (0)