Merge pull request #113 from Ducz0r/lm-add-first-time-activities

Fix first time data generator & fake data generator
This commit is contained in:
Luka Murn 2016-08-30 13:07:52 +02:00 committed by GitHub
commit 2b382fee0f
3 changed files with 248 additions and 117 deletions

View file

@ -255,7 +255,12 @@ class Organization < ActiveRecord::Base
def calculate_space_taken def calculate_space_taken
st = 0 st = 0
projects.includes( projects.includes(
my_modules: { protocols: { steps: :assets }, results: { result_asset: :asset } } experiments: {
my_modules: {
protocols: { steps: :assets },
results: { result_asset: :asset }
}
}
).find_each do |project| ).find_each do |project|
project.project_my_modules.find_each do |my_module| project.project_my_modules.find_each do |my_module|
my_module.protocol.steps.find_each do |step| my_module.protocol.steps.find_each do |step|

View file

@ -135,10 +135,10 @@ module FirstTimeDataGenerator
) )
# Add a comment # Add a comment
project.comments << Comment.create( generate_project_comment(
user: user, project,
message: "I've created a demo project", user,
created_at: generate_random_time(1.week.ago) "I've created a demo project"
) )
# Create a module group # Create a module group
@ -316,44 +316,45 @@ module FirstTimeDataGenerator
end end
# Add comments to modules # Add comments to modules
my_modules[0].comments << Comment.create( generate_module_comment(
user: user, my_modules[0],
message: "We should have a meeting to discuss sampling parametrs soon.", user,
created_at: generate_random_time(my_modules[0].created_at, 1.day) 'We should have a meeting to discuss sampling parametrs soon.'
) )
my_modules[0].comments << Comment.create( generate_module_comment(
user: user, my_modules[0],
message: "I agree." user,
'I agree.'
) )
my_modules[1].comments << Comment.create( generate_module_comment(
user: user, my_modules[1],
message: "The samples have arrived.", user,
created_at: generate_random_time(my_modules[0].created_at, 2.days) 'The samples have arrived.'
) )
my_modules[2].comments << Comment.create( generate_module_comment(
user: user, my_modules[2],
message: "Due date has been postponed for a day.", user,
created_at: generate_random_time(my_modules[0].created_at, 1.days) 'Due date has been postponed for a day.'
) )
my_modules[4].comments << Comment.create( generate_module_comment(
user: user, my_modules[4],
message: "Please show Steve the RT procedure.", user,
created_at: generate_random_time(my_modules[0].created_at, 2.days) 'Please show Steve the RT procedure.'
) )
my_modules[5].comments << Comment.create( generate_module_comment(
user: user, my_modules[5],
message: "The results must be very definitive.", user,
created_at: generate_random_time(my_modules[0].created_at, 3.days) 'The results must be very definitive.'
) )
my_modules[7].comments << Comment.create( generate_module_comment(
user: user, my_modules[7],
message: "The due date here is flexible.", user,
created_at: generate_random_time(my_modules[0].created_at, 3.days) 'The due date here is flexible.'
) )
# Create tags and add them to module # Create tags and add them to module
@ -422,10 +423,10 @@ module FirstTimeDataGenerator
created_at: generate_random_time(my_modules[0].created_at, 1.days), created_at: generate_random_time(my_modules[0].created_at, 1.days),
user: user user: user
) )
temp_result.comments << Comment.new( generate_result_comment(
user: user, temp_result,
message: "The table shows proposed number of biological replicates.", user,
created_at: generate_random_time(my_modules[0].created_at, 1.days) 'The table shows proposed number of biological replicates.'
) )
temp_result.table = Table.new( temp_result.table = Table.new(
created_by: user, created_by: user,
@ -533,10 +534,11 @@ module FirstTimeDataGenerator
created_at: generate_random_time(my_modules[2].created_at, 1.days), created_at: generate_random_time(my_modules[2].created_at, 1.days),
user: user user: user
) )
temp_result.comments << Comment.new( generate_result_comment(
user: user, temp_result,
message: "PVY NTN 6dpi isolation seems to have failed, please repeat nanodrop measurement.", user,
created_at: generate_random_time(my_modules[2].created_at, 2.days) 'PVY NTN 6dpi isolation seems to have failed, ' \
'please repeat nanodrop measurement.'
) )
temp_result.table = Table.new( temp_result.table = Table.new(
created_by: user, created_by: user,
@ -738,12 +740,12 @@ module FirstTimeDataGenerator
# Add comment to step # Add comment to step
step = my_modules[6].protocol.steps.where("position = 1").take step = my_modules[6].protocol.steps.where("position = 1").take
step.comments << Comment.new(
user: user,
message: "What is the Cq that should be considered as positive result?",
created_at: generate_random_time(step.created_at, 2.hours)
)
step.save step.save
generate_step_comment(
step,
user,
'What is the Cq that should be considered as positive result?'
)
# ----------------- Module 8 ------------------ # ----------------- Module 8 ------------------
module_step_names = [ module_step_names = [
@ -903,27 +905,90 @@ module FirstTimeDataGenerator
end end
if polite_comment if polite_comment
commented_on = generate_random_time(completed_on) commented_on = generate_random_time(completed_on)
step.comments << Comment.create( generate_step_comment(
user: @user, step,
message: polite_comment, @user,
created_at: commented_on polite_comment,
) commented_on
Activity.create(
type_of: :add_comment_to_step,
project: my_module.experiment.project,
my_module: my_module,
user: @user,
created_at: commented_on,
message: I18n.t(
"activities.add_comment_to_step",
user: @user.full_name,
step: i,
step_name: step.name
)
) )
end end
end end
end end
end end
def generate_project_comment(project, user, message, created_at = nil)
created_at ||= generate_random_time(project.created_at, 1.week)
project.comments << Comment.create(
user: user,
message: message,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_project,
user: user,
project: project,
created_at: created_at,
message: t('activities.add_comment_to_project',
user: user.full_name,
project: project.name)
)
end
def generate_module_comment(my_module, user, message, created_at = nil)
created_at ||= generate_random_time(my_module.created_at, 1.day)
my_module.comments << Comment.create(
user: user,
message: message,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_module,
user: user,
project: my_module.experiment.project,
my_module: my_module,
created_at: created_at,
message: t('activities.add_comment_to_module',
user: user.full_name,
module: my_module.name)
)
end
def generate_result_comment(result, user, message, created_at = nil)
created_at ||= generate_random_time(result.created_at, 1.days)
result.comments << Comment.new(
user: user,
message: message,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_result,
user: user,
project: result.my_module.experiment.project,
my_module: result.my_module,
created_at: created_at,
message: t('activities.add_comment_to_result',
user: user.full_name,
result: result.name)
)
end
def generate_step_comment(step, user, message, created_at = nil)
created_at ||= generate_random_time(step.created_at, 2.hours)
step.comments << Comment.new(
user: user,
message: message,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_step,
user: user,
project: step.protocol.my_module.experiment.project,
my_module: step.protocol.my_module,
created_at: created_at,
message: t('activities.add_comment_to_step',
user: user.full_name,
step: step.position + 1,
step_name: step.name)
)
end
end end

View file

@ -16,7 +16,7 @@ namespace :db do
NR_PROTOCOLS = 20 NR_PROTOCOLS = 20
NR_PROTOCOL_KEYWORDS = 20 NR_PROTOCOL_KEYWORDS = 20
NR_PROJECTS = 3 NR_PROJECTS = 3
NR_EXPERIMENTS = 2 NR_EXPERIMENTS = 4
NR_MODULE_GROUPS = 4 NR_MODULE_GROUPS = 4
NR_MODULES = 4 NR_MODULES = 4
NR_STEPS = 3 NR_STEPS = 3
@ -437,13 +437,7 @@ namespace :db do
# Add some comments # Add some comments
for _ in 1..nr_comments for _ in 1..nr_comments
if rand <= RATIO_COMMENTS generate_fake_project_comment(project) if rand <= RATIO_COMMENTS
project.comments << Comment.create(
user: pluck_random(project.users),
message: Faker::Hipster.sentence,
created_at: Faker::Time.backward(500)
)
end
end end
end end
end end
@ -458,13 +452,15 @@ namespace :db do
restored_by = pluck_random(project.users) restored_by = pluck_random(project.users)
restored_on = Faker::Time.between(archived_on, DateTime.now) restored_on = Faker::Time.between(archived_on, DateTime.now)
author = pluck_random(project.users)
Experiment.create( Experiment.create(
name: Faker::Hacker.noun, name: Faker::Hacker.noun,
description: Faker::Hipster.sentence, description: Faker::Hipster.sentence,
project: project, project: project,
created_at: created_at, created_at: created_at,
created_by: pluck_random(project.users), created_by: author,
archived: status, last_modified_by: author,
archived: status.in?([:active, :restored]),
archived_on: status.in?([:archived, :restored]) ? archived_on: status.in?([:archived, :restored]) ?
archived_on : nil, archived_on : nil,
archived_by: status.in?([:archived, :restored]) ? archived_by: status.in?([:archived, :restored]) ?
@ -496,8 +492,8 @@ namespace :db do
taken_pos = [] taken_pos = []
for _ in 1..nr_modules for _ in 1..nr_modules
begin begin
x = rand(0..nr_modules) x = rand(0..nr_modules) * 32
y = rand(0..nr_modules) y = rand(0..nr_modules) * 16
end while [x, y].in? taken_pos end while [x, y].in? taken_pos
taken_pos << [x, y] taken_pos << [x, y]
@ -523,7 +519,7 @@ namespace :db do
my_module_group: status == :archived ? my_module_group: status == :archived ?
nil : nil :
(rand <= RATIO_MODULE_MODULE_GROUPS ? (rand <= RATIO_MODULE_MODULE_GROUPS ?
pluck_random(project.my_module_groups) : nil pluck_random(experiment.my_module_groups) : nil
), ),
archived: status == :archived, archived: status == :archived,
archived_on: status.in?([:archived, :restored]) ? archived_on: status.in?([:archived, :restored]) ?
@ -538,7 +534,7 @@ namespace :db do
Activity.create( Activity.create(
type_of: :create_module, type_of: :create_module,
user: author, user: author,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
message: I18n.t( message: I18n.t(
"activities.create_module", "activities.create_module",
@ -551,7 +547,7 @@ namespace :db do
Activity.create( Activity.create(
type_of: :archive_module, type_of: :archive_module,
user: archived_by, user: archived_by,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
message: I18n.t( message: I18n.t(
"activities.archive_module", "activities.archive_module",
@ -565,7 +561,7 @@ namespace :db do
Activity.create( Activity.create(
type_of: :restore_module, type_of: :restore_module,
user: restored_by, user: restored_by,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
message: I18n.t( message: I18n.t(
"activities.restore_module", "activities.restore_module",
@ -590,7 +586,7 @@ namespace :db do
taken_user_ids << user.id taken_user_ids << user.id
assigned_on = Faker::Time.backward(500) assigned_on = Faker::Time.backward(500)
assigned_by = pluck_random(my_module.project.users) assigned_by = pluck_random(my_module.experiment.project.users)
UserMyModule.create( UserMyModule.create(
user: user, user: user,
my_module: my_module, my_module: my_module,
@ -600,7 +596,7 @@ namespace :db do
Activity.create( Activity.create(
type_of: :assign_user_to_module, type_of: :assign_user_to_module,
user: assigned_by, user: assigned_by,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
message: I18n.t( message: I18n.t(
"activities.assign_user_to_module", "activities.assign_user_to_module",
@ -634,18 +630,12 @@ namespace :db do
# Add some comments # Add some comments
for _ in 1..nr_comments for _ in 1..nr_comments
if rand <= RATIO_COMMENTS generate_fake_module_comment(my_module) if rand <= RATIO_COMMENTS
my_module.comments << Comment.create(
user: pluck_random(my_module.project.users),
message: Faker::Hipster.sentence,
created_at: Faker::Time.backward(500)
)
end
end end
end end
# Generate some connections between modules # Generate some connections between modules
project.my_module_groups.find_each do |my_module_group| experiment.my_module_groups.find_each do |my_module_group|
if my_module_group.my_modules.empty? or if my_module_group.my_modules.empty? or
my_module_group.my_modules.count == 1 my_module_group.my_modules.count == 1
# If any module group doesn't contain # If any module group doesn't contain
@ -753,7 +743,7 @@ namespace :db do
# Add activities # Add activities
Activity.create( Activity.create(
type_of: :add_result, type_of: :add_result,
project: project, project: experiment.project,
my_module: my_module, my_module: my_module,
user: user, user: user,
created_at: created_at, created_at: created_at,
@ -767,7 +757,7 @@ namespace :db do
Activity.create( Activity.create(
type_of: :archive_result, type_of: :archive_result,
user: user, user: user,
project: project, project: experiment.project,
my_module: my_module, my_module: my_module,
message: I18n.t( message: I18n.t(
str2, str2,
@ -781,27 +771,7 @@ namespace :db do
# Add some comments # Add some comments
for _ in 1..nr_comments for _ in 1..nr_comments
if rand <= RATIO_COMMENTS generate_fake_result_comment(result) if rand <= RATIO_COMMENTS
comment_user = pluck_random(result.my_module.project.users)
comment_created_at = Faker::Time.backward(500)
result.comments << Comment.create(
user: comment_user,
message: Faker::Hipster.sentence,
created_at: comment_created_at
)
Activity.create(
type_of: :add_comment_to_result,
project: project,
my_module: my_module,
user: comment_user,
created_at: comment_created_at,
message: I18n.t(
"activities.add_comment_to_result",
user: user.full_name,
result: result.name
)
)
end
end end
end end
end end
@ -972,6 +942,11 @@ namespace :db do
create_private_user_organization(user, DEFAULT_PRIVATE_ORG_NAME) create_private_user_organization(user, DEFAULT_PRIVATE_ORG_NAME)
end end
# Generate thumbnails of all experiments
Experiment.find_each do |experiment|
experiment.generate_workflow_img
end
# Calculate space taken by each organization; this must # Calculate space taken by each organization; this must
# be done in a separate transaction because the estimated # be done in a separate transaction because the estimated
# asset sizes are calculated in after_commit, which is done # asset sizes are calculated in after_commit, which is done
@ -1001,7 +976,7 @@ namespace :db do
protocol = nil protocol = nil
if my_module.present? if my_module.present?
protocol = my_module.protocol protocol = my_module.protocol
users = my_module.users users = my_module.experiment.project.users
author = pluck_random(users) author = pluck_random(users)
if rand <= THRESHOLD_PROTOCOL_IN_MODULE_LINKED && if rand <= THRESHOLD_PROTOCOL_IN_MODULE_LINKED &&
(parent = pluck_random( (parent = pluck_random(
@ -1082,7 +1057,7 @@ namespace :db do
if protocol.in_module? if protocol.in_module?
Activity.create( Activity.create(
type_of: :create_step, type_of: :create_step,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
user: step.user, user: step.user,
created_at: created_at, created_at: created_at,
@ -1097,7 +1072,7 @@ namespace :db do
if completed then if completed then
Activity.create( Activity.create(
type_of: :complete_step, type_of: :complete_step,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
user: step.user, user: step.user,
created_at: completed_on, created_at: completed_on,
@ -1136,7 +1111,7 @@ namespace :db do
if checked then if checked then
Activity.create( Activity.create(
type_of: :check_step_checklist_item, type_of: :check_step_checklist_item,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
user: step.user, user: step.user,
created_at: checked_on, created_at: checked_on,
@ -1161,6 +1136,8 @@ namespace :db do
if rand <= RATIO_STEP_ATTACHMENTS then if rand <= RATIO_STEP_ATTACHMENTS then
asset = Asset.create( asset = Asset.create(
file: generate_file(rand(MIN_FILE_SIZE..MAX_FILE_SIZE)), file: generate_file(rand(MIN_FILE_SIZE..MAX_FILE_SIZE)),
estimated_size: 0,
file_present: true,
created_by: step.user created_by: step.user
) )
StepAsset.create( StepAsset.create(
@ -1198,7 +1175,7 @@ namespace :db do
) )
Activity.create( Activity.create(
type_of: :add_comment_to_step, type_of: :add_comment_to_step,
project: my_module.project, project: my_module.experiment.project,
my_module: my_module, my_module: my_module,
user: user, user: user,
created_at: created_at, created_at: created_at,
@ -1247,6 +1224,90 @@ namespace :db do
end end
end end
def generate_fake_project_comment(project)
user = pluck_random(project.users)
created_at = Faker::Time.backward(500)
project.comments << Comment.create(
user: user,
message: Faker::Hipster.sentence,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_project,
user: user,
project: project,
created_at: created_at,
message: I18n.t('activities.add_comment_to_project',
user: user.full_name,
project: project.name)
)
end
def generate_fake_module_comment(my_module)
user = pluck_random(my_module.experiment.project.users)
created_at = Faker::Time.backward(500)
my_module.comments << Comment.create(
user: user,
message: Faker::Hipster.sentence,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_module,
user: user,
project: my_module.experiment.project,
my_module: my_module,
created_at: created_at,
message: I18n.t('activities.add_comment_to_module',
user: user.full_name,
module: my_module.name)
)
end
def generate_fake_result_comment(result)
user = pluck_random(result.my_module.experiment.project.users)
created_at = Faker::Time.backward(500)
result.comments << Comment.create(
user: user,
message: Faker::Hipster.sentence,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_result,
project: result.my_module.experiment.project,
my_module: result.my_module,
user: user,
created_at: created_at,
message: I18n.t(
'activities.add_comment_to_result',
user: user.full_name,
result: result.name
)
)
end
def generate_fake_step_comment(step)
user = pluck_random(step.protocol.my_module.experiment.project.users)
created_at = Faker::Time.backward(500)
step.comments << Comment.create(
user: user,
message: Faker::Hipster.sentence,
created_at: created_at
)
Activity.create(
type_of: :add_comment_to_step,
project: step.protocol.my_module.experiment.project,
my_module: step.protocol.my_module,
user: user,
created_at: created_at,
message: I18n.t(
"activities.add_comment_to_step",
user: user.full_name,
step: step.position + 1,
step_name: step.name
)
)
end
# WARNING: This only works on PostgreSQL # WARNING: This only works on PostgreSQL
def pluck_random(scope) def pluck_random(scope)
scope.order("RANDOM()").first scope.order("RANDOM()").first