Skip to content

Commit

Permalink
Task for calculating excursion reuse metrics
Browse files Browse the repository at this point in the history
  • Loading branch information
agordillo committed Jun 30, 2016
1 parent 97062df commit 97c8b3f
Show file tree
Hide file tree
Showing 2 changed files with 134 additions and 0 deletions.
69 changes: 69 additions & 0 deletions app/models/vish_editor_utils.rb
Expand Up @@ -55,4 +55,73 @@ def self.getElType(el)
end
end

def self.getResources(loJSON)
require "uri"
resources = []

begin
slides = loJSON["slides"]
standardSlides = []

slides.each do |slide|
case slide["type"]
when "flashcard"
resources = resources + URI.extract(slide["background"],/http(s)?/) unless slide["background"].blank?
standardSlides = standardSlides + (slide["slides"] || [])
when "VirtualTour"
unless slide["map_service"] != "Google Maps" or slide["center"].blank? or slide["center"]["lat"].blank? or slide["center"]["lng"].blank?
resources.push("VirtualTourWithCenterCoordinates" + slide["center"]["lat"] + "&" + slide["center"]["lng"])
end
standardSlides = standardSlides + (slide["slides"] || [])
when "enrichedvideo"
resources = resources + URI.extract(slide["video"]["source"],/http(s)?/) unless slide["video"].blank? or slide["video"]["source"].blank?
standardSlides = standardSlides + (slide["slides"] || [])
when "standard",nil
#Standard or default
standardSlides.push(slide)
when "quiz"
#Do nothing
else
#Do nothing
end
end

slideElements = []
standardSlides.each do |slide|
slideElements = slideElements + (slide["elements"] || [])
end

slideElements.each do |el|
case el["type"]
when nil
#Do nothing
when "text"
if !el["body"].blank?
rawText = Nokogiri::HTML(el["body"]).text rescue ""
if rawText.length > 150
#Do not consider small texts for reusing...
resources.push(rawText.first(300))
end
end
when "image"
resources.push(el["body"]) unless el["body"].blank?
when "object","snapshot"
resources = resources + URI.extract(el["body"],/http(s)?/) unless el["body"].blank?
when "video","audio"
resources = resources + URI.extract(el["sources"],/http(s)?/) unless el["sources"].blank?
when "quiz"
unless el["quiztype"].blank? or el["question"]["value"].blank? or el["choices"].blank?
quizResource = el["quiztype"] + el["question"]["value"] + el["choices"].map{|c| c["value"]}.sum
resources.push(quizResource)
end
else
end
end
rescue => e
return "Exception: " + e.message
end

resources.compact.uniq
end

end
65 changes: 65 additions & 0 deletions lib/tasks/stats.rake
Expand Up @@ -9,6 +9,7 @@ namespace :stats do
Rake::Task["stats:prepare"].invoke
Rake::Task["stats:excursions"].invoke(false)
Rake::Task["stats:excursions_ts"].invoke(false)
Rake::Task["stats:excursions_reuse"].invoke(false)
Rake::Task["stats:resources"].invoke(false)
Rake::Task["stats:users"].invoke(false)
end
Expand Down Expand Up @@ -167,6 +168,70 @@ namespace :stats do
end
end

#Usage
#Development: bundle exec rake stats:excursions_reuse
task :excursions_reuse, [:prepare] => :environment do |t,args|
args.with_defaults(:prepare => true)
Rake::Task["stats:prepare"].invoke if args.prepare

puts "Excursions Reuse Stats"

reusedExcursions = []
reusedResources = []
#iterate from oldest to newest excursions
allExcursions = Excursion.order("id ASC")
# allExcursions = Excursion.where(:draft => false).order("id ASC")
allExcursionsLength = allExcursions.count

allExcursionsResources = {}
allExcursions.each do |ex|
allExcursionsResources[ex.id] = VishEditorUtils.getResources(JSON.parse(ex.json))
end

for i in 0..allExcursionsLength-1
for j in i+1..allExcursionsLength-1
rResources = (allExcursionsResources[allExcursions[i].id] & allExcursionsResources[allExcursions[j].id])
if rResources.length > 1
reusedResources = reusedResources + rResources
reusedExcursions.push(allExcursions[i])
break
end
end
end

reusedResources.uniq

filePath = "reports/excursions_reuse_stats.xlsx"
prepareFile(filePath)

Axlsx::Package.new do |p|
p.workbook.add_worksheet(:name => "Presentations Reuse") do |sheet|
rows = []
rows << ["Presentations Reuse"]
rows << ["Total Excursions","Reused Excursions","Percentage"]
rows << [allExcursions.length,reusedExcursions.length,((reusedExcursions.length/allExcursions.length.to_f)*100).to_s + "%"]

# rows << []
# rows << ["Reused resources"]
# rowIndex = rows.length

# rows += Array.new(reusedResources.length).map{|e|[]}
# reusedResources.each_with_index do |resource,i|
# rows[rowIndex+i] = [resource]
# end

rows.each do |row|
sheet.add_row row
end
end

prepareFile(filePath)
p.serialize(filePath)

puts("Task Finished. Results generated at " + filePath)
end
end

# #Usage
# #Development: bundle exec rake stats:check_resources
# task :check_resources, [:prepare] => :environment do |t,args|
Expand Down

0 comments on commit 97c8b3f

Please sign in to comment.