Skip to content
60 changes: 6 additions & 54 deletions lib/ontologies_linked_data/metrics/metrics.rb
Original file line number Diff line number Diff line change
@@ -1,54 +1,5 @@
require 'csv'

module LinkedData
module Metrics
def self.metrics_for_submission(submission, logger)
metrics = nil
logger.info("metrics_for_submission start")
logger.flush
begin
submission.bring(:submissionStatus) if submission.bring?(:submissionStatus)
cls_metrics = class_metrics(submission, logger)
logger.info("class_metrics finished")
logger.flush
metrics = LinkedData::Models::Metric.new

cls_metrics.each do |k,v|
unless v.instance_of?(Integer)
begin
v = Integer(v)
rescue ArgumentError
v = 0
rescue TypeError
v = 0
end
end
metrics.send("#{k}=",v)
end
indiv_count = number_individuals(logger, submission)
metrics.individuals = indiv_count
logger.info("individuals finished")
logger.flush
prop_count = number_properties(logger, submission)
metrics.properties = prop_count
logger.info("properties finished")
logger.flush

# re-generate metrics file
submission.generate_metrics_file(cls_metrics[:classes], indiv_count, prop_count, cls_metrics[:maxDepth])
logger.info("generation of metrics file finished")
logger.flush

rescue Exception => e
logger.error(e.message)
logger.error(e)
logger.flush
metrics = nil
end
metrics
end


def self.max_depth_fn(submission, logger, is_flat, rdfsSC)
max_depth = 0
mx_from_file = submission.metrics_from_file(logger)
Expand Down Expand Up @@ -89,11 +40,8 @@ def self.class_metrics(submission, logger)
submission.ontology.bring(:flat) if submission.ontology.bring?(:flat)

is_flat = submission.ontology.flat
rdfsSC = nil
unless is_flat
rdfsSC = Goo.namespaces[:rdfs][:subClassOf]
end
max_depth = max_depth_fn(submission, logger, is_flat, rdfsSC)
rdfsSC = Goo.namespaces[:rdfs][:subClassOf]
max_depth = max_depth_fn(submission, logger, is_flat, rdfsSC)

cls_metrics = {}
cls_metrics[:classes] = 0
Expand Down Expand Up @@ -159,6 +107,10 @@ def self.class_metrics(submission, logger)
return cls_metrics
end

# TODO: This method appears to be unused — no external callers found in this repo
# or dependent projects (ontologies_api, ncbo_cron, ncbo_annotator).
# Was likely superseded by max_depth_fn which uses SPARQL hierarchy_depth? queries.
# Consider removing after further validation.
def self.recursive_depth(cls,classes,depth,visited)
if depth > 60
#safety for cycles.
Expand Down
13 changes: 1 addition & 12 deletions lib/ontologies_linked_data/models/ontology_submission.rb
Original file line number Diff line number Diff line change
Expand Up @@ -558,21 +558,10 @@ def class_count(logger=nil)
count += mx.individuals
end
count_set = true
else
mx = metrics_from_file(logger)

unless mx.empty?
count = mx[1][0].to_i

if self.hasOntologyLanguage.skos?
count += mx[1][1].to_i
end
count_set = true
end
end

unless count_set
logger.error("No calculated metrics or metrics file was found for #{self.id.to_s}. Unable to return total class count.")
logger.error("No calculated metrics found for #{self.id.to_s}. Unable to return total class count.")
logger.flush
end
count
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -59,43 +59,36 @@ def compute_metrics(logger)
def metrics_for_submission(logger)
logger.info('metrics_for_submission start')
logger.flush
begin
@submission.bring(:submissionStatus) if @submission.bring?(:submissionStatus)
cls_metrics = LinkedData::Metrics.class_metrics(@submission, logger)
logger.info('class_metrics finished')
logger.flush
metrics = LinkedData::Models::Metric.new
@submission.bring(:submissionStatus) if @submission.bring?(:submissionStatus)
cls_metrics = LinkedData::Metrics.class_metrics(@submission, logger)
logger.info('class_metrics finished')
logger.flush
metrics = LinkedData::Models::Metric.new

cls_metrics.each do |k,v|
unless v.instance_of?(Integer)
begin
v = Integer(v)
rescue ArgumentError
v = 0
rescue TypeError
v = 0
end
cls_metrics.each do |k,v|
unless v.instance_of?(Integer)
begin
v = Integer(v)
rescue ArgumentError
v = 0
rescue TypeError
v = 0
end
metrics.send("#{k}=",v)
end
indiv_count = LinkedData::Metrics.number_individuals(logger, @submission)
metrics.individuals = indiv_count
logger.info('individuals finished')
logger.flush
prop_count = LinkedData::Metrics.number_properties(logger, @submission)
metrics.properties = prop_count
logger.info('properties finished')
logger.flush
# re-generate metrics file
generate_metrics_file(cls_metrics[:classes], indiv_count, prop_count, cls_metrics[:maxDepth])
logger.info('generation of metrics file finished')
logger.flush
rescue StandardError => e
logger.error(e.message)
logger.error(e)
logger.flush
metrics = nil
metrics.send("#{k}=",v)
end
indiv_count = LinkedData::Metrics.number_individuals(logger, @submission)
metrics.individuals = indiv_count
logger.info('individuals finished')
logger.flush
prop_count = LinkedData::Metrics.number_properties(logger, @submission)
metrics.properties = prop_count
logger.info('properties finished')
logger.flush
# re-generate metrics file
generate_metrics_file(cls_metrics[:classes], indiv_count, prop_count, cls_metrics[:maxDepth])
logger.info('generation of metrics file finished')
logger.flush
metrics
end

Expand Down
12 changes: 12 additions & 0 deletions test/models/test_ontology_submission.rb
Original file line number Diff line number Diff line change
Expand Up @@ -1178,6 +1178,18 @@ def test_submission_metrics
assert_equal 133, metrics.classes
end

def test_class_count_without_metrics
acronym = "CLSCNT-NOMETRIC"
submission_parse(acronym, "Test class_count without metrics",
"./test/data/ontology_files/BRO_v3.2.owl", 33,
process_rdf: true, extract_metadata: false,
run_metrics: false)
sub = LinkedData::Models::Ontology.find(acronym).first.latest_submission(status: [:rdf])
logger = Logger.new($stderr)
count = sub.class_count(logger)
assert_equal(-1, count, "class_count should return -1 when no metrics are available")
end

# See https://github.com/ncbo/ncbo_cron/issues/82#issuecomment-3104054081
def test_disappearing_values
skip "This issue no longer occurs with the latest goo/sparql-client from AgroPortal"
Expand Down
Loading