On Thu, Jun 03, 2010 at 07:38:12PM +0100, [email protected] wrote:
> From: martyntaylor <[email protected]>
> 
> ---
>  src/lib/tasks/demo_data.rake |  115 
> ++++++++++++++++++++++++++++++++++++++++++
>  1 files changed, 115 insertions(+), 0 deletions(-)
>  create mode 100644 src/lib/tasks/demo_data.rake
> 
> diff --git a/src/lib/tasks/demo_data.rake b/src/lib/tasks/demo_data.rake
> new file mode 100644
> index 0000000..ef6e8d2
> --- /dev/null
> +++ b/src/lib/tasks/demo_data.rake
> @@ -0,0 +1,115 @@
> +namespace :db do
> +  desc "Populates a Cloud Account with historical tasks, takes a cloud 
> account id, user id, the time period in hours, and the
> +        number of tasks to create"
> +
> +  PROB_LONG_RESPONSE = 8
> +  PROB_MEDIUM_RESPONSE = 70
> +  PROB_SHORT_REPONSE = 20
> +  PROB_FAILURE = 2
> +
> +  LONG_RESPONSE_MIN = 7
> +  LONG_RESPONSE_MAX = 15
> +
> +  MEDIUM_RESPONSE_MIN = 2
> +  MEDIUM_RESPONSE_MAX = 5
> +
> +  SHORT_RESPONSE_MIN = 1
> +  SHORT_RESPONSE_MAX = 2
> +
> +  REQUESTS_PER_MINUTE = 1
> +
> +  END_TIME = Time.now
> +
> +  TASK_ACTIONS = [ "create", "start", "stop", "reboot", "destroy" ]
> +
> +  SHORT_ACC = PROB_SHORT_REPONSE + PROB_FAILURE
> +  MEDIUM_ACC = PROB_MEDIUM_RESPONSE + PROB_SHORT_REPONSE + PROB_FAILURE
> +
> +  task :demo_data, :cloud_account_id, :user_id, :time_period, 
> :number_of_tasks, :needs => :environment do |t, args|
> +
> +    @time_scale = args[:time_period].to_f * 60 * 60
> +    @number_of_tasks = args[:number_of_tasks]
> +
> +    puts @number_of_tasks
> +
> +    cloud_account = CloudAccount.find(args[:cloud_account_id])
> +    user = User.find(args[:user_id])
> +
> +    instance = create_instance()
> +
> +    started_at = Time.now
> +    create_tasks(instance, user)
> +    ended_at = Time.now
> +
> +    print_stats(started_at, ended_at)
> +  end
> +
> +  def create_instance()
> +    instance = Instance.new({:name => "instance",
> +                             :hardware_profile_id => 
> HardwareProfile.find(:first),
> +                             :image_id => Image.find(:first),
> +                             :state => Instance::STATE_NEW,
> +                             :pool_id => 1
> +                            })
> +    instance.save!
> +    return instance
> +  end
> +
> +  def print_stats(started_at, ended_at)
> +    run_time = ended_at - started_at
> +    tasks_create_time = run_time / @number_of_tasks.to_f
> +    tasks_per_minute = 60 / tasks_create_time
> +
> +    puts "Total Run Time (s): " + run_time.to_s()
> +    puts "Average Create Time (s): " + tasks_create_time.to_s()
> +    puts "Task Created Per Minute: " + tasks_per_minute.to_s()
> +  end
> +
> +  def create_task(instance, user)
> +    task = Task.new({})
> +    task.user = user
> +    task.type = "InstanceTask"
> +    task.action = TASK_ACTIONS[rand(TASK_ACTIONS.length)]
> +    task.task_target_id = instance.id
> +    task.created_at = END_TIME - (@time_scale.to_f)
> +    return task
> +  end
> +
> +  def create_tasks(instance, user)
> +    for i in 1...@number_of_tasks.to_f do
> +      task = create_task(instance, user)
> +
> +      random = 1 + rand(100)
> +      if random <= PROB_FAILURE
> +        task.state = Task::STATE_FAILED
> +        task.failure_code = 
> Task::FAILURE_CODES[rand(Task::FAILURE_CODES.length)]
> +      else
> +        task.state = Task::STATE_FINISHED
> +
> +        time_submitted = END_TIME - rand(1 + (@time_scale.to_f))
> +        task.time_submitted = time_submitted
> +
> +        task.time_started = calculate_time_started(time_submitted, random)
> +
> +        time_ended = task.time_started + rand(20) + 1
> +        task.time_ended = time_ended
> +      end
> +      task.save!
> +    end
> +  end
> +
> +  def calculate_time_started(time_submitted, random)
> +    time_started = nil
> +
> +    if random <= SHORT_ACC
> +      time_started = time_submitted + (SHORT_RESPONSE_MIN + 
> rand(SHORT_RESPONSE_MAX - SHORT_RESPONSE_MIN + 1))
> +    elsif random <= MEDIUM_ACC
> +      time_started = time_submitted + (MEDIUM_RESPONSE_MIN + 
> rand(MEDIUM_RESPONSE_MAX - MEDIUM_RESPONSE_MIN + 1))
> +    else
> +      time_started = time_submitted + (LONG_RESPONSE_MIN + 
> rand(LONG_RESPONSE_MAX - LONG_RESPONSE_MIN + 1))
> +    end
> +
> +    return time_started
> +  end
> +
> +end
> \ No newline at end of file
> -- 
> 1.6.6.1
> 
> _______________________________________________
> deltacloud-devel mailing list
> [email protected]
> https://fedorahosted.org/mailman/listinfo/deltacloud-devel

ACK, works a treat for me.

Steve.
_______________________________________________
deltacloud-devel mailing list
[email protected]
https://fedorahosted.org/mailman/listinfo/deltacloud-devel

Reply via email to